Parcourir la longueur d'une colonne

Fermé
Emile - 5 août 2020 à 09:05
 Emile - 5 août 2020 à 15:47
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
A voir également:

7 réponses

yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
5 août 2020 à 12:46
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
5 août 2020 à 12:55
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474 > yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024
Modifié le 5 août 2020 à 13:32
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
f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 708
5 août 2020 à 11:35
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
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
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
5 août 2020 à 13:23
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474 > yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024
Modifié le 5 août 2020 à 13:33
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
5 août 2020 à 14:18
je suppose que tu peux intégrer ma suggestion dans ton code.
0
Emile > yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024
5 août 2020 à 14:22
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
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
5 août 2020 à 14:25
cette discussion semble être la suite de https://forums.commentcamarche.net/forum/affich-36781528-afficher-les-elements-d-un-dossier
Ce serait plus sympa de garder le même identifiant d'une discussion à l'autre.
0
Je suis désolé, je n'ai pas l'habitude de poster sur les forums...

J'y penserai pour les prochaines fois.
0