Deux variables s'incrémentant dans une même boucle

Bonjour,

Je viens ici demander de l'aide car je suis débutante en vba depuis seulement 6 mois et il me reste encore certaines choses que je ne comprends pas.

Par exemple, dans mon problème j'ai une boucle DO WHILE avec 2 variables : ligneCible qui correspond à la ligne où je vais écrire, et ligneSource qui est quant à elle celle où je vais chercher mes données dans une autre fichier source.

Malheureusement, quand je lance ma macro, toutes les lignes de mon tableau qui je souhaite remplir se remplissent avec la même ligne source.

Je vais essayer d'être un peu plus claire : en gros ma ligneCible va de 4 à 117 (cela peut changer mais dans mon cas c'est 117) ; et ma ligneSource de 2 à 115 du coup.

Chaque ligneSource correspond à une et unique ligneCible. Mais à la fin de ma macro c'est comme ci toutes les ligneCible avaient pris les valeurs de la ligneSource 2.

J'ai donc essayé plusieurs manips pour trouver où ça n'allait pas. J'ai donc essayé d'afficher à chaque ligneCible, à côté de mon tableau, la valeur de la ligneCible et de la ligneSource. Et il me donne bien les ligneCible mais n'affiche pas la valeur de chaque ligneSource, j'en avais donc déduis qu'elle "n'existait" même pas (je l'ai bien déclarée tout comme il faut car je l'utilise plus haut dans mon programme et je la réinicialise à 2 avant ma boucle comme je le fais à chaque fois).

POURTANT quand j'arrête la macro en cours et que je vais en mode débogage voir la valeur de ligneSource elle a bien une valeur et qui plus est LA BONNE!!!

Donc là je sèche vraiment... Quelqu'un aurait la moindre idée s'il vous plait ?

Voici mon bout de code qui ne fonctionne pas.

' ------------ BOUCLE DE REMPLISSAGE DES HEURES ------------
                ligneCible = 4
                ligneSource = 2

                Do While Cells(ligneCible, 2).Value <> ""
                    Cells(ligneCible, 1).Value = ligneCible
                    Cells(ligneCible, 12).Value = ligneSource

                    ' NB HEURES CONGE
                    Do While nbCol1 > 3
                        T1 = T1 + Workbooks(MonClasseurMacro).Sheets("Congé").Cells(ligneSource, nbCol1).Value
                        nbCol1 = nbCol1 - 1
                    Loop
                    Cells(ligneCible, 5).Value = T1 / 60 / 24

                    ' NB HEURES MALADIE
                    Do While nbCol2 > 3
                        T2 = T2 + Workbooks(MonClasseurMacro).Sheets("Maladie").Cells(ligneSource, nbCol2).Value
                        nbCol2 = nbCol2 - 1
                    Loop
                    Cells(ligneCible, 6).Value = T2 / 60 / 24

                    ' NB HEURES RETARD
                    Do While nbCol3 > 3
                        T3 = T3 + Workbooks(MonClasseurMacro).Sheets("Retard").Cells(ligneSource, nbCol3).Value
                        nbCol3 = nbCol3 - 1
                    Loop
                    Cells(ligneCible, 7).Value = T3 / 60 / 24

                    ' NB HEURES GREVE
                    Do While nbCol4 > 3
                        T4 = T4 + Workbooks(MonClasseurMacro).Sheets("Grève").Cells(ligneSource, nbCol4).Value
                        nbCol4 = nbCol4 - 1
                    Loop
                    Cells(ligneCible, 8).Value = T4 / 60 / 24

                    ' NB HEURES RESTRICTION MEDICALE
                    Do While nbCol5 > 3
                        T5 = T5 + Workbooks(MonClasseurMacro).Sheets("RestrictionMédicale").Cells(ligneSource, nbCol5).Value
                        nbCol5 = nbCol5 - 1
                    Loop
                    Cells(ligneCible, 9).Value = T5 / 60 / 24

                    ' NB HEURES ABSENCE DIVERSE
                    Do While nbCol6 > 3
                        T6 = T6 + Workbooks(MonClasseurMacro).Sheets("AbsenceDiverse").Cells(ligneSource, nbCol6).Value
                        nbCol6 = nbCol6 - 1
                    Loop
                    Cells(ligneCible, 10).Value = T6 / 60 / 24

                    ' NB HEURES ACCOMPAGNEMENT
                    Do While nbCol7 > 3
                        T7 = T7 + Workbooks(MonClasseurMacro).Sheets("Accompagnement").Cells(ligneSource, nbCol7).Value
                        nbCol7 = nbCol7 - 1
                    Loop
                    Cells(ligneCible, 11).Value = T7 / 60 / 24

                    ' NB HEURES FORMATION EXTERNE
                    Do While nbCol8 > 3
                        T8 = T8 + Workbooks(MonClasseurMacro).Sheets("FormationExterne").Cells(ligneSource, nbCol8).Value
                        nbCol8 = nbCol8 - 1
                    Loop
                    Cells(ligneCible, 12).Value = T8 / 60 / 24

                    ' NB HEURES FORMATION INTERNE
                    Do While nbCol9 > 3
                        T9 = T9 + Workbooks(MonClasseurMacro).Sheets("FormationInterne").Cells(ligneSource, nbCol9).Value
                        nbCol9 = nbCol9 - 1
                    Loop
                    Cells(ligneCible, 13).Value = T9 / 60 / 24

                    ' NB HEURES RESPONSABLE ACCOMPAGNEMENT
                    Do While nbCol10 > 3
                        T10 = T10 + Workbooks(MonClasseurMacro).Sheets("ResponsableAccompagnement").Cells(ligneSource, nbCol10).Value
                        nbCol10 = nbCol10 - 1
                    Loop
                    Cells(ligneCible, 14).Value = T10 / 60 / 24

                    ' NB HEURES RESPONSABLE FORMATION
                    Do While nbCol11 > 3
                        T11 = T11 + Workbooks(MonClasseurMacro).Sheets("ResponsableFormation").Cells(ligneSource, nbCol11).Value
                        nbCol11 = nbCol11 - 1
                    Loop
                    Cells(ligneCible, 15).Value = T11 / 60 / 24

                    ' NB HEURES ABSENCE INTERIMAIRE
                    Do While nbCol12 > 3
                        T12 = T12 + Workbooks(MonClasseurMacro).Sheets("AbsenceInterimaire").Cells(ligneSource, nbCol12).Value
                        nbCol12 = nbCol12 - 1
                    Loop
                    Cells(ligneCible, 16).Value = T12 / 60 / 24

                    ligneCible = ligneCible + 1
                    ligneSource = ligneSource + 1
                Loop

