Vba excel: boucle for qui ne boucle pas

jean guy -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

je débute actuellement en vba, et dois faire une macro qui récupère des données dans une suite de tableaux (fichier source) mis les uns à la suite des autres dans une feuille excel, afin de les classer dans un tableau (fichier cible)

Mon problème est que ma boucle for ne boucle pas lorsqu'elle est inséré dans le reste du code
alors que lorsque je la teste séparement, elle fonctionne bien.

Cette boucle doit récupérer un code RRF en ligne 3 du fichier source, le placer dans la ligne 2 du fichier cible, puis s'incrémenter pour aller chercher ce code RRF 2, 51 lignes plus bas dans le fichier source le placer en ligne 3 du fichier cible, et ainsi de suite, récupérer ce code RRF3, encore 51 lignes plus bas ....

Je ne comprend ce qui ne va pas. Si vous avez des idées...

Je vous remercie

Cordialement

voici mon code, sans les déclarations de variable:

'j'ouvre le fichier de consolidation (fichier cible)

ChDir "C:\Documents and Settings\p051398\Desktop\macro2"
Workbooks.Open Filename:="C:\Documents and Settings\p051398\Desktop\macro2\Consolidation PLR.xls"

'je définis ma plage de recherche dans le fichierconcatene (fichier source)
Windows("fichierconcatene.xls").Activate
Set plage = Range("A65536")

'je selectionne ma première cellule pour extraire le code RRF
m = Range("A1").End(xlUp).Row + 2
valeur = ActiveSheet.Cells(m, 1).Value
entetedefichier = Left(valeur, 62)
entetedefichierfin = Right(entetedefichier, 10)
codeRRF = Right(entetedefichierfin, 5)
Selection.Copy

'je colle le code RRF dans consolidation PLR
Windows("Consolidation PLR.xls").Activate
j = 2
Cells(j, 1).Value = codeRRF

'je selectionne les autres cellules pour extraire le code RRF
Windows("fichierconcatene.xls").Activate
For Each cellule In plage
If valeur = " " Then Exit For

m = m + 51
valeur = ActiveSheet.Cells(m, 1).Value
entetedefichier = Left(valeur, 62)
entetedefichierfin = Right(entetedefichier, 10)
codeRRF = Right(entetedefichierfin, 5)
Selection.Copy

'je colle les code RRF dans consolidation PLR
Windows("consolidation PLR.xls").Activate
n = Range("A1").End(xlUp).Row
j = n + 2
Range("A" & j).Select
Cells(j, 1).Value = codeRRF

i = i + 1

Next cellule

End sub

2 réponses

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Bonjour,
    premieres reamarques :
    - Set plage = Range("A65536") => tu ne sélectionne qu'une seule cellule dans ta plage, du coup ta boucle For Each cellule in plage ne s'execute qu'un seule fois....
    - m = Range("A1").End(xlUp).Row + 2 => sera toujours égal à 3, Range("A1").end(xlup) renvioyant forcement 1 (tu cherches à remonter vers les haut -xlup- depuis la cellule 1)
    - meme remarque que précédemment pour n = Range("A1").End(xlUp).Row / j = n + 2
    - i = i + 1 => i n'est pas utilisé dans ton code.....
    sui j'ai bien compris, tu recuperes la valeur de cellule en A toutes les 51 lignes dans le fichier source et tu la mets ds ton fichier cible en colonne A également ? A quelle ligne doit-on commencer dans le fichier source (3?) ? le fichier cible contient-il déjà des lignes ? Il faudrait aussi faire attention à la feuille sur laquelle tu travailles si il y en a plusieurs dans le classeur...
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    une approche un peu plus simple !!
    Sub CopierLigne()
    Dim Source As Worksheet
    Dim Copie As Worksheet
    Dim Lig As Long, LigStep As Long
        'initialiser la feuille source
        Set Source = Workbooks("LeNomClasseur").Sheets("NomDeLaFeuille")
        'initialiser la feuille copie
        Set Copie = Workbooks("LeNomClasseur").Sheets("NomDeLaFeuille")
        Lig = 3
        For LigStep = 3 To Source.Range("A65536").End(xlUp).Row Step 51
            Source.Rows(LigStep).Copy Copie.Rows(Lig)
            Lig = Lig + 1
        Next LigStep
    End Sub

    J'ai pas tester et il est possible qu'il faudra scinder la ligne
    Source.Rows(LigStep).Copy Copie.Rows(Lig)

    par..
    Source.Rows(LigStep).Copy 
    Copie.Rows(Lig).paste

    A+
    0