Recopie vers le bas

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #16507651
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" 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.
Bruno RCSC
Le #16509371
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.




michdenis
Le #16510851
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" 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.




Bruno RCSC
Le #16511081
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.
michdenis
Le #16511371
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
Bruno RCSC
Le #16512091
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
michdenis
Le #16513191
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" 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
Frédéric Sigonneau
Le #16517131
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




Bruno RCSC
Le #16517421
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




Publicité
Poster une réponse
Anonyme