Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème dans une macro devant faire un tri

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Problème dans une macro devant faire un tri

n°1911101
foxley_gra​vity
Posté le 03-08-2009 à 10:08:11  profilanswer
 

Bonjour  
 
Je suis débutant en vba et je dois faire un petit programme
 
J'ai un petit probème avec une macro ...
J'ai un fichier dont le nombre de données varient ( et donc le nombre de lignes) mais les colonnes restent les mêmes ... j'ai 3 colonnes : les titres ( col 2) , les montants (col 10 ) , et les noms ( col 6 )  
 
J'aimerai un programme qui vienne lire tous les titres ... ( ici le seul titre démandé est x)  et qui viennent sommer les montants correspondant.
 
Mon probleme est que :  
 
je n'arrive pas à imposer a ma macro de commencer a sommer 5 lignes apres avoir sélectionner le titre sélectionné ( ici x ) et surtout ma macro ne s'arrete pas apres , elle continue a sommer les valeurs des titres suivants  
info suplémentaire : entre chaque montant il y a 1 blanc  
entre le dernier montant d'un titre , et le premier du suivant il y a 2 blanc ... donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...  
 
Voici la macro (qui ouvre le fichiercible  avec les titres ,les montant.. pour copier la somme dans le fichier ouvert)
 
 
 
Sub copier_sinistre()
 
 
Dim i As Integer
Dim last_line As Integer
Dim star_line As Integer
 
 
Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau\2008Sinistres02062009.xls"
Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
 
 
Worksheets("PREVIsin2008" ).Select
 
 
last_line = Cells(65536, 10).End(xlUp).Row
start_line = 1
Dim tab1
Set tab1 = CreateObject("Scripting.Dictionary" )
old_cle = ""
For ligne = start_line To last_line
    If Cells(ligne, 2) = "" Then
        cle = old_cle
    Else
        cle = Cells(ligne, 2)
        old_cle = cle
    End If
   
    If Cells(ligne, 10) <> 0 Then
        If tab1.exists(cle) Then
            tmp = tab1(cle)
            tmp(0) = tmp(0) + Cells(ligne, 10) ' cumul des sommes
            tmp(1) = tmp(1) & " " & Cells(ligne, 6) ' cumul des noms
            tab1(cle) = tmp
        Else
            tab1(cle) = Array(Cells(ligne, 10), Cells(ligne, 6))
        End If
     
  MsgBox (Cells(ligne, 10))
        End If
Next
 
cle = "x"
tmp = tab1(cle)
 
Cells(1, 1) = tmp(0)
 
'Workbooks(1).Worksheets(1).Cells(1, 1) = tmp(0)
 
'Workbooks(1).Activate
'Cells(1, 1).ClearComments
'Cells(1, 1).Select
'Cells(1, 1).AddComment
'Cells(1, 1).Comment.Text Text:=tmp(1)
 
 
 
End Sub
 
 
 
merci de m'aider ...
cordialement

mood
Publicité
Posté le 03-08-2009 à 10:08:11  profilanswer
 

n°1911644
foxley_gra​vity
Posté le 04-08-2009 à 15:04:36  profilanswer
 

