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. 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
  2. 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,

      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. 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. 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