Besoin d'aide (concatenation)
Résolu
Eldyviah
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
Eldyviah Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
Eldyviah Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Voila j'ai presque entièrement finis ma macro, le seul soucis c'est l'étape finale.
J'aimerai qu'en fonction du nom de l'onglet il me sélectionne la plage entière et qu'il la colle dans une feuille "RECAP". J'ai commencé à réaliser un code pouvez-vous me dire si je suis sur la bonne voie ou si je pars dans le mauvais sens ?
Merci d'avance
Sub ConcatenationFeuilles()
Dim O As Worksheet 'déclare la variable O (Onglets)
Dim DL As Long 'déclare la variable DL (Derniere Ligne)
Feuil10.Cells.Clear
For Each O In Sheets 'boucle sur tous les onglets O du classeur
If Not O.Name = "DEBUT" And Not O.Name = "FIN" And Not O.Name = "CORRESPONDANCE" And Not O.Name = "BASE" And Not O.Name = "RECAP" And Not O.Name = "FORMULES" Then 'condition : si l'onglet ne s'appelle pas...'
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O
Select Case O.Name 'agit en fonction du nom de l'onglet
Case "STRUCTURE" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE1" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE2" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE3" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE4" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
End Select 'fin de l'action en fonction du nom de l'onglet O
Et la en gros j'aimerai lui dire pour chaque copy colle moi ça dans la feuille "RECAP"
End If 'fin de la condition
Next O 'prochain onglet de la boucle
Voila j'ai presque entièrement finis ma macro, le seul soucis c'est l'étape finale.
J'aimerai qu'en fonction du nom de l'onglet il me sélectionne la plage entière et qu'il la colle dans une feuille "RECAP". J'ai commencé à réaliser un code pouvez-vous me dire si je suis sur la bonne voie ou si je pars dans le mauvais sens ?
Merci d'avance
Sub ConcatenationFeuilles()
Dim O As Worksheet 'déclare la variable O (Onglets)
Dim DL As Long 'déclare la variable DL (Derniere Ligne)
Feuil10.Cells.Clear
For Each O In Sheets 'boucle sur tous les onglets O du classeur
If Not O.Name = "DEBUT" And Not O.Name = "FIN" And Not O.Name = "CORRESPONDANCE" And Not O.Name = "BASE" And Not O.Name = "RECAP" And Not O.Name = "FORMULES" Then 'condition : si l'onglet ne s'appelle pas...'
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O
Select Case O.Name 'agit en fonction du nom de l'onglet
Case "STRUCTURE" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE1" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE2" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE3" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
Case "STRUCTURE4" 'cas
O.Range("A2:L" & DL).Value = Copy 'action
End Select 'fin de l'action en fonction du nom de l'onglet O
Et la en gros j'aimerai lui dire pour chaque copy colle moi ça dans la feuille "RECAP"
End If 'fin de la condition
Next O 'prochain onglet de la boucle
A voir également:
- Besoin d'aide (concatenation)
- Concaténation pdf - Guide
- Parenthèse avec concaténation access - Forum Programmation
- Excel: concatenation et format - Forum Excel
- Concaténation du contenu de fichier.txt - Forum Programmation
- Concaténation C++ (const char + char) ✓ - Forum C++
3 réponses
Bonjoue Eldyviah, bon jour le forum,
Peut-être comme ça :
Peut-être comme ça :
Sub ConcatenationFeuilles() '*************************************************************************************************** 'ce code va copier la plage A2:A... jusqu'à DL de chaque onglet dont le nom commence par "STRUCTURE" 'et va la coller dans la première cellule vide de la colonne A de l'onglet "RECAP" '*************************************************************************************************** Dim O As Worksheet 'déclare la variable O (Onglets) Dim R As Worksheet 'déclare la variable R (onglet Recap) Dim DL As Long 'déclare la variable DL (Derniere Ligne) Dim DEST As Range 'déclare la variable DEST (cellule de DESTination) Feuil10.Cells.Clear '?? Set R = Sheets("RECAP") 'définit l'onglet R For Each O In Sheets 'boucle sur tous les onglets O du classeur If Left(O.Name, 9) = "STRUCTURE" Then DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O Set DEST = R.Cells(Application.Rows.Count, 1).End(xup).Offset(1, 0) 'définit la cellule de destination DEST (première cellule vide de la colonne 1 (=A) de l'onglet R) O.Range("A2:L" & DL).Copy DEST 'copy la plage A2:A... jusqu'à DL de l'onglet O de la boucle et la colle dans DEST End If 'fin de la condition Next O 'prochain onglet de la boucle End Sub
Bonjour,
Peut-être :
Peut-être :
Sub ConcatenationFeuilles() Dim w As Worksheet 'feuille Dim r As Range 'plage à copier Dim c As Range 'cellule de destination Dim n As String 'nom des feuilles à copier Feuil10.Cells.Clear Set c = Feuil10.Range("A2") n = "/STRUCTURE/STRUCTURE1/STRUCTURE2/STRUCTURE3/STRUCTURE4/" For Each w In Worksheets With w If InStr(1, n, "/" & w.Name & "/") > 0 Then With .Range(.Cells(.Rows.Count, "A").End(xlUp), "L2") .Copy c Set c = c.Offset(.Rows.Count) End With End If End With Next w End Sub
Re,
Premièrement :
Tu n'as pas précisé où tu veux copier tes données, tu peux les mettre ailleurs.
Deuxièmement :
InStr(1, n, "/" & w.Name & "/") > 0
permet de vérifier que le nom de la feuille, se situe dans la liste des noms avec un / devant et un / derrière pour être sur de tester le nom exact.
.Range(.Cells(.Rows.Count, "A").End(xlUp), "L2")
définit la plage de cellules depuis la dernière ligne de la colonne A jusqu'à L2 (les 2 diagonales définissent la même plage !)
.Copy c
copie la plage vers la cellule c
Set c = c.Offset(.Rows.Count)
Définit la prochaine cellule de destination (décalée vers la bas en fonction du nombre de lignes de la plage copiée)
Edit : Pour obtenir l'aide VBA sur un mot : places le curseur dessus et tapes F1
Premièrement :
Tu n'as pas précisé où tu veux copier tes données, tu peux les mettre ailleurs.
Deuxièmement :
InStr(1, n, "/" & w.Name & "/") > 0
permet de vérifier que le nom de la feuille, se situe dans la liste des noms avec un / devant et un / derrière pour être sur de tester le nom exact.
.Range(.Cells(.Rows.Count, "A").End(xlUp), "L2")
définit la plage de cellules depuis la dernière ligne de la colonne A jusqu'à L2 (les 2 diagonales définissent la même plage !)
.Copy c
copie la plage vers la cellule c
Set c = c.Offset(.Rows.Count)
Définit la prochaine cellule de destination (décalée vers la bas en fonction du nombre de lignes de la plage copiée)
Edit : Pour obtenir l'aide VBA sur un mot : places le curseur dessus et tapes F1
Merci pour les précisions,
Je vais donc t'éclairer pour que tu puisses m'aider correctement alors =)
Je veux copier les valeurs et les mettre dans la feuille recap
Je viens de comprendre merci pour cette indication, concernant le test exact du nom, ça pourra me servir de nouveau dans mes futurs macros.
Pour Set c = c.Offset(.Rows.Count) j'ai un bug d'exec (1004)
Merci pour l'info je m'en servirai à l'avenir
Je vais donc t'éclairer pour que tu puisses m'aider correctement alors =)
Je veux copier les valeurs et les mettre dans la feuille recap
Je viens de comprendre merci pour cette indication, concernant le test exact du nom, ça pourra me servir de nouveau dans mes futurs macros.
Pour Set c = c.Offset(.Rows.Count) j'ai un bug d'exec (1004)
Merci pour l'info je m'en servirai à l'avenir
Concrètement le code que tu me proposes me parait intéressant cependant le nom de mes feuilles varient et ne suit pas une logique (STUCTURE,STRCUTURE1,...)
Est-ce que par hasard l'utilisation d'un else pourrais me permettre de sélectionner les autre cas ?
Si oui comment faire pour que la macro ne colle pas sur la plage déjà collée par la partie de code précédente
Merci d'avance