Parcourir la longueur d'une colonne

Emile -  
 Emile -
Bonjour,

Tout est dans le titre

Je récupère des données dans des onglets d'autre fichiers et ce petit script fonctionne si on connait à l'avance le nombre de ligne et de colonne.
Ce que j'aimerais faire c'est partir d'une ligne exemple i = 8 d'une colonne j = 3 et quand ma colonne "j" n'a plus de valeur dans les cellules, s'arrêter.

Voilà, mon script qui fonctionne, si on connait la ligne jusqu'à laquelle on souhaite s'arrêter.

Sub parcourir()
Dim ws As Worksheet
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
chemin = ThisWorkbook.Path
monFichier = Dir(chemin & "*.xlsx", vbNormal)
For i = 8 To 93 'Jusqu'à la ligne 93
For j = 3 To 3
    'sur la ligne du dessous je vais juste récupérer mes valeurs dans mes onglets.             
                Cells(i - 4, j - 2).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[" & monFichier & "]Feuil1'!R" & i & "C" & j
 Next
Next

End Sub


J'ai tenté ceci, mais même si je n'ai pas d'erreur, le traitement est incroyablement long.. Donc j'imagine que la syntaxe n'est pas bonne.

Sub parcourir()
Dim ws As Worksheet
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
chemin = ThisWorkbook.Path
monFichier = Dir(chemin & "*.xlsx", vbNormal)
 For p = 1 To Columns.Count
            n = WorksheetFunction.CountA(Columns(p))
        
            For i = 8 To n
            For j = 3 To 3
                
                Cells(i - 4, j - 2).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[" & monFichier & "]Transient'!R" & i & "C" & j
            Next
            Next
        Next
End Sub


Merci d'avance pour votre aide.

