VBA concatener 12 onglets successifs seulement (sur 17 onglets)

Résolu/Fermé
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015 - 27 févr. 2015 à 12:56
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015 - 4 mars 2015 à 17:58
Bonjour,

je souhaite creer une macro concatenant 12 onglets successifs dans un premier onglet qui sera creee au debut du fichier. J'avais utilise cela:

Sheets.Add Before:=Sheets(1)
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
Range("D36:P:36").PasteSpecial Paste:=xlPasteValues
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Next Ws

J'ai du mal a arreter la macro a l'onglet #12. Je suis preneuse de vos idees.

Merci a tous
A voir également:

6 réponses

Bonjour

peut-être comme ceci, si selection correspond à quelque chose
Dim Ws As Worksheet, Concat as worksheet
Sheets.Add Before:=Sheets(1)
Sheets(1).Name="Concaténation"
set Concat=worksheets("Concaténation")

For i=2 to 12 ' N° de feuilles
Worksheets(i).Range(Selection, Selection.End(xlDown)).Copy
Concat.Range("D36:P:36").PasteSpecial Paste:=xlPasteValues
Next


A+
0
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015
2 mars 2015 à 20:07
Merci beaucoup Paf,

tu as raison ma "selection" ne marche pas correctement. En fait je designe la premiere ligne d'un tableau et lui demande d'aller selectionner jusqu'a la derniere ligne mais il s'arrete en cours de route car certaines cellules sont vides.
Je fais face a un nouveau defi et j'ai imagine 3 solutions:
- remplir les cellules vides avec des tirets en faisant un go to special -> blank mais cela voudrait dire que j'arrive a selectionner la zone appropriee
- Selectionner ma premiere colonne (A1:A43) dont toutes cellules sont remplies et etendre aux colonnes de droites jusqu'a P43.
- Trouver une solution pour selectionner la zone malgre les blancs.

Si tu as une piste pour moi, je suis preneuse. J'ai deja regarde pas mal de Tuto mais je n'ai pas trouve de solutions qui me conviennent.

Si je ne suis pas claire je peux t'envoyer un fichier ou m'expliquer plus intelligiblement

Merci beaucoup,
Daphne
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 mars 2015 à 21:05
Bonsoir le fil, bonsoir le forum,
Peut-être comme ça :

Sub Macro1()
Dim I As Byte 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Sheets.Add Before:=Sheets(1) 'ajoute un onglet en première position
For I = 2 To 13 'boucle sur les onglets 2 à 13
    With Sheets(1) 'prend en compte le premier onglet
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon, la première cellule vide
        'de la colonne 1 (=A) du premier onglet)
        Set DEST = IIf(.Range("A1").Value = "", .Range("A1"), .Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
    End With 'fin de la prise en compte du premier onglet
    Sheets(I).Range("D36").CurrentRegion.Copy DEST 'copy la plage de l'onglet I et la colle dans DEST
Next I 'prochian onglet de la boucle
End Sub



0
Re

il s'arrête en cours de route à cause de l'emploi de xlDown qui s'arrête à la première ligne vide rencontrée.
L'emploi de xlUp démarre par la fin de colonne et s'arrête à la première ligne renseignée rencontrée. à utiliser de préférence pour déterminer la dernière ligne remplie d"une colonne (A dans l'exemple), malgré des cellules vides intermédiaires:

DerLig = Range("A" & Rows.Count).End(xlUp).Row (en précisant la feuille si nécessaire)

pour sélectionner les colonnes A à P jusqu'à la dernière ligne renseignée:
Worksheets(i).Range("A1:P" & DerLig).Copy 

ou
Worksheets(i).Range("A1:P" & Worksheets(i).Range("A" & Rows.Count).End(xlUp).Row).Copy 


A+
0
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015
3 mars 2015 à 19:06
C'est parfait. MERCI beaucoup.
0
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015
Modifié par fumseck88 le 3/03/2015 à 20:00
Bonsoir,

Voila mon code, modifie grace a votre aide (sans le debut ou je cree l'onglet et le nomme)

' Selection la zone a copier dans les 12 onglets et la copie dans l'onglet concatenation
For I = 2 To 10 ' N° de feuilles
With Sheets(1) 'prend en compte le premier onglet
'définit la cellule de destination DEST (C2 si C2 est vide, sinon, la première cellule vide de la colonne 3 (=C) du premier onglet)
Set DEST = IIf(.Range("C2").Value = "", .Range("C2"), .Cells(Application.Rows.Count, 3).End(xlUp).Offset(1, 0))
End With 'fin de la prise en compte du premier onglet
Worksheets(I).Range("D37:P" & Worksheets(I).Range("D" & Rows.Count).End(xlUp).Row).Copy DEST
Next I 'prochain onglet de la boucle

C'est absolument parfait, merci beaucoup.
Une derniere question, est-il possible de coller en collage special? En effet, j'aimerais coller en gardant le format des nombres ce serait plus pratique pour mes donnees.

Merci beaucoup.
0

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

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
3 mars 2015 à 20:39
Bonsoir le fil, bonsoir le forum,

Remplace la ligne:

Worksheets(I).Range("D37:P" & Worksheets(I).Range("D" & Rows.Count).End(xlUp).Row).Copy DEST

par (format à adapter) :

Worksheets(I).Range("D37:P" & Worksheets(I).Range("D" & Rows.Count).End(xlUp).Row).Copy
DEST.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False

0
fumseck88 Messages postés 8 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 18 août 2015
4 mars 2015 à 17:58
Bonjour,
merci beaucoup pour votre aide!!!!!!
0