OVH Cloud OVH Cloud

Existe-t-il une solution rapide pour recopier vers le bas une ligne de formule en VBA ?

22 réponses
Avatar
G. L
Bonsoir,

Existe-t-il une solution rapide pour recopier vers le bas une ligne de
formule en VBA ?

De la colonne AU à la colonne CL j'ai des formules diverses dont une
majorité de RechercheV, par macro je recopie toutes ces formules jusqu'à la
dernière ligne de la colonne D.

Tout ce passe bien tant que je ne dépasse pas 2000 lignes après j'ai un
message « sélection trop grande » J'ai contourné le problème en sectionnant
la copie par groupe de 11 colonnes mais dans ce cas le problème se pose à
nouveau avant d'arriver à la fin.

J'ai essayé avec une boucle de faire la copie ligne à ligne ou par paquet de
qqs lignes mais c'est très long car je peux avoir jusqu'à 20 - 25000 lignes.



Ce qui est utilisé :

ligne = Range("D65536").End(xlUp).Row

Range("AU40:CL" & ligne).Copy

Range("AU40:CL" & ligne).PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False



Merci d'avance et bon WE

Cordialement

Gérard

2 réponses

1 2 3
Avatar
G. L
Bonjour,
Merci, doucement j'apprends et j'aime ça !
Cordialement
Gérard

"abcd" a écrit dans le message de
news:
oui bien sûr, il n'y a pas de raison:

à la main: nommer la zone
(la sélectionner une première fois, puis dans la zone nom taper un nom
explicite par exemple "monchoix" et désormais la zone est disponible
dans la liste déroulante : on peut tout resélectionner d'un coup, et il
suffit de changer la formule d'une seule case pour la propager

en vesion macro, c'est pareil, il s'agit d'entrer une formule relative
dans plusieurs cellule:
exemple
Union(Range("A15:C18"), Range("A1:C6")).Formula = "Ñ"


mais là il vaut mieux tester un coup pour vérifier que la première
cellule (qui correspond à la formule tapée avant propagation) est plus
dure à connaître: dans l'exemple ci-dessus j'ai volontairement mis le
A15 avant le A1. Ainsi le D1 s'applique à A15 et non A1 (et bien sûr
erreur en A1:C6 pusiqu'il n'y a pas de cellule au dessus)


Union( Range("A1:C6"),Range("A15:C18")).Formula = "Ñ"
donnerait un résultat correct juste en inversant l'ordre (Ñ s'applique
à A1 puis se propage).

encore une fois: inutile d'aller mettre une macro si la formule est
succeptible de changer. Autant la taper une bonne fois pour toute avec
l'assistance visuelle. (le nommage d'une zone est fait entre autre pour
ça, resélectionner rapidement les cellules concernées)


Avatar
G. L
Bonjour,

Penser pouvoir passer du camp des nuls au camp des hyper qualifiés que vous
êtes, crée chez moi un sentiment de honte mêlée d'émerveillement, un rêve
quoi !

Il me suffirait peut être de faire la promenade proposée par twinley (le
22/6 15:03) oui mais, serait ce mon choix ? ;)))

Merci pour la proposition ;)

Cordialement

Gérard




"jps" <enlevezd' a écrit dans le message de
news:%23%

"G. " <sugere~KillPub~@online.fr> a écrit dans le message de news:

Bonjour Daniel,

Merci bien pour la réponse que je vais mettre en place de ce pas.

Effectivement ici personne ne tue ! si ce n'est le moral du nul que je
suis
face à performance et pertinence des réponses faites à des questions pas
toujours faciles à comprendre.
rassure-toi, gérard, tu n'es pas le seul

Encore bravo à ce groupe qui sait bien vivre (Liège 2005 ;) ) et fait
bien
vivre le groupe !
par contre, lors des manifestations organisées par le C.O.I.N. (Liège il y

a

quelques jours et bien d'autres les années précédentes), sache que les
nuls

changent de camp et il ne tient qu'à toi de le vérifier en venant au dîner
de fin d'année qui, tradiitonnellement, a lieu à Paris chaque mi-décembre
Cordialement
itou

Gérard
jps




"Daniel" a écrit dans le message de
news:OQ4TD%
Et dim Ligne as long ; sinon, je vais me faire tuer.
Daniel
"Daniel" a écrit dans le message de news:

Bonsoir.
A tester :

Dim Ligne As Integer, Tabl(44) As String, col As Integer, i As
Integer


Ligne = Range("D65536").End(xlUp).Row
col = Range("AU1.CL1").Columns.Count
For i = 0 To col - 1
Tabl(i) = Range("AU1").Offset(0, i).Formula
Next i
For j = 1 To Ligne
For i = 0 To col - 1
Var = Range("AU" & j).Offset(0, i).Address
Range("AU" & j).Offset(0, i).Formula = Tabl(i)
Next i
Next j

Cordialement.
Daniel
"G. " <sugere~KillPub~@online.fr> a écrit dans le message de
news:



Bonsoir,

Existe-t-il une solution rapide pour recopier vers le bas une ligne
de





formule en VBA ?

De la colonne AU à la colonne CL j'ai des formules diverses dont une
majorité de RechercheV, par macro je recopie toutes ces formules
jusqu'à



la
dernière ligne de la colonne D.

Tout ce passe bien tant que je ne dépasse pas 2000 lignes après j'ai
un
message « sélection trop grande » J'ai contourné le problème en
sectionnant
la copie par groupe de 11 colonnes mais dans ce cas le problème se
pose
à



nouveau avant d'arriver à la fin.

J'ai essayé avec une boucle de faire la copie ligne à ligne ou par
paquet



de
qqs lignes mais c'est très long car je peux avoir jusqu'à 20 - 25000
lignes.



Ce qui est utilisé :

ligne = Range("D65536").End(xlUp).Row

Range("AU40:CL" & ligne).Copy

Range("AU40:CL" & ligne).PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks _

:úlse, Transpose:úlse

Application.CutCopyMode = False



Merci d'avance et bon WE

Cordialement

Gérard



















1 2 3