up please :(

n°1912005
foxley_gra​vity
Posté le 05-08-2009 à 15:47:15  profilanswer
 

up pls :( :(
 

Code :
  1. Sub copier_sinistre()
  2.  
  3.  
  4. Dim i As Integer
  5. Dim last_line As Integer
  6. Dim star_line As Integer
  7.  
  8.  
  9. Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau\2008Sinistres02062009.xls"
  10. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  11.  
  12.  
  13. Worksheets("PREVIsin2008" ).Select
  14.  
  15.  
  16. last_line = Cells(65536, 10).End(xlUp).Row
  17. start_line = 1
  18. Dim tab1
  19. Set tab1 = CreateObject("Scripting.Dictionary" )
  20. old_cle = ""
  21. For ligne = start_line To last_line
  22.    If Cells(ligne, 2) = "" Then
  23.        cle = old_cle
  24.    Else
  25.        cle = Cells(ligne, 2)
  26.        old_cle = cle
  27.    End If
  28.    
  29.    If Cells(ligne, 10) <> 0 Then
  30.        If tab1.exists(cle) Then
  31.            tmp = tab1(cle)
  32.            tmp(0) = tmp(0) + Cells(ligne, 10) ' cumul des sommes
  33.            tmp(1) = tmp(1) & " " & Cells(ligne, 6) ' cumul des noms
  34.            tab1(cle) = tmp
  35.        Else
  36.            tab1(cle) = Array(Cells(ligne, 10), Cells(ligne, 6))
  37.        End If
  38.    
  39.  MsgBox (Cells(ligne, 10))
  40.        End If
  41. Next
  42.  
  43. cle = "x"
  44. tmp = tab1(cle)
  45.  
  46. Cells(1, 1) = tmp(0)
  47.  
  48. Workbooks(1).Worksheets(1).Cells(1, 1) = tmp(0)
  49.  
  50. Workbooks(1).Activate
  51. Cells(1, 1).ClearComments
  52. Cells(1, 1).Select
  53. Cells(1, 1).AddComment
  54. Cells(1, 1).Comment.Text Text:=tmp(1)

n°1912014
_xme_
Posté le 05-08-2009 à 16:11:11  profilanswer
 

bonne idée de mettre de la couleur, ca donnait pas vraiment envie de lire ton premier post  
aurais tu un fichier exemple simplifié pour expliquer ton soucis?
peux-tu également précisé ton erreur?
au fait je te signale que tu fais des calculs avant d'avoir finit de compléter ton dictionnaire, je ne sais pas si c'est voulu mais à première vue c'est bizarre  :heink:

n°1912023
foxley_gra​vity
Posté le 05-08-2009 à 16:39:33  profilanswer
 

oui , peut tu me donner ton mail ...
Je suis un débutant alors introduire des clé dans le dico , je suis un perdu , perso , j'ai compris que l'on cré , un  tableau , dont on allé selectionner des mot clé .... merci de bien vouloir m'aider

n°1912068
_xme_
Posté le 05-08-2009 à 17:59:41  profilanswer
 

:non: je mets pas mon mail sur des sites publique désolé  
 
tien voila un script adapté rapidement, d'un de mes anciens script
voila comment j'initialise un dico bidon

Code :
  1. ' Defintion d'un dictionnaire bidon
  2. Set objExcel = CreateObject("Excel.Application" )
  3. objExcel.Workbooks.Open("chemin\monexcel.xls" )
  4. Set feuille = objExcel.Workbooks(1).Worksheets(2)
  5. ' Initialisation du dictionnaire
  6. set dicocoef=CreateObject("Scripting.Dictionary" )
  7. k=1
  8. Do While (StrComp(feuille.Cells(k, 1).Value,"" )<>0)
  9.     if StrComp(feuille.Cells(k, 5).Value,"" )<>0 then
  10.         dicocoef.add feuille.Cells(k, 1).Value , feuille.Cells(k, 5).Value
  11.     End if
  12.     k=k+1
  13. Loop


là en gros je parcours la première colonne, tant qu'elle est non vide je continue
Si la 5 eme colonne à une valeur je la rentre dans mon dico
Et c'est ensuite que j'utiliserais mon dico.
 
Mais j'ai peut être aussi pas suivi comment toi tu as besoin de t'en servir.
C'est pour ça qu'une explication un peu plus claire serai bien sur ton besoin .
 
Ce que j'ai compris:
nombre de colonne fixe, nombre de ligne qui varie.
Une ligne=une entrée
une entrée= plusieur champs (qui sont les différentes colonnes)
Ton besoin additionné selon un critère sur un champs.
Si une application de ta macro= une somme alors inutil d'utiliser un dictionnaire
une simple bloucle

Code :
  1. k=1
  2. Do while (StrComp(feuille.Cells(k, 1).Value,"" )<>0)
  3.   s=0 ' le résultat de ta somme
  4.   if (StrComp(feuille.Cells(k, 2).Value,"la valeur que tu veux" )=0) then
  5.      s=s+feuille.Cells(k, 2).Value
  6.   End if
  7. loop


Ton vu que ça m'a l'air un peu trop simple, je pense ne pas avoir saisi ton soucis  :D

n°1912748
SuppotDeSa​Tante
Aka dje69r
Posté le 07-08-2009 à 11:49:36  profilanswer
 

Hello
 
foxley_gravity est une fille ? :p Non parceque la tu donnes les reponses direct !! ;)
 
Si tu veux foxley_gravity, mon mail est dans mon profil. Il me semble qu'on a deja travaillé ensemble non ?
Envoie le fichier et je le partagerai ici...


Message édité par SuppotDeSaTante le 07-08-2009 à 11:49:53

---------------
Soyez malin, louez entre voisins !
n°1912898
_xme_
Posté le 07-08-2009 à 14:45:40  profilanswer
 

:lol: merde je suis démasqué  :pt1cable:  
en fait il se trouve que ces des bouts du code que je suis en train d'écrire  :whistle:

n°1913430
foxley_gra​vity
Posté le 10-08-2009 à 13:49:09  profilanswer
 

Bonjour  
 
désolé d'embéter tout le monde à  la plage lol!
Je vous remercie d'avance
 
 
mais J'ai toujours mon petit probème avec une macro ...  
Je ne comprend pas car elle marche sur des exemples simples maisi l y a doit y avoir une erreur de logique ... car sur le vrai exemple beucoup plus long , la macro ne s'arrete pas apres avoir sélectionné le bon titre , elle continue :(  
 
+je n'arrive pas à imposer a ma macro de commencer a sommer 5 lignes apres avoir sélectionner le titre sélectionné ( ici x ) et surtout ma macro ne s'arrete pas apres , elle continue a sommer les valeurs des titres suivants  
info suplémentaire : entre chaque montant il y a 1 blanc  
entre le dernier montant d'un titre , et le premier du suivant il y a 2 blanc ... donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...  
 
Voici la macro (qui ouvre le fichiercible  avec les titres ,les montant.. pour copier la somme dans le fichier ouvert)  deja écrite

n°1913461
Deamon
Posté le 10-08-2009 à 14:46:17  profilanswer
 

foxley_gravity a écrit :

donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...


Sans avoir lu le début mais juste pour ça tu fais une boucle avec un compteur. Si tu trouves un blanc t'incrémentes sinon tu remets à 0. Si le compteur =2 alors t'arrêtes.

mood
Publicité
Posté le 10-08-2009 à 14:46:17  profilanswer
 

n°1913551
foxley_gra​vity
Posté le 10-08-2009 à 16:02:36  profilanswer
 

tu pourais pas lire le début parce franchement , je suis allez au delas de met limite ^^ ,  ps des que j'ai réussir  à résoudre ces 3 probleme , je vous embete plus jamais de la vie entiere :p

n°1913568
Deamon
Posté le 10-08-2009 à 16:17:48  profilanswer
 

foxley_gravity a écrit :

je suis allez au delas de met limite ^^


Les limites de l'orthographe par contre sont largement dépassées là... Si tu codes aussi bien que t'écris je comprends que rien ne marche.
 
 
J'ai pas trop compris ton code, en même temps vu le peu de commentaires ça n'aide pas.

n°1913576
foxley_gra​vity
Posté le 10-08-2009 à 16:31:36  profilanswer
 

nom ligne 6 ,sinistre ligne 10 , titre ligne  2
On créer un dictionnaire ( outil complexe ) qui va venir lire toutes les lignes de la 2eme colonne et sélectionner la clé qui nous interesse ( correspondant au titre des partenaires)
 

Code :
  1. Dim i As Integer
  2. Dim lastline As Integer
  3. Dim star_line As Integer
  4.  
  5. 'ouverture des fichiers
  6.  
  7. Workbooks.Open Filename:="F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire2\2008Sinistres02062009.xls"
  8. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  9.  
  10.  
  11. With ActiveSheet
  12. last_line = Cells(65536, 10).End(xlUp).Row
  13. start_line = 5 ' ligne ou l'on commence le décompte
  14. Dim tab1
  15. Set tab1 = CreateObject("Scripting.Dictionary" )
  16. old_cle = ""
  17. For i = start_line To last_line
  18.    If Cells(i, 2) = "" Then
  19.        cle = old_cle
  20.    Else
  21.        cle = Cells(i, 2)
  22.        old_cle = cle
  23.    End If
  24.  
  25.    If Cells(i, 10) <> 0 Then
  26.        If tab1.exists(cle) Then
  27.            tmp = tab1(cle)
  28.            tmp(0) = tmp(0) + Cells(i, 10) ' cumul des sommes
  29.            tmp(1) = tmp(1) & " " & Cells(i, 6) ' cumul des noms
  30.      
  31.            tab1(cle) = tmp
  32.        Else
  33.            tab1(cle) = Array(Cells(i, 10), Cells(i, 6))
  34.        
  35.        End If
  36.        
  37.      
  38.    End If
  39.  
  40.  
  41. Next
  42.  
  43. cle = "PREVI AVENIR" ' à chaque fois qu'il a ce mot , la macro enregistre la valeur des sinistres correspondants
  44. tmp = tab1(cle)
  45.  
  46. End With
  47.  
  48.  
  49. Workbooks(1).Worksheets(1).Activate
  50. With ActiveSheet
  51. 'Insertion de la somme
  52.  
  53.  
  54. 'Insertion du commentaire
  55.  
  56. Cells(2, 5).ClearComments
  57. Cells(2, 5).Select
  58. Cells(2, 5).AddComment
  59. Cells(2, 5).Comment.Text Text:=tmp(1)
  60.  
  61.  
  62. End With
  63.  
  64.  
  65. End Sub

n°1913606
Deamon
Posté le 10-08-2009 à 16:53:39  profilanswer
 

Mais c'est où que tu vérifies que t'as croisé 2 lignes vides ?

n°1913610
foxley_gra​vity
Posté le 10-08-2009 à 17:01:33  profilanswer
 

Je comprends pas ta question désolé...

n°1913657
Deamon
Posté le 10-08-2009 à 19:03:26  profilanswer
 

T'as dit que tu voulais arreter ta routine dès que t'avais 2 lignes vides de suite. Où est la portion du code pour ce point là ?

n°1913827
foxley_gra​vity
Posté le 11-08-2009 à 09:24:38  profilanswer
 

exact , dans mon programme c'était juste une différent de 0  
c'est instruction est correcte ?  
if 2*Cells(i, 10) <> "" Then

n°1913845
Deamon
Posté le 11-08-2009 à 09:53:23  profilanswer
 

foxley_gravity a écrit :

c'est instruction est correcte ?
if 2*Cells(i, 10) <> "" Then


Après avoir réfléchi à la signification de ta ligne, à ton avis ?

 

Sinon je t'ai expliqué comment faire :

Citation :

Sans avoir lu le début mais juste pour ça tu fais une boucle avec un compteur. Si tu trouves un blanc t'incrémentes sinon tu remets à 0. Si le compteur =2 alors t'arrêtes.


Et pour tester si une cellule est vide il me semble que c'est Cells(...).Text = ""

 

Avec ça tu as tout pour adapter ça à ton programme normalement.


Message édité par Deamon le 11-08-2009 à 09:53:33
n°1913866
foxley_gra​vity
Posté le 11-08-2009 à 10:47:50  profilanswer
 

ok , j'ai essayé de suivre tes instructions, cela te convient ?
 
 

Code :
  1. Sub l()
  2.  
  3. Dim j, i As Single
  4.  
  5.  
  6. For i = 0 To 2
  7.  
  8.  
  9. For j = 0 To 100
  10.  
  11.  
  12. If Cells(j, 10) <> "" Then
  13.  
  14. i = i + 1
  15.  
  16. Else
  17.  
  18. i = 0
  19.  
  20. Next j
  21.  
  22. Next i
  23.  
  24. End Sub

n°1913867
foxley_gra​vity
Posté le 11-08-2009 à 10:48:22  profilanswer
 

ps : Cells(...).Text = "" ne marchait pas  
 

n°1913875
Deamon
Posté le 11-08-2009 à 11:00:04  profilanswer
 

En tout cas ça m'étonnerait que Cells(j, 10) <> "" fonctionne étant donné que Cells est un objet et pas un string.
 
Il sert à quoi ton For i ? Il est où ton test qui vérifie si i=2 ?

n°1913877
foxley_gra​vity
Posté le 11-08-2009 à 11:09:26  profilanswer
 

oula désolé je susi fatigé  
 

Code :
  1. Sub l()
  2. Dim i, j As Single
  3.  
  4. If Cells(i, 10) <> "" Then
  5.  
  6. j = j + 1
  7.  
  8. Else
  9. j = 0
  10.  
  11. If j > 2 Then Exit For
  12.  
  13. Next i
  14.  
  15. End Sub

n°1913879
Deamon
Posté le 11-08-2009 à 11:12:33  profilanswer
 

non mais va dormir 2-3 mois quoi et réviens après...
 
Tu écris n'importe quoi, n'importe comment, tu te relis pas, tu n'essayes pas de comprendre ce que tu fais...

n°1913880
_xme_
Posté le 11-08-2009 à 11:15:50  profilanswer
 

Tiens Deamon à cracker avant moi :D
Bon pour info il me semble qu'il manque entre autre des Enf If
Ensuite je ne sais pas d'ou sort le next mais bon j'ai laché ce sujet depuis un petit trop de temps, sorry  :whistle:  
 
folex_gravity, puis-je te demander si tu as ouvert une documentation?
Non car on veut bien aider, mais si tu connais même pas les base, c'est pas la peine  :(  
Demande directement si y a pas une bonne ame pour faire ton boulot à ta place ...
Donc le minimum ftp://ftp-developpez.com/tahe/fic [...] script.pdf,
C'est du VBS ok, mais je ne connais pas de doc équivalente en VBA et les bases sont communes

Message cité 1 fois
Message édité par _xme_ le 11-08-2009 à 11:24:46
n°1913884
Deamon
Posté le 11-08-2009 à 11:28:06  profilanswer
 

Je suis pas sur que ça convienne la doc VBS. Déjà un cours d'algorithme ça serait mieux pour la base de la base. Après c'est que de la syntaxe.

 

Et oui il manque un end if, on a un next sans for, i et j sont des single (nombres flottants) il serait plus adapté d'avoir Integer (voire Long si besoin), j n'est pas initialisé (avec un peu de chance par défaut c'est 0 mais bon...)... Et il faudrait vérifié que Cells(i, 10) <> "" fonctionne.
Bref c'est pas demain que foxley_gravity va nous coder le prochain Windows.

Message cité 1 fois
Message édité par Deamon le 11-08-2009 à 11:28:44
n°1913885
foxley_gra​vity
Posté le 11-08-2009 à 11:28:58  profilanswer
 

Code :
  1. Sub v()
  2.  
  3.  
  4. Dim i, j As Single
  5.  
  6. j = 0 ' initialsie le compteur
  7.  
  8. simpas ..et la ?
  9.  
  10. For i = 1 To 15
  11.  
  12. Do While Cells(i, 1) <> ""
  13. j = j + 1
  14.  
  15. Else
  16. j = 0
  17.  
  18. Loop
  19.  
  20. Next
  21.  
  22. End

n°1913886
Deamon
Posté le 11-08-2009 à 11:30:51  profilanswer
 

T'es conscient que dans ton : Do While Cells(i, 1) <> ""
est une boucle infinie ? i n'est pas modifié dedans donc si tu rentres peu de chance que tu en sortes avant que ton pc plante.

 

Non mais avant de coder écris l'algo en français ! Car j'ai pas l'impression que ce soit clair pour toi ce que tu veux faire.


Message édité par Deamon le 11-08-2009 à 11:32:45
n°1913888
_xme_
Posté le 11-08-2009 à 11:34:06  profilanswer
 

Deamon a écrit :

Je suis pas sur que ça convienne la doc VBS. Déjà un cours d'algorithme ça serait mieux pour la base de la base. Après c'est que de la syntaxe.
 
Et oui il manque un end if, on a un next sans for, i et j sont des single (nombres flottants) il serait plus adapté d'avoir Integer (voire Long si besoin), j n'est pas initialisé (avec un peu de chance par défaut c'est 0 mais bon...)... Et il faudrait vérifié que Cells(i, 10) <> "" fonctionne.
Bref c'est pas demain que foxley_gravity va nous coder le prochain Windows.


Pas d'accord  :pfff:  
C'est avec des gens comme lui, plein de bonne volonté qu'est né windows, y a qu'a voir le produit à l'arrivée  :D  
 
 

Citation :

T'es conscient que dans ton : Do While Cells(i, 1) <> ""  
est une boucle infinie ? i n'est pas modifié dedans donc si tu rentres peu de chance que tu en sortes avant que ton pc plante.


ca veut aussi dire qu'il n'a même pas testé le code   :sweat:

n°1913903
foxley_gra​vity
Posté le 11-08-2009 à 11:52:18  profilanswer
 

merci :) pour le compliment c'est si rare ^^  
et maitenant je pense à mno pc avant de tester lol ,je prefere vous en faire part avant , la pauvre bête...
 
mais franchement , il y a un minimun de logique  
 

Code :
  1. Sub v()
  2.  
  3. Dim i, j As Integer
  4. j = 0
  5. Do While j > 2
  6. For i = 1 To 15
  7. If Cells(i, 1) <> "" Then
  8. j = j + 1
  9. Else
  10. j = 0
  11.  
  12. Next i
  13. Loop
  14.  
  15. End Sub


 

n°1913925
_xme_
Posté le 11-08-2009 à 12:14:26  profilanswer
 

Citation :

et maitenant je pense à mno pc avant de tester lol ,je prefere vous en faire part avant , la pauvre bête...


ouai ben non :pfff:  
1 tu réfléchis
2 tu codes
3 tu testes
4 tu debug
5 tu reflechis
6 tu codes
...
et ça autant de fois que possible  
et tu viens que lorsque que ca fait au moins une heure que tu réflechis sur la même question
 
 :o  
la suite sans moi

Code :
  1. j=0
  2. Do While j>2


tu m'expliques quand est-ce que tu rentres dans la boucle?
t'as encore oublié le Enf if  :fou:  
et puis je t'en laisse
 
Commence par apprendre le vbs comme je te l'ai dit  
Et puis le conseil de deamon sur l'algorithmique est pas faux...


Message édité par _xme_ le 11-08-2009 à 13:13:52
n°1913927
Deamon
Posté le 11-08-2009 à 12:23:42  profilanswer
 

_xme_ a écrit :

ca veut aussi dire qu'il n'a même pas testé le code   :sweat:


Faudrait déjà que son code compile pour le tester.  :pt1cable:  
 
Et xme tu es aussi bon à écrire mon pseudo que foxley_gravity à écrire son code.  :whistle:  
 
foxley_gravity > sans déconner écris le fonctionnement de ton algo en français avant de le coder (ex: on regarde si la cellule est vide si oui alors... si non... etc.), en l'écrivant tu verras bien que quelque chose ne va pas.

n°1913955
_xme_
Posté le 11-08-2009 à 13:13:34  profilanswer
 

Citation :


Et xme tu es aussi bon à écrire mon pseudo que foxley_gravity à écrire son code.  :whistle:  


Je suis profondément vexé  :fou:  
 
 :lol:  
c'est corrigé
(au fait j'ai peut être mal compris, c'était peut être un encouragement à foxley_gravity, il ne manquait qu'un "a" dans ton pseudo ^^)
 
Edit :et merde :D


Message édité par _xme_ le 11-08-2009 à 13:50:54
n°1913958
Deamon
Posté le 11-08-2009 à 13:29:24  profilanswer
 

Il me semble qu'ailleurs tu avais aussi écrit "demaon" ou "daemon" enfin bref pas grave j'ai l'habitude. ;)
C'est comme ton quote foiré personne ne dira rien. :D

n°1913979
foxley_gra​vity
Posté le 11-08-2009 à 14:14:04  profilanswer
 

bon je crois que c'est bon :) , alors les petits joueur de vba attention à vos yeux ( ou pas )  ( humour + dérision )
 

Code :
  1. Sub v()
  2.  
  3. Dim i, j As Integer
  4. j = 0
  5. i = 1
  6.  
  7.    While j < 2
  8.            If Cells(i, 1) = "" Then
  9.        j = j + 1
  10.        i = i + 1
  11.            Else
  12.        j = 0
  13.        i = i + 1
  14.             End If
  15.        
  16.    Wend
  17.      
  18.  
  19.  
  20.  
  21.  
  22. MsgBox (i - 1)
  23.  
  24. End Sub

n°1913988
Deamon
Posté le 11-08-2009 à 14:24:33  profilanswer
 

Bien. On s'approche d'un truc correct.
 
Pour chipoter tu peux mettre le i = i + 1 après le end if pour éviter de le répéter 2 fois.
Il ne reste plus qu'à tester le If Cells(i, 1) = ""

n°1913990
foxley_gra​vity
Posté le 11-08-2009 à 14:27:59  profilanswer
 

ben c'est fait et il marche ... maitenant ca je l'introduit à quelque ligne dans ma macro lol , allez j'ai fait le plus gros du travail mdr , tu peux me dire au moins ca !!  à mon avis faut faire quelques modifications ...

n°1914008
foxley_gra​vity
Posté le 11-08-2009 à 15:19:38  profilanswer
 

bon j'ai éssaye d'inserer le code , j'aimerais vous me dites si je l'est bien inserer .....et  pourqoui il plante à un endroit avec incompatibilité  de type pour
Cells(1, 1) = tmp(0)
 

Code :
  1. Sub m()
  2.  
  3.  
  4. Dim i As Integer
  5. Dim lastline As Integer
  6. Dim star_line As Integer
  7.  
  8.  
  9. Workbooks.Open Filename:="F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire2\2008Sinistres02062009.xls"
  10. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  11. 'MsgBox Workbooks(1).Name
  12. 'MsgBox Workbooks(2).Name
  13.  
  14.  
  15. With ActiveSheet
  16. last_line = Cells(65536, 10).End(xlUp).Row
  17. start_line = 5 ' ligne ou l'on commence le décompte
  18. Dim tab1
  19. Set tab1 = CreateObject("Scripting.Dictionary" )
  20. old_cle = ""
  21. For i = start_line To last_line
  22.    If Cells(i, 2) = "" Then
  23.        cle = old_cle
  24.    Else
  25.        cle = Cells(i, 2)
  26.        old_cle = cle
  27.    End If
  28.  
  29.      
  30.     If Cells(i, 10) = "" Then
  31.    
  32.      j = j + 1
  33.      
  34.                  
  35.    
  36.        If tab1.exists(cle) Then
  37.            tmp = tab1(cle)
  38.            tmp(0) = tmp(0) + Cells(i, 10) ' cumul des sommes
  39.            tmp(1) = tmp(1) & " " & Cells(i, 6) ' cumul des noms
  40.      
  41.            tab1(cle) = tmp
  42.        Else
  43.            tab1(cle) = Array(Cells(i, 10), Cells(i, 6))
  44.        
  45.        End If
  46.        
  47.      
  48.      Else
  49.      j = 0
  50.        
  51.        
  52.      'MsgBox (Cells(i, 10))
  53.        
  54.    End If
  55. i = i + 1
  56.  
  57. Next
  58.  
  59. cle = "PREVI AVENIR"
  60. tmp = tab1(cle)
  61.  
  62. End With
  63.  
  64. Workbooks(1).Worksheets(1).Activate
  65. With ActiveSheet
  66. 'Insertion de la somme
  67.  
  68. Cells(1, 1) = tmp(0)
  69.  
  70.  
  71. 'Insertion du commentaire
  72.  
  73. Cells(1, 1).ClearComments
  74. Cells(1, 1).Select
  75. Cells(1, 1).AddComment
  76. Cells(1, 1).Comment.Text Text:=tmp(1)
  77.  
  78.  
  79. End With
  80.  
  81. End Sub


n°1914043
Deamon
Posté le 11-08-2009 à 15:49:46  profilanswer
 

Parce que Cells est un objet Cell et tmp on ne sait même pas ce que c'est vu que tu ne l'as pas déclaré.
Mais il faut écrire dans un champ de Cell style value, text, formula...

n°1914065
foxley_gra​vity
Posté le 11-08-2009 à 16:10:12  profilanswer
 

c'est bysarre parce qu'avant la modif , tout marchait bien .. tu es sur alors que le probleme vient de la ?  
 
"Mais il faut écrire dans un champ de Cell style value, text, formula..."
J'ai éssayais en rajoutant .value , mais même résultat , quelles modifs je peux faire d'autre ?

n°1914080
Deamon
Posté le 11-08-2009 à 16:31:39  profilanswer
 

J'ai jamais vu dans ton code avant "Cells(1, 1) = tmp(0)" donc faudra m'expliquer pourquoi tu dis que ça a déjà marché ?
 
Regarde la doc de Cell pour voir ce qu'il y a dedans comme champ intéressant.
 
Et déclares ton tmp je t'ai dit aussi.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème dans une macro devant faire un tri

 

Sujets relatifs
Problème Formulaire de contactProblème Shutdown time
Problème de texte décalé verticalement dans la <div> de droiteProblème de redirect avec un header
Problème présentation graphique d'une JappletProblème lors de la reception de mail sur lotus note
Problème lien sous un swf transparentCatcher une alerte dans une macro excel
[VBA] Problème avec SeriesCollection.Values et Union(Range)Macro Excel : tableau dynamique
Plus de sujets relatifs à : Problème dans une macro devant faire un tri


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR