[VB6 -> VBA] Copier Coller colonnes discontinues d'un classeur vers un autre

Résolu
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013 - 19 juil. 2013 à 11:46
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013 - 19 juil. 2013 à 17:37
Bonjour à toutes et à tous,

je souhaiterais copier le contenu des colonnes A et C de plusieurs classeurs (sauf 1ère ligne) vers un autre classeur Recap.xlsm. Cela bug à partir de la ligne
[color=yellow] dans le code ci-dessous.

Pouvez-vous m'aider à trouver l'erreur ?

Je vous remercie et vous souhaite une bonne journée !





Sub CreationSynthese2()
 ' --------------
Dim DerLig As Long
Dim Z1, Z2, PlageMultiZone As Range
Dim S1, S2, MaplageMutizoneDestination As Range

    
' Parcours de tous les fichiers
 ' -----------------------------
 ChDir "C:\Users\XX\Desktop\conso tablo"
 ClasseurAction = Dir("C:\Users\XX\Desktop\conso tablo\*.xlsx")
 While Len(ClasseurAction) > 0
    Workbooks.Open ClasseurAction
    AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count
        Range("A2").Select
        ActiveCell.End(xlDown).Select
         Zone1 = ActiveCell.Address
         Selection.Offset(0, 2).Select
         Zone2 = ActiveCell.Address
         Set Z1 = Range("A2", Zone1)
        Set Z2 = Range("C2", Zone2)
        Set PlageMultiZone = Union(Z1, Z2)
         ZoneSelection = PlageMultiZone.Copy

    Workbooks("Recap.xlsm").Activate
    DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
    Range("A2").Select
       [color=yellow]ActiveCell.End(xlDown).Select
         Zone1 = ActiveCell.Address
         Selection.Offset(0, 2).Select
         Zone2 = ActiveCell.Address
         Set S1 = Range("A2", Zone1)
        Set S2 = Range("C2", Zone2)
        Set MaPlageMultiZone = Union(S1, S2)
         ZoneSelection = MaPlageMultiZone.Paste

   
    Workbooks(ClasseurPilote).Close
    ClasseurPiloteAction = Dir
 Wend
    Cells.EntireColumn.AutoFit
     Range("A1").Select
 End Sub

11 réponses

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 13:39
Bonjour,
je pense que le souci vient de là

Range("A2").Select
// SELECT <> ACTIVATE
ActiveCell.End(xlDown).Select



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013
19 juil. 2013 à 14:52
Merci beaucoup pour votre réponse,

J'ai modifié le code mais j'ai encore un bug sur la ligne

ZoneSelection = MaPlageMultiZone.Paste

Erreur d'exécution 438

Workbooks("Recap.xlsm").Activate
    DebutNomFichier = ActiveSheet.UsedRange.Rows.Count
    Range("A2").Activate
  
       ActiveCell.End(xlDown).Select
         Zone1 = ActiveCell.Address
         Selection.Offset(0, 2).Select
         Zone2 = ActiveCell.Address
         Set S1 = Range("A2", Zone1)
        Set S2 = Range("C2", Zone2)
        Set MaPlageMultiZone = Union(S1, S2)
        ZoneSelection = MaPlageMultiZone.Paste
3
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 15:18
Le plus simple est de Sélectionner votre deuxième plage, puis de dire "activesheet.paste"

[b]Exemple:/b
Dim MaPlage As Range
Dim MaPlage2 As Range
Set MaPlage = Range("A1:C10")
Set MaPlage2 = Range("F1:H10")
x = MaPlage.Copy
MaPlage2.Select
ActiveSheet.Paste



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 16:18
oula... je ne vois plus le .COPY

Sinon, utilises l'enregistre de macros.
Simule l'action que tu veux faire, récupère le code ainsi généré en l'adaptant à tes besoins. Tu devrais y arriver plus facilement.

Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3

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

Posez votre question
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 16:30
Il me semble que tu ne peux pas copier dans des zones multiples.
-> On peut copier une selection multiple (ça les colleras côte à côte)

par exemple:
Sub subCopyMultizone()
'
' subCopyMultizone Macro
'

' -> FONCTIONNE ( zone de collage contigues )
    Sheets(1).Activate
    Range("A1:A9,C1:C9").Select
    Range("C1").Activate
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1:B12").Select
    ActiveSheet.Paste
    
    ' -> FONCTIONNE ( zone de collage multiple )
     Sheets(1).Activate
    Range("A1:A9,C1:C9").Select
    Range("C1").Activate
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1:A12,C1:C12").Select
    ActiveSheet.Paste
End Sub


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 16:34
Penses à clôturer la discussion.

)> Réponse acceptée.

Merci et bonne continuation

Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013
19 juil. 2013 à 16:07
Je suis désolée (je ne suis pas calée en VB et j'ai réussi à faire ce bout de code en cherchant sur les forums.

J'ai modifié comme ci-dessous et cela bug "la commande ne peut pas être exécutée sur des sélections multiples"

Dim MaPlage As Range
Dim MaPlage2 As Range

Workbooks("Recap.xlsm").Activate
    DebutNomFichier = ActiveSheet.UsedRange.Rows.Count
    Set MaPlage = Range("A2:A10,C2:C10")
    MaPlage.Select
    ActiveSheet.Paste


Merci pour votre aide
0
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013
19 juil. 2013 à 16:30
j'ai lancé l'enregistreur de macro : Classeur Action.xlsx copy cellules de A2 à A10 et de C2 à C10 dans classeur recap.xlsù sélection cellules A2 et C2 puis coller

même réponse : "la commande ne peut pas être exécutée sur des sélections multiples"

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 juil. 2013 à 16:45
Bonjour, jordane
je n'interviens que pour te signaler la méthode copy (aide VBA) et son argument destination
L'utiliser sans Select, paste etc ...
Y désigner les plages par précision de classeur et de feuille (tant en ce qui concerne l'origine que la destination)
L'origine peut parfaitement être une plage discointinue
La destination est une cellule seule et pas deux ===>> VBA saura faire
Je te laisse maintenant continuer.
Amitiés

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
19 juil. 2013 à 16:59

L'origine peut parfaitement être une plage discointinue
La destination est une cellule seule et pas deux ===>> VBA saura faire

> Oui, c'est ce qu'en effet je lui ai indiqué.
tu ne peux pas copier dans des zones multiples



Par contre, petite erreur dans le commentaire de ma macro d'exemple
'-> FONCTIONNE ( zone de collage multiple 
'** Il fallait lire : NE FONCTIONNE PAS

Quand à l'exemple en 'désignant' les cellules de destination, ce n'était que pour bien montrer la différence.
Sinon, en effet, Une seule cellule suffit pour désigner le 'collage' (voir même, si aucune indication, Excel se basera sur la cellule active de la feuille où sera copié la sélection)


C'est bien pour ça que je lui ai demandé de faire le test 'manuellement' Il a ainsi pu s'apercevoir que ce n'était pas possible.


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
pasmo Messages postés 5 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 19 juillet 2013
19 juil. 2013 à 17:37
Merci beaucoup je vais essayer de m'en sortir avec vos conseils.
0
Rejoignez-nous