Pb pour un copier/coller: la zone de copie et de collage sont de taille dif

Bonjour à tous!

J'aurais besoin de votre aide aujourd'hui à propos d'un souci de copier/coller. Comme indiqué en objet, j'ai un message d'erreur qui m'indique que: "Le collage ne peut être effectué, car les zones de copier et de collage sont de tailles différentes."

Même si l'explication de la boite de dialogue Microsoft est claire, je n'arrive pas à débuguer cette erreur.

Mon code est le suivant:

                If Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(1, j).Value = Workbooks("Mise en commun des colonnes work").Sheets("DATA Hybrides.xlsx").Cells(1, l).Value Then
                    Workbooks("Mise en commun des colonnes work").Sheets(i).Columns(l).Select
                    Selection.Copy

                    Workbooks("Mise en commun des colonnes work").Sheets("temp").Cells(x, l).PasteSpecial Paste:=xlPasteValues
                    x = x + 1
                End If

La raison pour laquelle j'ai besoin d'une coordonnée de ligne pour la cellule où copier les valeurs est que je viens completer des colonnes avec des infos issues d'autres feuilles dont les noms de colonnes sont les memes que les colonnes à completer.

Merci d'avance pour votre aide.

J'ai parcourcu les anciens posts sur le sujet, et aucun ne correspond à mon cas de figure. De plus, ils sont un peu tombés dans l'oubli sans vraiment avoir été résolus... Je me tourne donc vers vous!

Cordialement.

Mateo.

Bonjour

la copie des données se fait sur une colonne entière... donc le collage doit se faire sur une colonne ... alors que dans le code le collage se fait à partir d'une cellule précise.... donc normal que cela ne fonctionne pas....

pourquoi ne pas copier seulement les cellules nécessaires ??? et les coller au bon endroit ??

With Workbooks("Mise en commun des colonnes work").Sheets(i)
.Range(.Cells(1, l), .Cells(.Cells(Rows.Count, l).End(xlUp).Row, l)).Copy
end with 
Workbooks("Mise en commun des colonnes work").Sheets("temp").Cells(x, l).PasteSpecial Paste:=xlPasteValues

En supposant que dans la colonne l les données commencent à la première ligne et enfin l et x soit de valeur correcte

Fred

Bonjour Fred , merci pour ta réponse!

En effet, c'était ce qui posait problem à Excel... Toutefois je ne comprends pas parce que lorsque l'on fait cette commande à la main il l'exécute sans soucis...

En tout cas, j'ai maintenant un second problem, c'est les cellules vides.

Voici la macro en question:

''On ajoute les colonnes identiques les unes en dessous des autres

For i = iSheetStart To iSheetStop
    If Sheets(i).Name <> "DATA Hybrides.xlsx" Then
        Workbooks("Mise en commun des colonnes work").Sheets(i).Activate
        iLignFin = Cells(1, 1).CurrentRegion.Rows.Count
        iColFin = Cells(1, 1).CurrentRegion.Columns.Count
        For l = 1 To iColRef
            For j = 1 To iColFin
                If Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(1, j).Value = Workbooks("Mise en commun des colonnes work").Sheets("DATA Hybrides.xlsx").Cells(1, l).Value Then

''On comble les cellules vides pour faciliter la sélection de la colonne souhaitée

                    For x = 2 To iLignFin
                        If Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(x, j).Value = "" Then
                            Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(x, j).Value = "'"
                        End If
                    Next

''Copier/coller de la colonne souhaitée

                  $$  Workbooks("Mise en commun des colonnes work").Sheets(i).Range(Cells(2, j), Cells(2, j).End(xlDown)).Select $$
                    Selection.Copy

                    Workbooks("Mise en commun des colonnes work").Sheets("temp").Activate
                    Cells(1, l).Select
                    y = Cells(1, l).End(xlDown).Row + 1
                    Cells(y, l).PasteSpecial Paste:=xlPasteValues

''On rétabli les cellules vides

                    For x = y To y + iLignFin
                        If Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(x, j).Value = "'"Then
                            Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(x, j).Value = ""
                           End If
                    Next
                End If
            Next
        Next
    End If
Next

MsgBox "Done"

End Sub

La ligne qui pose souci es la ligne entre $$ $$. L'erreur est l'erreur 1004: erreur définie par l'application ou par l'objet.

Le bug a lieu pour les valeurs suivantes: i = 5 ; j = 6

Qqun aurait-il une idée d'où celà peut provenir? Parce que j'ai eu beau combler les cellules vides de ma plage, le message d'erreur est le meme.

