Récupérer données dans n onglets pour établir une liste

pierrequimousse

XLDnaute Junior
Bonjour à tous !

Je voudrais récupérer des données (plusieurs lignes de 5 cellules par onglet) provenant des onglets n°5 à "n" (variable) selon une condition simple
PUIS les mettre sous forme de liste dans l'onglet n°4. Débutant en VBA, j'ai écrit ce qui suit (mais ce n'est que de la théorie...).

Je crois ne pas être trop loin du "vrai" mais il me manque un peu de syntaxe et d'astuce... en bref je manque un peu de compétence VBA!!! (mais j'y travaille...)

Mes humbles questions :

- Comment coller les données copiées sur la feuil i dans la feuil 4, en fin de liste ?
- Comment arrête t-on une boucle ? (dans mon code j'ai mis imax, qui correspond au n° de feuil le plus élevé) que va t'il se passer si on lui demande de chercher dans une feuille inexistante, comment l'éviter ?

Sub Récup_données()

Feuil4.Range("b4:f10000").ClearContents 'JE METS ICI 10 000 CAR JE NE SAIS PAS
'SI ON PEUT LUI DEMANDER DE NEFFACER QUE les cellules non vides de la liste ?


Dim i, j As Integer

For i = 5 To IMAX 'i est le numéro de feuille à partir de 5 jusque n (nombre d'onglets variables) comment faire pour que la
'boucle s'arrête bien sur la dernière feuille existant dans le classeur ?



Do
With feuil("i")
For j = 1 To 10000 'j pour le numéro de ligne, pareil je mets 10 000 car ne sais pas comment lui demander de s'arreter
'à la dernière ligne remplie (il y a des lignes vierges dans les "feuil i", par souci de clarté et de présentation)

Do
If .Cells("A&j") > 0 Then
.Range("A&J:E&j").Copy
'PUIS COLLER EN FIN DE LA LISTE QUI COMMENCE EN FEUILLE 4, CELLULE B4, qui a 5 colonnes End If

Next
Next

End Sub

D'avance merci à ceux qui jetteront un oeil sur mon code, si vous voulez je peux faire un fichier exemple (l'original est déjà trop lourd)...

Merci et à bientôt !

VOICI LE FICHIER : les données à récupérer sont dans les colonnes A:E des 2 onglets du milieu, à mettre dans le t ableau de l'onglet OF
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Récupérer données dans n onglets pour établir une liste

Bonjour la mousse,
J'ai fait ceci mais je n'ai pas testé
J'espère ne rien avoir oublié sinon A+

Code:
Sub Récup_données()
Dim i, j, k As Integer
Feuil4.Range("b4:f" & Feuil4.[B65536].End(xlUp).Row).ClearContents
k = 4
For i = 1 To Sheets.Count 'toutes les feuilles
If Sheets(i).CodeName <> "Feuil4" Then
  With feuil(i) '(i)et pas ("i")i ici est un chiffre
    For j = 3 To .[F65536].End(xlUp).Row 'derniere ligne de col F
     If .Cells(j, 6) <> "" Then
        Feuil4.Range("B" & k).Value = .Name
        Feuil4.Range("C" & k & ":G" & k).Value = _
        .Range("F" & j & ":J" & j).Value
        k = k + 1
     End If
    Next
  End With
EndIf
Next
End Sub
 

pierrequimousse

XLDnaute Junior
Re : Récupérer données dans n onglets pour établir une liste

Salut le forum et Youky,

J'ai en fait de petites questions subsidiaires pour bien comprendre ce code, auriez vous quelque élément de réponse ?
J'ai mis mes interrogations en rouge dans le code...

Sub Récup_donnéestest()
Dim i, j, k As Integer
Feuil4.Range("b4:f" & Feuil4.[B65536].End(xlUp).Row).ClearContents
k = 4
For i = 1 To Sheets.Count 'toutes les feuilles
If Sheets(i).CodeName <> "Feuil4" Then Pourrait on ici faire une condition multiple ? que le nom soit différent de feuil1 ou feuil 2 ou feuil 3 ou feuil 4 ? (j'ai essayé aver des "or" ca ne plait pas trop on dirait...
If Sheets(i).Range("D2").Value > 0 Then
With Sheets(i) '(i)et pas ("i")i ici est un chiffre
For j = 2 To .[F65536].End(xlUp).Row 'derniere ligne de col F
If .Cells(j, 1) <> "" Then
Feuil4.Range("B" & k & ":F" & k).Value = _ à quoi correspond ce tirait ? Pourquoi renvoie t on l'expression à la ligne ???
.Range("A" & j & ":E" & j).Value
k = k + 1
End If
Next
End With
End If
End If
Next
End Sub

Merci à vous !!
 

youky(BJ)

XLDnaute Barbatruc
Re : Récupérer données dans n onglets pour établir une liste

RE
Content que ca marche,
Explications.......
If Sheets(i).CodeName <> "Feuil4" Or Sheets(i).CodeName <> "Feuil10" Or Sheetsi).CodeName <> "Feuil15" Then

Pour le tirait " _" remarque que le tiret n'ai pas centré entre les guillemets car il faut un espace avant(important)
Ce tiret permet le prolongement d'une ligne, donc la ligne en dessous fera partie de la même ligne, pour le verifier mets une apostrophe comme ceci
'Feuil4.Range("B" & k & ":F" & k).Value .........
tu verras que les 2 lignes se mettent en vert
En résumé ce tiret permet une meilleure lecture
A+
 

Discussions similaires

Réponses
4
Affichages
401
Réponses
20
Affichages
619

Statistiques des forums

Discussions
314 450
Messages
2 109 730
Membres
110 553
dernier inscrit
loic55