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

Messages postés
5
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
19 juillet 2013
- 19 juil. 2013 à 11:46 - Dernière réponse :
Messages postés
5
Date d'inscription
mardi 30 octobre 2007
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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 13:39
3
Merci
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

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de jordane45
Meilleure réponse
Messages postés
5
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
19 juillet 2013
- 19 juil. 2013 à 14:52
3
Merci
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

Merci pasmo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de pasmo
Meilleure réponse
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 15:18
3
Merci
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

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de jordane45
Meilleure réponse
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 16:18
3
Merci
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

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de jordane45
Meilleure réponse
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 16:30
3
Merci
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

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de jordane45
Meilleure réponse
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 16:34
3
Merci
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

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de jordane45
Messages postés
5
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
19 juillet 2013
- 19 juil. 2013 à 16:07
0
Merci
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
Commenter la réponse de pasmo
Messages postés
5
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
19 juillet 2013
- 19 juil. 2013 à 16:30
0
Merci
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
Commenter la réponse de pasmo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 19 juil. 2013 à 16:45
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
23257
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
17 novembre 2018
- 19 juil. 2013 à 16:59
0
Merci

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
Commenter la réponse de jordane45
Messages postés
5
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
19 juillet 2013
- 19 juil. 2013 à 17:37
0
Merci
Merci beaucoup je vais essayer de m'en sortir avec vos conseils.
Commenter la réponse de pasmo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.