VBA - Copier - Coller entre feuilles

Bonsoir,

Lorsque je souhaite copier - coller des données d'une feuille à l'autre, j'utilisais cette solution :

Sheets("Mafeuille").Range("Plage de données").Value = Sheets("Mafeuille2").Range("Plage de données").Value

J'ai été confronté à des soucis en utilisant des plages de données bien définies, aussi j'ai opté pour variabiliser ces dernières.

J'ai donc tenté de m'y prendre ainsi :

Private Sub CommandButton1_Click()

Dim g As Long, 

Set ws2 = Worksheets("A")
Set ws3 = Worksheets("B")

g = ws2.Cells(Rows.Count, 2).End(xlUp).Row

ws3.Range(Cells(4, 2), Cells(g + 1, 2)).Value = ws2.Range(Cells(3, 10), Cells(g, 10)).Value

End Sub

Puis comme ça :

Private Sub CommandButton1_Click()

Dim g As Long, h As Long, m As Long

Set ws2 = Worksheets("A")
Set ws3 = Worksheets("B")

g = ws2.Cells(Rows.Count, 2).End(xlUp).Row

For h = 4 To g + 1
For m = 3 To g

ws3.Cells(h, 2).Value = ws2.Cells(m, 10).Value

Next
Next

End Sub

Malheureusement, ça ne fonctionne pas.

La première tentative donne une erreur.

La seconde tentative copie la dernière donnée de la plage de données de la feuille 1 et copie son contenu sur l'ensemble de la plage de données de la feuille 2.

J'ai eu la même chose avec la première donnée de la feuille 1.

Je joins un fichier pour davantage de clarté. Aucune idée de ce qui peut bien clocher...

Merci de votre attention,

Bonne soirée !

12tableaux-test.xlsm (22.76 Ko)

Salut le Drosophile,

g = ws2.Range("B" & Rows.Count).End(xlUp).Row
ws3.Range("B4:B" & g + 1).Value = ws2.Range("J3:J" & g).Value

Si tu as un ensemble de copies prévues dans le même paquet, mieux vaudrait peut-être que tu nous expliques cela !?

A+

Merci de votre aide, a priori cela fonctionne très bien.

Serait-il possible de me dire ce que cette partie du code fait : ("B4:B" & g + 1)

De la cellule B4 à la cellule B ET la dernière cellule "g" +1. Comment ce fait-il que lorsque je désigne directement la dernière ligne cela ne fonctionne pas et qu'il faille le rédiger ainsi ?

Si tu as un ensemble de copies prévues dans le même paquet, mieux vaudrait peut-être que tu nous expliques cela !?

Je n'ai pas bien compris la question

Bonne soirée !

Bonjour Le Drosophile, curulis57,

tu a écrit :

De la cellule B4 à la cellule B ET la dernière cellule "g" +1.

g = ws2.Range("B" & Rows.Count).End(xlUp).Row : pour cette ligne, g n'est pas une cellule mais le de la dernière ligne utilisée (selon la colonne B, et sur la feuille ws2) ; on pourrait déclarer g ainsi : Dim g As Long ou Dim g& (nombre entier Long de 4 octets)


si ce n° de ligne trouvé est par exemple 20, alors : g = 20 ; et g + 1 = 21 ; donc :

Range("B4:B" & g + 1) équivaut à B4:B21 ; et Range("J3:J" & g) équivaut à J3:J20


curulis57 a écrit :

Si tu as un ensemble de copies prévues dans le même paquet, mieux vaudrait peut-être que tu nous expliques cela !?

tu a écrit :

Je n'ai pas bien compris la question

curulis57 a voulu dire : « Si tu as un ensemble de copies prévues dans le même ensemble de cellules groupées » ; car si c'est le cas, au lieu de lire ou modifier chaque cellule individuellement, on peut faire une optimisation du code VBA selon l'emplacement des cellules.


juste pour info, dans le contexte ci-dessus, "dans le même paquet" est juste "façon de parler" : ce n'est pas une expression informatique et on pourrait dire « un ensemble de cellules contigües » ; par contre, dans le domaine des communications, on parle d'envoi de « paquets de données » ; et là, c'est bien un terme informatique.

le protocole Internet découpe les données en paquets pour les envoyer sur le réseau par des chemins qui peuvent être différents, mais en bout de chaîne, tous les paquets finissent par être regroupés (heureusement, sinon le fichier envoyé ne serait pas complet !)

dhany

Bonsoir,

Merci pour les explications ! Je ne savais pas qu'on pouvait désigner une plage de données de cette manière.

En l’occurrence il s'agit de 3 plages de données à copier-coller. J'ai répété le code 3 fois en modifiant les colonnes de destination et tout fonctionne très bien, après plusieurs tests sur plusieurs bases de données.

merci pour ton retour, et pour le !

bonne continuation !

dhany

Rechercher des sujets similaires à "vba copier coller entre feuilles"