Je ne peux pas vous partager les données car elle sont confidentielles. Toutefois, je peux vous partager une capture d'écran des données de la feuille i = 5 pour que vous puissiez vous faire une idée. (Voir pièce jointe).

Merci pour votre aide.

Mateo.

screenshot xlpratique

Bonjour

normalement le fait d'avoir des cellules vides ne devrait pas posé problème.

mais remplace la ligne qui pose problème par celle que je t'avais donnée hier

With Workbooks("Mise en commun des colonnes work").Sheets(i)
.Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j)).Copy
end with

car les points . avant les cells ont leur importances....

de plus pour moi il y a erreur de syntaxe sur cette ligne..

Range(Cells(2, j), Cells(2, j).End(xlDown))

mais je me trompe peut-etre...

fred

Non tu as sans doute raison puisque l'erreur se situe sur cette ligne. Quelle est l'erreur selon toi?

Et quell est l'intérêt de placer les points devant Cells tel que suit: .Cells?

Merci pour ton aide en tout cas.

Mateo.

Je precise que j'ai testé ta solution et qu'Excel 2013 m'indique que les .Cells sont une reference non valide.

De plus, lorsque je les retire, j'ai le même message d'erreur...

Bon

pas acquis de conscience j'ai quand même vérifié ta ligne de code...

alors lorsque tu exécute ta ligne

Sheets(1).Range(Cells(2, j), Cells(2, j).End(xlDown)).Select

je selectionne ceci dans mon fichier test :

capture

et lorsque j’exécute ma ligne de code :

With Sheets(1)
.Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j)).Select
End With

je sélectionne ceci :

capture2

d'ou ton problème de sélection avec des cellules vides

as tu mis le

With Workbooks("Mise en commun des colonnes work").Sheets(i)

.Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j)).Copy

end with

autour de la ligne comme dans le code fourni ??

fred

j'ai tester mes lignes de code sous 2007 et 2016 et pas de soucis ....

fred

pour répondre a ta question :

Et quel est l'intérêt de placer les points devant Cells tel que suit: .Cells?

soit on écrit

With Workbooks("Mise en commun des colonnes work").Sheets(i)
.Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j)).Copy
end with

soit faudrait écrire ceci :

Workbooks("Mise en commun des colonnes work").Sheets(i).Range(Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(2, j), Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(Workbooks("Mise en commun des colonnes work").Sheets(i).Cells(Rows.Count, j).End(xlUp).Row, j)).Copy

c'est la même chose sauf que une est plus lisible que l'autre... le fait de mettre le point avant un range, cells,..... veux dire que l'on est après ce qui concerne le with... enfin je ne sais pas si j'arrive a bien me faire comprendre....

Fred

En effet, il manquait le With...

Ton code marche bien, je te remercie! Par contre je ne le comprends pas bien. Pourrais-tu m'expliquer chaque argument du code suivant stp?

With Workbooks("Mise en commun des colonnes work").Sheets(i)
                    .Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j)).Copy
           End With

Merci d'avance,

Mateo.

tu veux sélectionner une plage de cellule, et pour cela il existe plusieurs méthodes....

l'une d'entre elle est de faire

range(cellule depart, cellule de fin)

donc

nous avons le cellule de départ ici

Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j))

colonne N° j ligne 2

nous avons le cellule de fin ici

.Range(.Cells(2, j), .Cells(.Cells(Rows.Count, j).End(xlUp).Row, j))

toujours colonne N° j et pour la ligne .... dernière ligne occupée dans la colonne N°j

donc ceci permet de connaitre la dernière ligne occupée dans une colonne donnée, ici colonne N° j

.Cells(Rows.Count, j).End(xlUp).Row

fred

Ok super, j'ai compris. Et pourquoi utiliser le With?

j'ai tenté une explication sur le dernier message de la page 1 de ce fil...

Fred

Ok j'ai compris aussi, en fait à chaque fois que l'on mets le .Cells on indique que le préfixe "sous-entendu" est celui nommé dans la structure de la boucle With finalement c'est ça?

Je ne savais pas l'utiliser de cette façon, je te remercie! Et désolé de te faire répéter les explications, j'ai pas les yeux en face des trous ce matin!

En tout cas maintenant ma macro fonctionne, c'est parfait!

Mateo.

re

en fait à chaque fois que l'on mets le .Cells on indique que le préfixe "sous-entendu" est celui nommé dans la structure de la boucle With finalement c'est ça?

Oui c'est ça.... tu as bien compris...

Fred

Rechercher des sujets similaires à "copier coller zone copie collage taille dif"