VBA : copie d'une plage de 3 cellules

Bonjour,

micro question, je profite qu'il y ait des experts ici :

voici un bout de mon code vba :

    For Each rw In Range(MailingTable).Rows
        Range("Country") = rw.Cells(1, 1)
        Range("Code") = rw.Cells(1, 2)
    Next rw

Là, j'ai 2 cellules. Sauf que je dois refaire la macro avec maintenant 3 cellules.

Bref, j'aimerais le mettre en paramètre. Peut importe le format du paramètre.

En gros, j'ai besoin de rw.???? qui me donne la plage de 3 cellules Cells(1,1), Cells(1,2) et Cells(1,3)

Alors, j'ai essayé de faire ca :

Range("MailingParam") = Range( rw.Cells(1, 1) , rw.Cells(1, 3) )

comme indiqué ici : https://msdn.microsoft.com/fr-fr/library/office/ff196273.aspx

Mais cela me copie que du vide.

Alors que Range("MailingParam") = rw.Cells(1, 1) fonctionne bien, lui, mais il ne copie que la première cellule évidement.

et oui, mailingParam, pour ce test du moins, corresponds bien à une plage de même taille

edit : ah, oui, et évidement, je ne vais pas faire une boucle pour ca. Pour coder crade, je n'ai pas besoin d'aide :p

Nota : je sais qu'avec un fichier c'est mieux, mais il faudrait que je l'écrive depuis le début pour vous. Comme la question est facile, j'espère pouvoir m'en passer !

Bouhouhou, personne ne m'aim aide :'(

Bon, en attendant, j'écris ce truc, mais ce serait très sympa si on pouvait me dire comment le faire en plage.

        Range("MailingParam").Cells(1, 1) = rw.Cells(1, 1)
        Range("MailingParam").Cells(1, 2) = rw.Cells(1, 2)
        Range("MailingParam").Cells(1, 3) = rw.Cells(1, 3)

Notez que j'ai essayé de mon coté, j'ai essayé ca :

        Range("MailingParam") = Range( rw.Cells(1, 1) , rw.Cells(1, 3) )

et ca

        Range("MailingParam") = rw.Range(Cells(1, 1), Cells(1, 3))

et ca

        Range("MailingParam") = rw

Mais ca veut pas

(voilà pourquoi je n'aime pas vba, pour le moindre truc, c'est compliqué ...)

Bonsoir,

Qu'est-ce que MailingTable (sans guillemets) ?

A quoi réfèrent Range("Country") et Range("Code") [pas de point devant] ?

MFerrand a écrit :

Bonsoir,

Qu'est-ce que MailingTable (sans guillemets) ?

C'est la référence du tableau.

En gros, il y a ca au dessus :

MailingTable = Sheets("Parameters").Range("B5").Value

-> et la valeur, c'est ca : "TableauMailingList" ... Ce qui correspond au nom du tableau.

En pratique, cela fait référence à la plage correspondant au tableau, sauf l'entête. (ca évite d'avoir à sauter la première ligne)

MFerrand a écrit :

A quoi réfèrent Range("Country") et Range("Code") [pas de point devant] ?

Ce sont des noms de plages... Pour éviter d'écrire "onglet1!A1" en dur dans la macro ... Mais ca marche pareil.

Il commence à être tard mais je ne comprends pas quel est ton problème, sauf que tes formulations sont peut-être une peu tortueuses...

Si je comprends bien : MailingTable est une variable type String. Tu lui affectes un nom de tableau. Qu'entends-tu par tableau ? S'il s'agit d'un tableau excel, il a un nom, utilisable comme tout nom de plage...

Ensuite, soit rw est une cellule : rw.Cells(1,1) pointe la cellule elle-même.

rw.Cells(1,2) pointe la première cellule à droite.

rw.Cells(1,3) pointe la deuxième cellule à droite

rw.Cells(2,1) pointe la cellule en-dessous.

rw.Cells(0,1) pointe la cellule au-dessus.

Bref à partir d'une seule cellule on peut pointer n'importe quelle plage. Je n'ai indiqué que des définitions de cellules avec Cells mais l'utilisation combinée de Range, Cells, Offset, Resize permet de définir toute plage de toute dimension...

D'où ton passage de 2 à 3 cellules.... !

Cordialement.

Bonjour,

merci pour cette réponse !

mon unique problème, c'est justement de faire référence à une plage de 3 cellules ...

Range(), j'ai essayé, en long en large, je n'ai pas réussi à l'utiliser.

Je vais donc essayer avec offset et resize ...

Rechercher des sujets similaires à "vba copie plage"