Seléctionner et copier des colonnes non adjacentes
Bonjour à tous,
Je souhaite recopier des colonnes de plusieurs feuilles vers une feuille RECAP mais seulement les colonnes A-B-D-J-K-L-M-N
J'ai trouvé ce code sur la toile que j'ai déjà un peu adapté, il fonctionne bien pour les colonnes A et B
Sub transfert()
'Macro pour recopier les colonnes dans la feuille récap
Dim dlgR As Integer, dlgi As Integer
Dim i As Byte
With Sheets("RECAP")
dlgR = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:B" & dlgR).ClearContents
End With
For i = 1 To Worksheets.Count
If Sheets(i).Name <> "Publipostage_Dt_Image" And Sheets(i).Name <> "adresse_struct" And Sheets(i).Name <> "RECAP" Then
dlgR = Sheets("RECAP").Range("A" & Rows.Count).End(xlUp).Row
With Sheets(i)
dlgi = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:B" & dlgi).Copy
Sheets("RECAP").Range("A" & dlgR + 1).PasteSpecial xlPasteValues
End With
End If
Next
End SubLorsque je veux rajouter D et J:N, une erreur 1004 apparait : j'ai essayé ("A:B,D,J:N") après .Range
Je ne sais pas comment "transposer" les colonnes non adjacentes dans le code.
Merci de votre aide :D
Bonjour Jannuelle et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
qui vous aideront dans vos demandes et réponses sur ce forum.
Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)
Merci pour votre participation
Concernant votre demande, il n'est pas possible de copier/coller en une seule fois des colonnes non adjacentes
Vous ne pouvez pas faire en VBA ce que vous ne pouvez pas faire sur Excel
Avec une petite recherche sur le forum vous devriez trouver votre bonheur
Nota : en programmation objet, il n'est pas nécessaire de sélectionner les colonnes pour les copier
Cordialement
Bonjour Januelle, BrunoM45
Je pensais que la ligne ci dessous ferait l'affaire.....à tester....sans conviction...
Union(.Range("A2:B" & dlgi), .Range("D2:D" & dlgi), .Range("J2:N" & dlgi)).CopyMais si tu joignais un fichier (sans données confidentielles), le code pourrait certainement être optimisé.
Cordialement,
Merci Bruno,
Nota : en programmation objet, il n'est pas nécessaire de sélectionner les colonnes pour les copier
Ok je note mais je n'ai pas compris
Vous ne pouvez pas faire en VBA ce que vous ne pouvez pas faire sur Excel
Je ne savais pas, je pensais que l'on pouvait aller + loin.
Avec une petite recherche sur le forum vous devriez trouver votre bonheur
ça fait plusieurs heures que je cherche mais tous mes tests ont échoué, du coup je pense faire 3 macros vu que l'on ne peut de toute façon pas copier des cellules non adjacente.
Bon week-end !
Re,
On ne va pas vous laisser comme ça
Sub Transfert()
'Macro pour recopier les colonnes dans la feuille récap
Dim ShtS As Worksheet
Dim dlgR As Integer, dlgi As Integer
Dim Col As Integer, i As Integer
Dim ColACopier As String, TabCol() As String
ColACopier = "A-B-D-J-K-L-M-N"
TabCol = Split(ColACopier, "-")
For Each ShtS In ThisWorkbook.Sheets
If ShtS.Name <> "Publipostage_Dt_Image" _
And ShtS.Name <> "adresse_struct" And ShtS.Name <> "RECAP" Then
' Avec la feuille
For Col = 0 To UBound(TabCol)
dlgR = Sheets("RECAP").Range(TabCol(Col) & Rows.Count).End(xlUp).Row
dlgi = ShtS.Range(TabCol(Col) & Rows.Count).End(xlUp).Row
ShtS.Range(TabCol(Col) & "2:" & TabCol(Col) & dlgi).Copy
Sheets("RECAP").Range(TabCol(Col) & dlgR + 1).PasteSpecial xlPasteValues
Next Col
End If
Next ShtS
End SubA tester
A+
Bonjour à vous,
@ BrunoM45 ton code fonctionne. Seulement je souhaite recopier à la suite, recopier ABDJKLMN vers ABCDEFGH de la feuille RECAP.
Je ne l'ai pas précisé dans ma demande
@ xorsankukai, voici mon fichier vierge :
Re,
Voici le code à utiliser,
par contre avec le fichier joint, je ne vois pas l'intérêt de parcourir toutes les feuilles avec une boucle
Sub Transfert()
'Macro pour recopier les colonnes dans la feuille récap
Dim ShtS As Worksheet
Dim dlgR As Integer, dlgi As Integer
Dim Col As Integer, i As Integer
Dim ColACopier As String, TabCol0() As String
ColACopier = "A-B-D-J-K-L-M-N"
TabCol0 = Split(ColACopier, "-")
For Each ShtS In ThisWorkbook.Sheets
If ShtS.Name <> "Publipostage_Dt_Image" _
And ShtS.Name <> "adresse_struct" And ShtS.Name <> "RECAP" Then
' Avec la feuille
For Col = 0 To UBound(TabCol0)
dlgi = ShtS.Range(TabCol0(Col) & Rows.Count).End(xlUp).Row
ShtS.Range(TabCol0(Col) & "2:" & TabCol0(Col) & dlgi).Copy
' Coller les valeurs à partir de la 1ère colonne
dlgR = Sheets("RECAP").Cells(Rows.Count, 1 + Col).End(xlUp).Row
Sheets("RECAP").Cells(dlgR + 1, 1 + Col).PasteSpecial xlPasteValues
Next Col
End If
Next ShtS
End SubA+
Salut,
Re,
Voici le code à utiliser,
par contre avec le fichier joint, je ne vois pas l'intérêt de parcourir toutes les feuilles avec une boucle
Merci pour le code. Il fonctionne.
Je n'ai pas compris pour la boucle...car je suis vraiment inculte
Merci beaucoup pour ton aide
A bientôt
que 2 feuilles
je dois copier les données de 10 feuilles et exclure 3 feuilles (RECAP, Adresse_struct et Publipostage dt image )
Ton code d'avant fonctionne, je vais garder celui là
A +