Macro copie donnée sur un nb de ligne fonction de [Résolu/Fermé]

Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
Bonjour,

Je souhaiterais créer une macro qui me permette de copier la première ligne de saisie des colonnes A à D (A2 : D2) sur un nombre de ligne fonction du remplissage des colonnes E et F <=> sélection (E2:Dx)

J'ai plusieurs hypothèse de code VBA :
-une boucle? mais laquelle (While, For...) --> si A2:D2 est remplie (non vide) copier coller la ligne du dessus et ce jusqu'à rencontrer une cellule vide sur les colonnes E et D
-définir une variable Dim E,F= "Sélection de E2:D2 jusqu'à la dernière ligne (Sélection,Sélection.End(xlDown))
--> mais je ne sais pas si l'on peut définir une variable par une sélection...

Bref je suis un peu perdue dans ce code VBA...

Est-ce que vous auriez des pistes, un code à me proposer?

Je vous remercie par avance
Afficher la suite 

3 réponses

Messages postés
16002
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
5 décembre 2019
2833
0
Merci
Bonjour
...."sur un nombre de ligne fonction du remplissage des colonnes E et F <=> sélection (E2:Dx) "... ???
pourquoi colonne F alors si Dx ?
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
oui pardon E2:Fx ! Merci michel je me suis trompée.
Idem pour les lignes en dessous :
"cellule vide sur les colonnes E et D" --> E et F!
"Sélection de E2:D2 jusqu'à la dernière ligne" --> E2:F2 !
Messages postés
47
Date d'inscription
mardi 22 mai 2018
Statut
Membre
Dernière intervention
8 juillet 2018
0
Merci
Bonjour,

Il n'y a aucun problème pour utiliser une variable dans une sélection.

Si ta variable est "ligne" et ta colonne est "E" dans ce cas dans ta sélection tu utilisera la syntaxe suivante :

range("E" & ligne).select.


Si "ligne" vaut 4 dans ce cas le range "E4" sera sélectionné
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
Merci juan pour ta réponse. Je dois donc écrire :
Dim colonnesEF As Integer (ou Long?)
colonnesEF=Range("E"&ligne).select

Après avoir définit une variable je n'ai pas à faire marcher une boucle?
JuanLucas38
Messages postés
47
Date d'inscription
mardi 22 mai 2018
Statut
Membre
Dernière intervention
8 juillet 2018
> NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
Pour Nigm :
Integer suffit largement

Pour michel_m
C'est vrai que je ne l’utilise pas c'était pour donner seulement un exemple. Mais la prochaine fois je m'abstiendrait car ça peut prêter à confusion. La preuve...
michel_m
Messages postés
16002
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
5 décembre 2019
2833 -
bonjour,
Pour jeanlucas:
En VBA, on évite d'utiliser Select qui entraine des changements d'écran pénibles et lents

Pour Nigm:
merci de me dite où tu veux copier A2:D2 et que copies tu: les données, les formats etc.
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
Sur la ligne A2:D2 je copie 4 données (date, lot, origine...) et sur E2:F2 2 mesures.
J'ai plusieurs mesures qui correspondent aux mêmes données que mes 2 premières mesure.
Donc pour éviter de réécrire les 4 premières données, j'aimerais un code qui me permette de les copier ligne après ligne lorsque je finis de saisir mes mesures (dans les colonnes E et F).
Est-ce que c'est un peu plus clair michel_m ?...
Messages postés
16002
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
5 décembre 2019
2833
0
Merci
Bonjour
Est-ce que c'est un peu plus clair michel_m ?...

pas sûr, mais peut-être que ce code te conviendra

Option Explicit
'-------------------------------------------
Sub vvvv()
Dim Fin As Integer
Fin = Columns("F").Find(what:="", after:=Range("F2"), LookIn:=xlValues).Row - 1
Range("A3").Resize(Fin, 4) = Range("A2:D2").Value
End Sub
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
Merci beaucoup! Le code marche!
La seule chose c'est qu'il continue à me copier les données 2 lignes en dessous la dernière saisie de mesure... pourquoi cela ne s'arrête pas à la même ligne que la dernière saisie de mesure?
michel_m
Messages postés
16002
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
5 décembre 2019
2833 -
il faut jouer sur la ligne Fin

Essaies avec
Fin = Columns("F").Find(what:="", after:=Range("F2"), LookIn:=xlValues).Row - 3
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
ah d'accord je vais essayer ce matin, merci
NiGM
Messages postés
7
Date d'inscription
mercredi 23 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018
-
ça marche!!! Merci beaucoup!