Merci d'avance!!

(Une BTS SIO SLAM en détresse!!)

Bonjour,

Avec juste une rondelle de ta macro, il y a (à peine) de quoi nous mettre en appétit...

Tu les sors d'où les nbCol1, nbCol2, nbCol3... ??

Fournir toute la macro avec les Dim KIVONBIENAVEC.

Débarrasser la macro de toutes les lignes vides.

Si les nbCol1, nbCol2, nbCol3... proviennent de paramètres extérieurs à la macro fournir le code source.

[EDIT] : C'est un peu pareil avec T1, T2, T3 on peine un peu à voir l'évolution. Jamais de remise à zéro donc c'est un cumul ?

et puis quand tu écris "ligneSource" dans ta macro. Comment elle sait ta macro qu'elle doit aller lire dans un autre classeur ??

TOUSSA me parait un peu...

Si c'est possible tu devrais essayer de nous mettre les deux classeurs source et cible débarrassés des informations confidentielles et des feuilles inutiles... en pièce jointe.

A+

Re bonjour Galopin01,

Je te remercie de ta rapidité à répondre!!

J'ai finalement réussi à trouvé la réponse (avec un peu d'aide). J'avais tout simplement oublié de remettre à 0 mes variables nbCol1, nbCol2... ainsi que les T1, T2... En effet, en mettant tout le code tu aurais sûrement pu m'aider directement.

Pour tout de même te répondre : nbCol1, nbCol2... étaient le nombre de colonnes qu'il existait dans chaque feuille que j'exploitais (ex: nbCol1 pour feuille "Congé" etc...) et T1, T2... étaient des sommes de lignes pareil dans chaque feuille (ex: T1 la somme de la ligneSource visée dans la feuille "Congé").

J'ai pour tout simplifié utilisée une fonction pour évité la redondance!

En tout cas merci encore de ta réponse, je penserai à tes conseils pour être plus claire la prochaine fois! Et désolée du dérangement inutile!

Rechercher des sujets similaires à "deux variables incrementant meme boucle"