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

Résolu
NiGM Messages postés 7 Statut Membre -  
NiGM Messages postés 7 Statut Membre -
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

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. NiGM Messages postés 7 Statut Membre
       
      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
  2. JuanLucas38 Messages postés 59 Statut Membre 4
     
    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
    1. NiGM Messages postés 7 Statut Membre
       
      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
      1. JuanLucas38 Messages postés 59 Statut Membre 4 > NiGM Messages postés 7 Statut Membre
         
        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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. NiGM Messages postés 7 Statut Membre
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. NiGM Messages postés 7 Statut Membre
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      il faut jouer sur la ligne Fin

      Essaies avec
      Fin = Columns("F").Find(what:="", after:=Range("F2"), LookIn:=xlValues).Row - 3
      0
    3. NiGM Messages postés 7 Statut Membre
       
      ah d'accord je vais essayer ce matin, merci
      0
    4. NiGM Messages postés 7 Statut Membre
       
      ça marche!!! Merci beaucoup!
      0