Macro copie donnée sur un nb de ligne fonction de

Résolu/Fermé
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018 - Modifié le 23 mai 2018 à 10:10
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018 - 28 mai 2018 à 08:41
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
A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2018 à 14:03
Bonjour
...."sur un nombre de ligne fonction du remplissage des colonnes E et F <=> sélection (E2:Dx) "... ???
pourquoi colonne F alors si Dx ?
0
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018
Modifié le 24 mai 2018 à 08:34
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 !
0
JuanLucas38 Messages postés 57 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 3 avril 2023 4
24 mai 2018 à 07:47
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é
0
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018
Modifié le 24 mai 2018 à 08:34
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?
0
JuanLucas38 Messages postés 57 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 3 avril 2023 4 > NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018
24 mai 2018 à 20:02
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...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
24 mai 2018 à 09:33
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.
0
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018
25 mai 2018 à 08:52
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 ?...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 mai 2018 à 14:30
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
0
NiGM Messages postés 7 Date d'inscription mercredi 23 mai 2018 Statut Membre Dernière intervention 28 mai 2018
25 mai 2018 à 17:00
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?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 mai 2018 à 17:07
il faut jouer sur la ligne Fin

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