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

Recopie vers le bas

9 réponses
Avatar
Bruno RCSC
Bonsoir,

J'utilise le code suivant :
Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
cela me permet de trouver la première cellule vide de ma ligne 3 et d'y
inscrire ma formule.

Ma question : comment recopier cette formule vers le bas, la dernière
cellule à atteindre étant variable ?

Sous excel 2002.

Merci pour votre aide.

BH.

9 réponses

Avatar
michdenis
Suppose X = la première ligne où tu veux copier la formule
suppose Z = est la denière ligne ou ....

x = 5
z = 25

Range("A" & x).FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range("A" & x & ":A" & z).FillDown





"Bruno RCSC" a écrit dans le message de news:
489cae34$0$868$
Bonsoir,

J'utilise le code suivant :
Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
cela me permet de trouver la première cellule vide de ma ligne 3 et d'y
inscrire ma formule.

Ma question : comment recopier cette formule vers le bas, la dernière
cellule à atteindre étant variable ?

Sous excel 2002.

Merci pour votre aide.

BH.
Avatar
Bruno RCSC
Bonjour,

Merci pour cette réponse.
Mais elle ne convient pas.

Je dois recopier la formule à partir d'une cellule qui change tous les
jours.
Or, si X est fixe, Z ne l'est pas forcément (je peux le rendre fixe) mais
surtout, je ne peux pas utiliser Range("A") car ce n'est jamais en colonne
A.

D'autres pistes ?

Merci.
BH

---------------------------------
"michdenis"
Suppose X = la première ligne où tu veux copier la formule
suppose Z = est la denière ligne ou ....

x = 5
z = 25

Range("A" & x).FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range("A" & x & ":A" & z).FillDown




----------------------------
Bonsoir,

J'utilise le code suivant :
Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
cela me permet de trouver la première cellule vide de ma ligne 3 et d'y
inscrire ma formule.

Ma question : comment recopier cette formule vers le bas, la dernière
cellule à atteindre étant variable ?

Sous excel 2002.

Merci pour votre aide.

BH.




Avatar
michdenis
Si tu critiques ma réponse, je vais à mon tour me permettre
de critiquer la formulation de ta question :

Tu peux remplacer ceci :

Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"

Pour copier ta formule sur la première ligne vide
à partir de A3. La méthode End(xlDown) pose problème si
ta cellule suivante est vide A4 sinon c'est OK

Range("A3").End(xlDown).Offset(1).FormulaR1C1 =
"=VLOOKUP(RC2,tablo,6,FALSE)"

Ta question initiale est :
Ma question : comment recopier cette formule vers le bas, la dernière
cellule à atteindre étant variable ?

Sans aucun indice, comment sommes-nous supposés deviner
la dernière cellule de ta colonne ?

Sur ce forum, il y a quelques Mgr mais je n'ai pas encore vu quelqu'un
qui utilisait "Dieu" comme pseudonyme.





"Bruno RCSC" a écrit dans le message de news:
489d55fd$0$899$
Bonjour,

Merci pour cette réponse.
Mais elle ne convient pas.

Je dois recopier la formule à partir d'une cellule qui change tous les
jours.
Or, si X est fixe, Z ne l'est pas forcément (je peux le rendre fixe) mais
surtout, je ne peux pas utiliser Range("A") car ce n'est jamais en colonne
A.

D'autres pistes ?

Merci.
BH

---------------------------------
"michdenis"
Suppose X = la première ligne où tu veux copier la formule
suppose Z = est la denière ligne ou ....

x = 5
z = 25

Range("A" & x).FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range("A" & x & ":A" & z).FillDown




----------------------------
Bonsoir,

J'utilise le code suivant :
Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
cela me permet de trouver la première cellule vide de ma ligne 3 et d'y
inscrire ma formule.

Ma question : comment recopier cette formule vers le bas, la dernière
cellule à atteindre étant variable ?

Sous excel 2002.

Merci pour votre aide.

BH.




Avatar
Bruno RCSC
Bonjour,

Premièrement, ne vous arrivant pas à la cheville, je ne permettrais jamais
de critiquer quoi que ce soit, de surcroit, j'ai un très grand respect pour
tous les contributeurs de forum.

Deuxièmement, une des bases de la communication est le feed-back.
Et là cher Denis, sans offense aucune, le retour ne fonctionne pas (mais
c'est peut être l'aller !!).