Configuration: Windows / Chrome 80.0.3987.132

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    voyant ton code et ayant lu tes réponses complémentaires, je pense utile que tu expliques d'abord ce que tu veux faire, plutôt que d'ajouter chaque fois une information.
    comme expliqué par f894009 (bonjour à lui), ton code ne récupère pas les données, il crée des liens. souhaites-tu récupérer les données, ou créer des liens?
    ton code est incroyablement long car il est incroyablement mal écrit. le comble étant la boucle en p.
    difficile de te faire une suggestion correcte si tu n'expliques pas ce que tu veux réaliser.
    je crois deviner que tu veux chercher "Forum" sur la première ligne de l'onglet, et, qu'ensuite, tu veux travailler sur toutes les lignes de la colonne en dessous de "Forum", jusqu'à trouver une cellule vide. est-ce exact?
    1
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu ne l'écris pas, et c'est sans doute dans l'autre fichier (monFichier) que tu veux chercher "Forum" et t’arrêter quand la colonne se termine.
      est-ce exact?
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        suggestion:
        Private Sub parcourir()
        Dim csource As Workbook, chemin As String, nlig As Long, ncol As Long, monFichier As String
        Dim fsource As Worksheet, fdest As Worksheet
        chemin = ThisWorkbook.Path
        monFichier = Dir(chemin & "\*.xlsx", vbNormal)
        Set fdest = ActiveSheet
        Set csource = Workbooks.Open("chemin & " \ " & monFichier")
        Set fsource = csource.Sheets("Feuil1")
        ncol = 3
        nlig = 8
        Do While fsource.Cells(nlig, ncol) <> ""
            fdest.Cells(nlig - 4, ncol - 2) = fsource(nlig, ncol)
            nlig=nlig+1
        Loop
        Call csource.Close
        End Sub
        0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    For j = 3 To 3 sert a rien ou votre code n'est pas complet!

    Vous ne recuperez pas les valeurs d'un autre fichier, vous faites un lien entre cellules
    0
  3. Emile
     
    Cette ligne me permet de récupérer les valeurs de la 3ème colonne de mon onglet "Feuil1" et "monFichier" représente un ensemble de fichier présent dans un dossier. Ma boucle parcourt chaque fichier et chaque onglet pour aller récupérer l'onglet "Feuil1".

    Je cherche également au lieu d'aller chercher une colonne en fonction de sa position, parcourir l'onglet et dès qu'il trouve un nom de colonne exemple : "Forum" il récupère toutes les valeurs de Forum et les copie dans mon Fichier principale : avec cette ligne :
     Cells(i - 4, j - 2).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[" & monFichier & "]Feuil1'!R" & i & "C" & j
     Next


    Peut-être que je m'y prends mal, mais c'est le moyen (fonctionnel) le plus simple que j'ai réussi à trouver jusqu'à maintenant.
    0
  4. Emile
     
    Merci à tous les deux pour vos messages, je vais tacher d'être plus clair.
    Mon code à l'heure actuelle fait des liens comme vous l'avez compris.
    Ce lien me permet de récupérer les valeurs d'onglet dans des fichiers présents dans le même dossier de ma macro, dont l'objectif finale est de les afficher dans des tables à un endroit donnée.
    Après ces liens sont convertis en données brutes et donc n'existe plus. Il ne reste que dans mes tables ces valeurs provenant des onglets cités précédemment.

    Pour ce que je cherche à faire c'est récupérer les valeurs dans une colonne portant un nom précis dans mon onglet, exemple "Forum" dans l'onglet "Feuil1" et récupérer les valeurs de cette colonne jusqu'à ce la case soit vide.

    Voilà, j'espère avoir été clair, je m'excuse encore une fois pour mes mauvaises explications.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu n'as pas encore expliqué où les données devaient arriver.
      j'adapte ma suggestion pour aller chercher dans la colonne ayant un nom précis en première ligne.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        suggestion:
        Private Sub parcourir()
        Dim csource As Workbook, chemin As String, nlig As Long, ncol As Long, monFichier As String
        Dim fsource As Worksheet, fdest As Worksheet, trouve As Range, chercher As String
        chercher = "Forum"
        chemin = ThisWorkbook.Path
        monFichier = Dir(chemin & "\*.xlsx", vbNormal)
        Set fdest = ActiveSheet
        Set csource = Workbooks.Open(chemin & "\" & monFichier)
        Set fsource = csource.Sheets("Feuil1")
        Set trouve = fsource.Rows(1).Find(chercher)
        If Not trouve Is Nothing Then
            ncol = trouve.Column
            nlig = 8
            Do While fsource.Cells(nlig, ncol) <> ""
                fdest.Cells(nlig - 4, 1) = fsource(nlig, ncol)
                nlig = nlig + 1
            Loop
        End If
        Call csource.Close
        End Sub
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Emile
     
    Voici mon code complet. Je vais d'abord récupérer chaque nom de fichiers pour les mettre dans ma macro, en créant un nouvel onglet pour chaque fichier.
    Ensuite je vais recopier le template d'un onglet déjà présent dans ma macro pour l'appliquer à chaque nouvel onglet créer.
    Et c'est là qu'arrive l'étape de récupérer les valeurs de la colonne Forum de chaque Onglet et Fichiers du dossier pour les mettre les nouveaux onglets à un emplacement précis( qui est le même à chaque fois dans la macro).
    Sub copie()
    Dim ws As Worksheet
    Dim monFichier As String
    Dim wb As Workbook
    Dim chemin As String
    
    Set wb = Workbooks(ThisWorkbook.Name)
    
    chemin = ThisWorkbook.Path & "\"
    monFichier = Dir(chemin & "*.xlsx", vbNormal)
    
    Do While monFichier <> ""
        Debug.Print monFichier
            onglet = Split(monFichier, "-", "_")(2)
           ' La ligne du dessous recopie le template dans chaque nouvel onglet
            wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
            Sheets("Template").Range("A1:AH127").Copy Destination:=wb.Sheets(onglet).Range("A1")
    
         For i = 8 To 93 'Jusqu'à la ligne 93
         For j = 3 To 3
        'sur la ligne du dessous je vais juste récupérer mes valeurs dans mes onglets.             
                    Cells(i - 4, j - 2).FormulaR1C1 = "='" & ThisWorkbook.Path & "\[" & monFichier & "]Feuil1'!R" & i & "C" & j
        Next
        Next
    monFichier = Dir
    Loop
    End Sub
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je suppose que tu peux intégrer ma suggestion dans ton code.
      0
      1. Emile > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui, je vais essayer avec tes suggestions et j'uploderai le résultat pour que ça puisse servir à quelqu'un d'autre également.

        Merci encore
        0
  7. Emile
     
    Je suis désolé, je n'ai pas l'habitude de poster sur les forums...

    J'y penserai pour les prochaines fois.
    0