Code VBA pour projet formulaire de demande

Résolu
Bonsoir à tous,

Je me suis mis à créer un formulaire pour une demande. J'ai joint un fichier avec des exemples aléatoires pour mieux visualiser : http://cjoint.com/14au/DHnwPzzXHX0.htm
Le but étant : En ouvrant le fichier, la personne clique sur le bouton "Créer une demande". Apparaît alors une fenêtre (dont j'ai brièvement dessiner l'aspect sur cette même feuille). La personne choisit un SEUL essai puis clique sur OK. Se copie/colle alors la plage de cellules en rapport avec cette essai constituée de menus déroulants. Et ainsi de suite, en ajoutant chaque essai l'un en dessous de l'autre avec un décalage de 1 ou 2 lignes pour un peu de clarté.

Pour les détails, je ferai en sorte que le fichier s'ouvre sur cette feuille de demande. Je masquerai la feuille Listes. La fenêtre est à créer avec un userform.
Ma question est : comment intégrer le code de copie/colle de la plage dans le userform ?

Merci d'avance pour l'aide que vous pourriez m'apporter.

D277

5 réponses

  1. Modérateur
    Bonjour,

    La première étape consiste à "dessiner" votre UserForm.
    Pour cela, rien de compliqué, nous allons vous laisser le faire.

    Si vous n'avez jamais mis les pieds dans l'éditeur VBA, voyez cette fiche pratique au préalable.
    0
    1. Bonsoir,

      Oui en effet, j'avais oublié de le dessiner.
      Je l'ai donc créé : https://www.cjoint.com/?DHowBC2Mkkc

      J'ai aussi avec l'enregistreur de macro (cela devrait suffire), écrit le code pour la copie/colle d'un des essais. Je pense avoir également le code pour que chaque copie/colle se fasse l'une en-dessous de l'autre.
      Pour ce qui du bouton annuler, il suffira de mettre Unload "Nom_du_userform" dans le code du Commandbutton.
      J'ai déjà travaillé avec le VBA, mais je ne sais pas comment intégrer la notion de choix avec les checkbox puis le code de copie/colle en fonction de l'essai choisi.
      Dois-je intégrer le code sur les checkbox ?

      Merci

      D277
      0
      1. Bonjour,

        J'ai donc créer sur la feuille "Listes" tous les renseignements avec les listes déroulantes. Jusque là, facile.
        Ensuite, via un userform, j'offre la possibilité de choisir un essai et par macro, la plage correspondante à l'essai choisi se copie/colle sur la feuille "Formulaire". Mon code pour l'instant lié à un optionbutton :

        Private Sub OptionButton1_Click()		
        Range("B12:D18").Select
        Selection.Copy
        Sheets("Formulaire").Select
        ActiveSheet.Paste
        End Sub


        Le truc, c'est que j'aimerai bidouiller le code pour que le premier essai choisi se mette disons dans la colonne B, à la rigueur en cellule B10. Et que les autres essais choisis (même si ils sont équivalents au premier choisi ; par exemple 2 fois "Acier") se mettent en-dessous alignés avec le précédent dans la colonne B et si possible en laissant une ligne de décalage pour laisser un peu d'espace.
        J'ai cette bribe de code :

        Sheets("Formulaire").Select
        Range("B65000").Select
        Selection.End(xlUp).Select

        Mais je n'arrive pas à obtenir ce que je voudrais. Y-a-t-il moyen d'arranger le code ?
        Lien vers fichier : https://www.cjoint.com/?DHumU5TVYzU
        Merci.
        Bonne journée.

        D277
        0
        1. Modérateur
          Bonjour,

          Avec un peu de retard....

          Le code du module1 :
          Option Explicit
          
          'La variable publique Choix est alimentée par un clic dans un optionbutton cf code de l'userform
          'elle sert à passer en paramètre de la procédure copier_coller le choix de l'utilisateur
          Public Choix As String
          
          Sub Copier_coller(strChoix As String)
          Dim maSelection As Range, DernLigne As Long
          
          With Sheets("Listes")
            Select Case strChoix
              Case "Acier"
                Set maSelection = .Range("B12:D18")
                  
              Case "Bois"
                Set maSelection = .Range("B20:D24")
              
              Case "Plastique"
                Set maSelection = .Range("B26:D30")
              
              Case "Titane"
                Set maSelection = .Range("B32:D38")
              
              Case Else
                MsgBox "Merci d'effectuer un choix en cliquant sur un des boutons d'options"
                Exit Sub
            End Select
          'on copie :
          maSelection.Copy
          End With
          With Sheets("Formulaire")
            .Select
            'on calcule la dernière ligne
            DernLigne = .Range("C" & Rows.Count).End(xlUp).Row
            'cas de la première utilisation
            If DernLigne = 1 Then DernLigne = 10
            .Range("B" & DernLigne + 2).Select
            .Paste
          End With
          End Sub 


          Le code du module de l'userform1 :
          Private Sub CommandButton4_Click()
          If Choix <> "" Then Call Copier_coller(Choix)
          End Sub
          
          Private Sub OptionButton1_Click()
          Choix = "Acier"
          End Sub
          
          Private Sub OptionButton2_Click()
          Choix = "Bois"
          End Sub
          
          Private Sub OptionButton3_Click()
          Choix = "Plastique"
          End Sub
          
          Private Sub OptionButton5_Click()
          Choix = "Titane"
          End Sub
          


          Le classeur exemple
          Cordialement,
          Franck
          0
          1. Bonjour pijaku,

            Rien à dire à part un grand merci.
            C'est juste parfait ;)

            Bonne journée

            D277
            0
            1. Modérateur
              Bonjour,

              Mais de rien.

              Bonne journée à toi également
              0