J'ai un fichier avec des références en colonne A, j'ai une colonne par jour
dans laquelle je voudrais importer automatiquement les valeurs tous les
jours (qui génèrent un graph dynamique).
Il faut que je trouve la première colonne vide. J'utilise (il y a
certainement plus simple) :
Range("A3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
Je saisis ma formule
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"

Et là, je bloque, je voudrais la recopier vers le bas (en fonction de
l'analyse à faire, il y entre 50 et 200 lignes)
Comment définir la plage ?
Mes quelques connaissances me font utiliser :
der=range("A65535).end(xlUp).row
range("A3:A& der).select
selection.filldown
Mais COMMENT remplacer la lettre A par celle de ma colonne du jour ?



Ensuite, je voudrais pour cette même sélection ne garder que les valeurs et
non la formule.



Peut être est il plus simple de publier un exemple ?



Merci pour votre aide.



BH.
Avatar
michdenis
Ceci te donne la première colonne vide :

Tu adaptes le nom de la feuille ...

Worksheets("Feuil1").Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
Avatar
Bruno RCSC
Merci pour le code.

Voici ce que j'ai fini par réussir à faire et qui semble fonctionner :
Range("D3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range(ActiveCell, ActiveCell.Offset(250, 0)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Application.CutCopyMode = False

Mais 250 n'est pas toujours le nombre de lignes.

BH
Avatar
michdenis
Je peux lire chaque ligne de code mais je ne peux
rien suggérer sans savoir la disposition de ta feuille
et ce que tu veux obtenir !

Tu auras peut être d'autres suggestions si tu publies
un fichier exemple typique de ce que tu veux faire
sur cjoint.com et que tu publies ici l'adresse internet
obtenue.



"Bruno RCSC" a écrit dans le message de news:
489db31a$0$900$
Merci pour le code.

Voici ce que j'ai fini par réussir à faire et qui semble fonctionner :
Range("D3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range(ActiveCell, ActiveCell.Offset(250, 0)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Application.CutCopyMode = False

Mais 250 n'est pas toujours le nombre de lignes.

BH
Avatar
Frédéric Sigonneau
Une autre approche :

Sub essai()
Dim NbLi
NbLi = Range("A3").CurrentRegion.Rows.Count
With Range("A3").End(xlToRight)(, 2).Resize(NbLi)
.Formula = "=VLOOKUP(RC2,tablo,6,FALSE)"
.Value = .Value
End With
End Sub

CurrentRegion peut comporter quelques inconvénients : cette plage prend en
compte des cellules qui ont pu être utilisées ou mises en forme et ne le sont
plus. La plage traitée peut donc être plus importante que la plage réellement
utile. En principe un enregistrement réinitialise tout ça, mais..
A tester sur tes données à toi.
Au minimum, remplace ta boucle Do..Loop par
Range("A3").End(xlToRight)(, 2)
pour repérer la première cellule vide à droite de A3, ne serait-ce que parce
qu'une ligne de code en remplace 3.
Evite aussi, quand tu le peux, de travailler sur des sélections. Le code est
plus "bavard" et plus lent, et l'écran a la danse de St Guy pendant l'exécution
(même si ça se soigne très bien).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bruno RCSC a écrit :
Merci pour le code.

Voici ce que j'ai fini par réussir à faire et qui semble fonctionner :
Range("D3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range(ActiveCell, ActiveCell.Offset(250, 0)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Application.CutCopyMode = False

Mais 250 n'est pas toujours le nombre de lignes.

BH




Avatar
Bruno RCSC
Merci beaucoup Frédéric.

- le code fonctionne parfaitement quelque soit le nombre de lignes de mon
tableau, j'ai ajouté Resize(NbLi - 2) correspondant à la ligne 1 et 2 de la
plage CurrentRegion.
- j'essaierai de mettre en oeuvre vos conseils pertinents et pédagogiques.
Pour le remplacement de ma boucle,j'ai compris. Pour le reste, j'ai du
travail...

BH


"Frédéric Sigonneau" a écrit dans le message de news:
e%238qzXu%
Une autre approche :

Sub essai()
Dim NbLi
NbLi = Range("A3").CurrentRegion.Rows.Count
With Range("A3").End(xlToRight)(, 2).Resize(NbLi)
.Formula = "=VLOOKUP(RC2,tablo,6,FALSE)"
.Value = .Value
End With
End Sub

CurrentRegion peut comporter quelques inconvénients : cette plage prend en
compte des cellules qui ont pu être utilisées ou mises en forme et ne le
sont plus. La plage traitée peut donc être plus importante que la plage
réellement utile. En principe un enregistrement réinitialise tout ça,
mais..
A tester sur tes données à toi.
Au minimum, remplace ta boucle Do..Loop par
Range("A3").End(xlToRight)(, 2)
pour repérer la première cellule vide à droite de A3, ne serait-ce que
parce qu'une ligne de code en remplace 3.
Evite aussi, quand tu le peux, de travailler sur des sélections. Le code
est plus "bavard" et plus lent, et l'écran a la danse de St Guy pendant
l'exécution (même si ça se soigne très bien).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bruno RCSC a écrit :
Merci pour le code.

Voici ce que j'ai fini par réussir à faire et qui semble fonctionner :
Range("D3").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC2,tablo,6,FALSE)"
Range(ActiveCell, ActiveCell.Offset(250, 0)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Application.CutCopyMode = False

Mais 250 n'est pas toujours le nombre de lignes.

BH