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

10 réponses

1 2 3
Avatar
LSteph
Bonjour, Daniel,

Sans Macro:
Si la colonne de données juste à gauche de la première cellule où l'on a
entré une formule ,
ou idem pour plusieurs formules d'un coup ne comporte pas de vides (ni
fusions ni cadres)

Ex:
Données Formule Formule Formule+
Données
Données
Données
Données

Et avec la souris faire surgir la petite croix noire + en bas à droite de la
cellule et doubleclic dessus.

lSteph

"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








Avatar
abcd
non plus:
dans la zone nom taper A1:A10;C1:C10 (par exemple) et une zone
multiple est sélectionnée.

et qui plus est si ces colonnes sont changées souvent, on peut leur
donner un nom plus explicite à chosiir dans la liste déroulante. Bref,
la seule "difficulté" est de sélectionner les cellules à remplir...

hum, même s'il y a 44 colonnes...
enfin bon, tu as les deux méthodes, à toi d'en user.
Avatar
Daniel
Bonjour.
J'aime beaucoup ce truc, c'est très "magique", mais dans ce cas précis, la
colonne de données n'est pas adjacentes aux colonnes de formules.
Cordialement.
Daniel
"LSteph" a écrit dans le message de news:
uAC$
Bonjour, Daniel,

Sans Macro:
Si la colonne de données juste à gauche de la première cellule où l'on a
entré une formule ,
ou idem pour plusieurs formules d'un coup ne comporte pas de vides (ni
fusions ni cadres)

Ex:
Données Formule Formule Formule+
Données
Données
Données
Données

Et avec la souris faire surgir la petite croix noire + en bas à droite de
la cellule et doubleclic dessus.

lSteph

"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












Avatar
LSteph
Oui pardon ,
je voulais dire Bonjour à tous
et en réponse à G L @ rumeur ,

J'aime beaucoup ce truc,
moi aussi!

colonne de données n'est pas adjacente
C'est un choix pas insurmontable


Pour ce qui est du timing testé 1 ou 2 secondes pour 11 colonnes sur les
65 millle... lignes

A+

lSteph

"Daniel" a écrit dans le message de news:

Bonjour.
J'aime beaucoup ce truc, c'est très "magique", mais dans ce cas précis, la
colonne de données n'est pas adjacentes aux colonnes de formules.
Cordialement.
Daniel
"LSteph" a écrit dans le message de news:
uAC$
Bonjour, Daniel,

Sans Macro:
Si la colonne de données juste à gauche de la première cellule où l'on a
entré une formule ,
ou idem pour plusieurs formules d'un coup ne comporte pas de vides (ni
fusions ni cadres)

Ex:
Données Formule Formule Formule+
Données
Données
Données
Données

Et avec la souris faire surgir la petite croix noire + en bas à droite de
la cellule et doubleclic dessus.

lSteph

"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
















Avatar
G. L
Pour info :
Je ne peux pas "traiter" dans la feuille car souvent les colonnes à gauche
de la colonne AU sont mises à jour au gré du besoin par requètes SQL c'est
pour ça que le nombre de ligne n'est pas constant.
Je crois que la solution de Daniel doit satisfaire mon besoin.
Je trouve la discussion très instructive.
Merci à tous.
Cordialement
Gérard



"Daniel" a écrit dans le message de
news:%
Bonjour.
Le problème, c'est qu'il y a 44 colonnes et qu'il faut répéter autant de
fois la manip.
Cordialement.
Daniel
"abcd" a écrit dans le message de news:

je rappelle au passage que si la plage à sélectionnoer est grande et
remplie ed blancs (on ne peut alors pas utiliser CTRL+flèche) alors on
peut choisir la sélection en tapant son nom

il y a une "zone nom" pour cela

donc on peut par exemple directement entrer A1:B10000
(par exemple)






Avatar
G. L
Bonjour Steph
Je ne connaissais pas, pourtant les astuces qui simplifient, par paresse je
les recherche en premier ;))
Cordialement
Gérard


"LSteph" a écrit dans le message de
news:uAC$
Bonjour, Daniel,

Sans Macro:
Si la colonne de données juste à gauche de la première cellule où l'on a
entré une formule ,
ou idem pour plusieurs formules d'un coup ne comporte pas de vides (ni
fusions ni cadres)

Ex:
Données Formule Formule Formule+
Données
Données
Données
Données

Et avec la souris faire surgir la petite croix noire + en bas à droite de
la

cellule et doubleclic dessus.

lSteph

"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












Avatar
G. L
Bonjour,
Est-ce possible de l'automatiser ?
Car le rafraichissement est assez fréquent.
Cordialement
Gérard


"abcd" a écrit dans le message de
news:
je rappelle au passage que si la plage à sélectionnoer est grande et
remplie ed blancs (on ne peut alors pas utiliser CTRL+flèche) alors on
peut choisir la sélection en tapant son nom

il y a une "zone nom" pour cela

donc on peut par exemple directement entrer A1:B10000
(par exemple)


Avatar
abcd
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
Bonsoir Daniel,

Encore merci ! intégrée dans ma macro cette procédure est super !
Tu dis plus simple mais je trouve la formule du tableau (après coup!!
évidemment) très très bien.
C'est toujours plus facile en partant de la réponse ;))
Cordialement
Gérard


"Daniel" a écrit dans le message de
news:%
Bonjour.
En fait, on pouvait faire plus simple, mais j'avais envie de me faire
plaisir avec un tableau.
Cordialement.
Daniel
"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.

Encore bravo à ce groupe qui sait bien vivre (Liège 2005 ;) ) et fait
bien
vivre le groupe !

Cordialement

Gérard




"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




















Avatar
jps
"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