Créer un userform réutilisable

Résolu
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai créer un userform afin qu,il soit plus simple pour les utilisateurs d'entrer des données.
Quand ils entrent les données elles vont se placer dans divers celles de ma feuille de calcul.
à chaque jour il faut entrer les mêmes types de données mais on de doit pas midifier celles de la veille...puis-je toujours utiliser le même?

merci à l'avance
Mélanie

7 réponses

Résumé de la discussion

Un userform Excel est conçu pour saisir des données récurrentes et les répartir dans des cellules de feuilles distinctes sans modifier les saisies précédentes. Une solution préconisée consiste à supprimer les TextBox_Change et à n'utiliser que le bouton CmdOK_Click, en assignant TextBox1 à D10, TextBox2 à E10, TextBox3 à D11 sur les feuilles pesées et Tournée. En parallèle, il faut coordonner l'épissage des dates et le calcul des lignes entre les feuilles 'pesées' et 'Tournée' afin que chaque saisie écrive sur la ligne correspondante sans modifier les précédentes.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Chris 94 Messages postés 1937 Date d'inscription   Statut Modérateur Dernière intervention   7 536
     
    Up
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut mélanie,
    Merci Chris pour la remontée.
    Oui il est possible d'utiliser le même. C'est même fortement recommandé.

    Supposons que sur ton userform, tu disposes de 5 textbox (TextBox1, TextBox2, TextBox3, TextBox4, TextBox5) et d'un bouton de commande (CommandButton1) qui te sert à valider.
    Tu ouvres ton classeur, saisie tes données dans les textbox et clic sur valider.
    Tes données sont transférées, grâce à ton code, en feuille : Feuil2 cellules : de A1 à E1.
    Le lendemain, tu ouvres ton classeur, saisie tes textbox, et, en cliquant sur valider, tu souhaites que tes données soient enregistrées de A2 à E2. Tu ne travailles donc plus sur des adresses de cellules fixes, mais sur les cellules se situant sur la première ligne vide de A à E.
    OK avec ceci?
    Bon alors le code de ce que je viens de décrire serait :
    Private Sub CommandButton1_Click()
    Dim Lign As Long
    
    With Sheets("Feuil2")
        Lign = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Cells(Lign, 1) = TextBox1
        .Cells(Lign, 2) = TextBox2
        .Cells(Lign, 3) = TextBox3
        .Cells(Lign, 4) = TextBox4
        .Cells(Lign, 5) = TextBox5
    End With
    End Sub

    Code dans lequel on peux intégrer une boucle, pour le cas ou on aurait 26 textbox qui renverraient, dans le bon ordre, leurs donénes dans les 26 1eres colonnes de la feuil2 :
    Private Sub CommandButton1_Click()
    Dim Lign As Long
    Dim Col As Byte
    
    With Sheets("Feuil2")
        Lign = .Range("A" & Rows.Count).End(xlUp).Row + 1
        For Col = 1 To 26 'dans le cas de 26 colonnes!!!!!
            .Cells(Lign, Col) = Me.Controls("TextBox" & Col)
        Next Col
    End With
    End Sub
    0
  3. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour Frank,
    Désolé du délai, dans mon suivi de sujet je ne voyais que j'avais une réponse. alors premièrement un énorme merci! Je commence en VbA et je dois dire qu'à date je semble pas comprendre grand chose et ça m'énerve un peu!!! Alors présentement J'ai ceci

    Private Sub CmdOK_Click()
    Sheets("tournée").Range("D10").Value = TextBox1.Value
    Sheets("Tournée").Range("E10").Value = TextBox2.Value
    Sheets("Tournée").Range("D11").Value = TextBox3.Value
    Sheets("Tournée").Range("E11").Value = TextBox4.Value
    Sheets("pesées").Range("c5").Value = TextBox5.Value
    Sheets("pesées").Range("D5").Value = TextBox6.Value
    Sheets("pesées").Range("e5").Value = TextBox7.Value
    Sheets("pesées").Range("f5").Value = TextBox8.Value
    Sheets("pesées").Range("g5").Value = TextBox9.Value
    Sheets("pesées").Range("h5").Value = TextBox10.Value
    Sheets("pesées").Range("i5").Value = TextBox11.Value
    Sheets("pesées").Range("j5").Value = TextBox12.Value
    Unload Me

    End Sub

    Private Sub TextBox1_Change()
    Sheets("Tournée").Range("D10").Value = TextBox1.Value
    End Sub

    Private Sub TextBox2_Change()
    Sheets("Tournée").Range("E10").Value = TextBox2.Value
    End Sub

    Private Sub TextBox3_Change()
    Sheets("Tournée").Range("D11").Value = TextBox3.Value
    End Sub

    Private Sub TextBox4_Change()
    Sheets("Tournée").Range("E11").Value = TextBox4.Value
    End Sub

    Private Sub TextBox5_Change()
    Sheets("pesées").Range("c5").Value = TextBox5.Value
    End Sub

    Private Sub TextBox6_Change()
    Sheets("pesées").Range("D5").Value = TextBox6.Value
    End Sub

    Private Sub TextBox7_Change()
    Sheets("pesées").Range("e5").Value = TextBox7.Value
    End Sub

    Private Sub TextBox8_Change()
    Sheets("pesées").Range("f5").Value = TextBox8.Value
    End Sub

    Private Sub TextBox9_Change()
    Sheets("pesées").Range("g5").Value = TextBox9.Value
    End Sub
    Private Sub TextBox10_Change()
    Sheets("pesées").Range("h5").Value = TextBox10.Value
    End Sub

    Private Sub TextBox11_Change()
    Sheets("pesées").Range("i5").Value = TextBox11.Value
    End Sub

    Private Sub TextBox12_Change()
    Sheets("pesées").Range("j5").Value = TextBox12.Value
    End Sub
    Private Sub CmdAnnuler_Click()
    Unload Me
    End Sub;

    Si je comprends bien j'enlève tout ça?!
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,
      Que veux tu exactement?
      Dans ton code, je vois deux procédures différentes :
      1- les "textbox_change" => envoient pendant la saisie, en direct live, les infos saisies dans les textbox, dans les cellules, au fur et à mesure de la saisie.
      2- le "CmdOK_Click" => envoie les données saisies dans les textbox au clic sur le bouton.
      Je pense donc :
      - que tu dois supprimer tous les TextBox_Change
      - que tu dois adapter le code de ton bouton de commande.
      Pour l'instant ne conserve que :
      Private Sub CmdOK_Click() 
      Sheets("tournée").Range("D10").Value = TextBox1.Value 
      Sheets("Tournée").Range("E10").Value = TextBox2.Value 
      Sheets("Tournée").Range("D11").Value = TextBox3.Value 
      Sheets("Tournée").Range("E11").Value = TextBox4.Value 
      Sheets("pesées").Range("c5").Value = TextBox5.Value 
      Sheets("pesées").Range("D5").Value = TextBox6.Value 
      Sheets("pesées").Range("e5").Value = TextBox7.Value 
      Sheets("pesées").Range("f5").Value = TextBox8.Value 
      Sheets("pesées").Range("g5").Value = TextBox9.Value 
      Sheets("pesées").Range("h5").Value = TextBox10.Value 
      Sheets("pesées").Range("i5").Value = TextBox11.Value 
      Sheets("pesées").Range("j5").Value = TextBox12.Value 
      Unload Me 
      End Sub 
      
      Private Sub CmdAnnuler_Click() 
      Unload Me 
      End Sub


      Ensuite, explique toi...
      1ère utilisation : TextBox1 dans D10, TextBox2 dans E10, TextBox3 dans D11 etc...
      2ème utilisation : ???
      3ème utilisation : ???
      0
    2. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour,
      ça c'est super ça fonctionne. maintenant je veux prendre le même user form et la fois suivante que les données se mettent comme suit :

      Sheets("tournée").Range("F10").Value = TextBox1.Value
      Sheets("Tournée").Range("G10").Value = TextBox2.Value
      Sheets("Tournée").Range("F11").Value = TextBox3.Value
      Sheets("Tournée").Range("G11").Value = TextBox4.Value
      Sheets("pesées").Range("c8").Value = TextBox5.Value
      Sheets("pesées").Range("D8").Value = TextBox6.Value
      Sheets("pesées").Range("e8").Value = TextBox7.Value
      Sheets("pesées").Range("f8").Value = TextBox8.Value
      Sheets("pesées").Range("g8").Value = TextBox9.Value
      Sheets("pesées").Range("h8").Value = TextBox10.Value
      Sheets("pesées").Range("i8").Value = TextBox11.Value
      Sheets("pesées").Range("j8").Value = TextBox12.Value
      et ainsi de suite...
      un énorme merci d'avance! j'étais en train de désepérer!
      Mélanie
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      1- Sheets("pesées") tu passes de la ligne 5 à la ligne 8? Est ce normal? Qui aura t'il entre la 1ere utilisation et la 2nde dans les lignes 6 et 7?
      2- Sheets("Tournée") tu ajoutes des données en colonne, toujours lignes 10 & 11?
      0
    4. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Salut,

      1- oui je saute 2 ligne car entre deux il y a des calculs.
      2- oui
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      pour le 1- tu me confirmes que les lignes 6 et 7 seront remplies AVANT la 2nde utilisation de l'userform?
      0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Re-
    Alors ton code complet devient :
    Private Sub CmdOK_Click() 
    Dim Col As Byte, Lign As Long
    
    With Sheets("tournée")
        Col = .Cells(10, .Cells.Columns.Count).End(xlToLeft).Column
        .Cells(10, Col + 1) = TextBox1
        .Cells(10, Col + 2) = TextBox2
        .Cells(11, Col + 1) = TextBox3
        .Cells(11, Col + 2) = TextBox4
    End With
    With Sheets("pesées")
        Lign = .Range("C" & Rows.Count).End(xlUp).Row
        .Cells(Lign + 1, 3) = TextBox5.Value 
        .Cells(Lign + 1, 4) = TextBox6.Value 
        .Cells(Lign + 1, 5) = TextBox7.Value 
        .Cells(Lign + 1, 6) = TextBox8.Value 
        .Cells(Lign + 1, 7) = TextBox9.Value 
        .Cells(Lign + 1, 8) = TextBox10.Value 
        .Cells(Lign + 1, 9) = TextBox11.Value 
        .Cells(Lign + 1, 10) = TextBox12.Value
    End With
    Unload Me 
    End Sub 
    Private Sub CmdAnnuler_Click() 
    Unload Me 
    End Sub

    Testes et reviens nous dire...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour

    ça ne fonctionne pas... Cela peut-il être parce que dans la feuille tournée je ne commence à mettrre des infos pour la première fois à la ligne 10 et que dans la feuille pesées je ne commence qu'à la ligne 5?

    merci
    Mélanie
    0
    1. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      il ne se passe rien, les données ne s'inscrivent ni à mesure ni à la fermeture de mon usf
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      ET POURTANT CE CODE FONCTIONNE!!!!! Faut :
      - saisir les données
      - cliquer sur le bouton "OK"!!!!!

      il ne se passe rien, les données ne s'inscrivent ni à mesure ni à la fermeture de mon usf Non pas au fur et à mesure, rappelle toi on a supprimé cette option... Ni à la fermeture, tu as des boutons OK et annuler! Les actions ne se font qu'au clic sur ces boutons!!!
      feuille pesées je ne commence qu'à la ligne 5 j'ai donc ajouté cette ligne pour le test :
      If Lign < 5 Then Lign = 4
      0
    3. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour.
      Toujours rien ne se passe... et pourtant je clique sur le bouton ok.
      je dois bien mettre ce code dans le usf?
      merci encore
      Mélanie
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      As tu cliqué sur le lien que je t'ai mis dans ma dernière réponse et essayé avec le classeur que je t'ai transmis par ce biais???????????
      0
    5. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour

      oui j'ai essayé et rien ne se passe.... voici le lien de mon fichier...

      http://www.cijoint.fr/cjlink.php?file=cj201110/cijXd3Xw9n.xls

      merci beaucoup de m'aider
      Mélanie
      0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Dernière tentative...
    Donne moi une copie du classeur définitif, sur lequel je pourrais travailler...
    0
  8. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour,

    http://www.cijoint.fr/cjlink.php?file=cj201110/cijVufCCzb.xls

    merci beaucoup de ta patience
    Mélanie
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      T'inquiète, c'est un peu aussi de ma faute...

      Essaye ce fichier : http://www.cijoint.fr/cjlink.php?file=cj201110/cijcTZmCya.xls
      0
    2. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Tu es Génial!!!! :)C'est merveilleux!!!!!! un ÉNORME merci
      Tu fais ma journée !!!!!!
      Mélanie
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Non suis pas génial...
      C'est merveilleux, je n'irais pas jusque là...
      De rien..
      A+
      0
    4. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      chacun son opinion! T'as été tellement patient! :)
      0