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   -
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

3 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjoue Eldyviah, bon jour le forum,

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

0
Eldyviah Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour à toi ThauTheme et encore une fois merci pour ton aide,

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
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

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

0
Eldyviah Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Patrice,

Il y a deux points sur lesquels j'aimerais que tu éclaircisses mon esprit, si tu le veux bien:
Premièrement -> Feuil10.Range("A2") pourquoi ("A2")
Deuxièmement ->Je comprends pas le code à partir de if

Merci d'avance
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
0
Eldyviah Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Le bug, avec quel code exactement (code complet) ?
0
Eldyviah Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Patrice,

Le code que vous m'avez transmis je l'ai adapté en fonction des informations que j'ai besoin de traiter et ça me met un bug d'exec à chaque fois est-ce normal ou est-ce moi qui ait fait une fausse manip ?
0
Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
Bonjour,

Copy c'est ce que tu veux faire?
0
Eldyviah Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Oui c'est ce que j'aimerai faire
0