Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro pour Copier/Coller une cellule dans une zone

4 réponses
Avatar
douglasmartin79
Bonjour

Je r=E9alise une macro qui cr=E9e une formule dans un tableau, =E0 la 1ere
ligne d'une colonne, et je voudrais que ce calcul s'applique =E0 chaque
ligne du tableau. Les donn=E9es de mon tableau seront import=E9es d'un
autre systeme gr=E2ce =E0 cette m=EAme macro, elles seront donc
diff=E9rentes =E0 chaque importation (le nombre de lignes change
=E9galement). Comment faire alors pour que les formules s'appliquent =E0
tout le tableau et s'arretent =E0 la derniere ligne?

Merci

4 réponses

Avatar
Daniel
Bonjour.
Si j'ai bien compris, la macro suivante doit le faire :

Sub test()
Dim DerLigne As Long
DerLigne = Range("a1").SpecialCells(xlCellTypeLastCell).Row
ActiveCell.Copy Range(ActiveCell.Offset(1, 0), _
ActiveCell.Offset(DerLigne - ActiveCell.Row, 0))
End Sub

Cordialement.
Daniel
a écrit dans le message de news:

Bonjour

Je réalise une macro qui crée une formule dans un tableau, à la 1ere
ligne d'une colonne, et je voudrais que ce calcul s'applique à chaque
ligne du tableau. Les données de mon tableau seront importées d'un
autre systeme grâce à cette même macro, elles seront donc
différentes à chaque importation (le nombre de lignes change
également). Comment faire alors pour que les formules s'appliquent à
tout le tableau et s'arretent à la derniere ligne?

Merci
Avatar
Balain
disait:
Bonjour

Je réalise une macro qui crée une formule dans un tableau, à la 1ere
ligne d'une colonne, et je voudrais que ce calcul s'applique à chaque
ligne du tableau. Les données de mon tableau seront importées d'un
autre systeme grâce à cette même macro, elles seront donc
différentes à chaque importation (le nombre de lignes change
également). Comment faire alors pour que les formules s'appliquent à
tout le tableau et s'arretent à la derniere ligne?

Merci
Bonjour,


Il faudrait un peu plus de précisions pour ton problème mais imaginons
par exemple que tu as un tableau qui contient en colonne A les données
et qu'en colonne B tu souhaites positionner ta formule ou bien le
résultat de ton calcul : disons 4 fois la valeur en A.
Tu peux faire une boucle for each jusqu'à trouver une cellule
blanche dans la colone A

For Each truc In Range("A1", Range("A1").End(xlDown))
truc.Offset(0, 1).Value = truc.Value * 4
Next truc

Balain

Avatar
douglasmartin79
Merci Daniel,
ça marche impeccable, lorsque je rajoute des lignes à mon tableau,
les formules s'appliquent à tout le tableau, par contre truc pas trop
logique, lorsque je réduis le nombre de lignes, la formule s'applique
jusqu'aux cases de la liste précédente la plus longue.

cad si j'applique la macro avec un tableau de 50 lignes, la formule
s'applique bien jusqu'à la ligne 50, si je réessaye avec un tableau
de 40 lignes, la formule s'applique jusqu'à la ligne 50!

Suis je clair? comment résoudre ce problème

Merci
Avatar
Daniel
Oui. C'est l'ennui de "SpecialCells". Si tu effaces le tableau ou une
partie, essaie d'enregistrer avant de lancer la macro.
Sinon, modifie la macro comme suit :

Sub test()
Dim DerLigne As Long, var As Range
DerLigne = ActiveCell.Offset(65536 - ActiveCell.Row, 1).End(xlUp).Row
ActiveCell.Copy Range(ActiveCell.Offset(1, 0), _
ActiveCell.Offset(DerLigne - ActiveCell.Row, 0))
End Sub

En supposant que la colonne à droite de la colonne des formules correspond à
une colonne de ton tableau.
Daniel
a écrit dans le message de news:

Merci Daniel,
ça marche impeccable, lorsque je rajoute des lignes à mon tableau,
les formules s'appliquent à tout le tableau, par contre truc pas trop
logique, lorsque je réduis le nombre de lignes, la formule s'applique
jusqu'aux cases de la liste précédente la plus longue.

cad si j'applique la macro avec un tableau de 50 lignes, la formule
s'applique bien jusqu'à la ligne 50, si je réessaye avec un tableau
de 40 lignes, la formule s'applique jusqu'à la ligne 50!

Suis je clair? comment résoudre ce problème

Merci