Créer un formulaire personnalisé pour saisir des données sur Excel

Créer un formulaire personnalisé pour saisir des données sur Excel

Avec Excel, il est possible d’utiliser un formulaire de saisie disponible par défaut. Cependant, il reste quelque peu basique et ne vous permet pas, par exemple, d’utiliser des listes déroulantes.

Nous allons donc, dans ce tutoriel, créer un formulaire de saisie personnalisé avec Excel tant au niveau de la saisie des données que de la présentation.

Pour ce tutoriel, nous utiliserons un fichier Excel que vous retrouverez dans l’Espace membres du blog Votre Assistante.

Formulaire personnalisé Excel – tutoriel vidéo

Plan de site

Utilisation d’un formulaire de saisie Excel de base

Pour afficher le formulaire, nous avons besoin d’un bouton qui, dans la version 2013, n’apparaît pas par défaut. Pour le faire apparaître, allez dans l’onglet Fichier > Options > Personnaliser le ruban. Dans la partie droite, sélectionnez l’un de vos onglets et cliquez sur le bouton Nouveau groupe, puis, dans la partie gauche, dans le menu déroulant, choisissez Toutes les commandes et recherchez Formulaires…, cliquez sur Ajouter >>.

Si, par la suite, vous souhaitez supprimer ce bouton, il suffira de vous placer sur ce nouveau groupe (à droite) et de cliquer sur << Supprimer. Vous pouvez le renommer si vous le désirez.

Profitez-en pour cocher l’onglet Développeur s’il est décoché (et que vous souhaitez créer un formulaire personnalisé). Cliquez sur Ok.

 Ajout bouton formulaire

Désormais, dans l’onglet que vous avez sélectionné pour votre nouveau bouton, vous avez une nouvelle icône :

Bouton formulaire

Pour utiliser le formulaire classique, cliquez dessus. Attention, si vous cliquez dessus mais qu’aucune donnée n’existe dans votre fichier, le formulaire n’apparaîtra pas.

Vous avez tous vos champs qui ont été repris avec leurs données. À droite, vous avez :

  • Le nombre de fiches et votre position ;
  • Nouvelle : vous ajouterez un nouvel enregistrement ;
  • Supprimer : vous supprimerez la fiche en cours ;
  • Restaurer : vous restaurerez les modifications effectuées sur un enregistrement ;
  • Précédente : vous vous déplacerez vers la fiche précédente ;
  • Suivante : vous vous déplacerez vers la fiche suivante ;
  • Critères : vous permettra de faire une recherche. Saisissez votre élément à rechercher dans le champ correspondant et appuyez sur Entrée. Cliquez sur Grille pour rebasculer en mode normal si vous n’avez fait aucune recherche ;
  • Fermer (ou la croix rouge fermeture ) : vous fermerez le formulaire.

 

À noter que le bouton créé ne servira que pour le formulaire de base. Si vous créez un formulaire personnalisé et cliquez sur ce bouton, c’est le formulaire de base qui apparaîtra.

 

Création d’un formulaire de saisie Excel personnalisé

Pour créer ce formulaire, nous allons utiliser du code VBA. Rendez-vous dans l’onglet Développeur > Visual Basic Visual basic .

Cliquez sur Insertion > UserForm pour obtenir un UserForm vierge :

UserForm vierge

Pour commencer, nous allons insérer des zones de textes, listes déroulantes et boutons. Agrandissez le formulaire en utilisant les poignées situées tout autour.

Si la Boîte à outils n’est pas visible, allez dans le menu Affichage > Boîte à outils.

Dans cette boîte, cliquez sur Zone de liste modifiable Zone de liste modifiable et cliquez sur l’UserForm sur la partie gauche pour créer votre première ComboBox qui sera la liste déroulante du Code client, puis, créez-en une autre pour la Civilité vers la droite.

Cliquez ensuite sur Zone de texte Zone de texte et créez-en 7 sous la ComboBox2, ce seront des TextBox.

Pour donner un nom à ces cases, utilisez l’icône Intitulé v et placez-en un devant chaque ComboBox et TextBox.

Dans l’ordre, en partant de la première ComboBox vers la septième TextBox, vous devez avoir les libellés suivants :

  • Code client
  • Civilité
  • Prénom
  • Nom
  • Adresse
  • Code Postal
  • Ville
  • Téléphone
  • E-mail

Ces libellés correspondent aux en-têtes de colonnes de notre fichier Excel et ne servent qu’à vous indiquer le nom de la zone.

Enfin, créez 3 boutons au bas de l’UserForm avec l’icône Bouton de commande Bouton de commande . Modifiez chacun de leurs noms soit en cliquant dessus (pas de double-clic sinon vous passerez en mode Code), soit en faisant un clic droit > Propriétés Bouton propriétés et en modifiant le nom à la ligne Caption.

Pour CommandButton1, indiquez Nouveau contact, puis, pour le deuxième, Modifier et, pour le dernier, Quitter. Ne renommez pas les ComboBox, TextBox et CommandButton, dans les Propriétés, à la ligne Name, ou alors vous devrez indiquer vos propres noms dans le code VBA pour que cela fonctionne.

Pour renommer UserForm1 qui sera le nom de la boîte de dialogue du formulaire, cliquez sur le formulaire et, à la ligne Caption, des Propriétés, saisissez Saisie des coordonnées clients ou le nom de votre choix.

Pour modifier la couleur de fond du formulaire, cliquez sur la flèche Flèche qui apparaît lorsque vous cliquez sur la ligne BackColor. Cliquez sur l’onglet Palette pour avoir plus de choix et choisissez une couleur. Sélectionnez ensuite les intitulés, modifiez leur couleur d’écriture sur la ligne ForeColor et leur police à la ligne Font en cliquant sur Menu suivant et indiquez la même couleur que pour le formulaire à la ligne BackColor pour éviter d’avoir des cadres.

Indiquez la même police aux 3 boutons de commande en les sélectionnant.

Replacez tous les éléments du formulaire si besoin en les déplaçant et en les agrandissant grâce aux poignées. N’oubliez pas d’élargir les TextBox, notamment des champs Adresse et E-mail, sinon il y aura un risque que l’ensemble des données n’apparaisse pas.

Formulaire de saisie Excel – code VBA à utiliser

Vous pouvez déjà voir le résultat en cliquant sur le formulaire, puis, sur la touche F5. Cependant, comme vous pouvez le constater, rien ne fonctionne puisque rien n’est en lien et nous devons le faire avec du VBA. Retournez en Mode création en fermant le formulaire. Passez en mode VBA en double-cliquant sur le formulaire et remplacez ce qui est saisi par défaut par :

Option Explicit

Dim Ws As Worksheet

'Pour le formulaire

Private Sub UserForm_Initialize()

Dim J As Long
Dim I As Integer

 ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
 ComboBox2.List() = Array("", "M.", "Mme", "Mlle")

 Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel

 With Me.ComboBox1

    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
       .AddItem Ws.Range("A" & J)
    Next J

 End With

 For I = 1 To 7
     Me.Controls("TextBox" & I).Visible = True
 Next I

End Sub

Les textes apparaissant en vert sont des commentaires qui ne sont pas pris en compte dans le code car ils sont précédés d’une apostrophe et ne sont présents qu’à titre informatif.

La ComboBox2 contiendra, dans une liste déroulante, les éléments M., Mme ou Mlle.

Si votre onglet se nomme autrement que Clients, n’oubliez pas de modifier le nom dans le code.

 

Pour la liste déroulante « Code client », saisissez à la suite :

'Pour la liste déroulante Code client

Private Sub ComboBox1_Change()

Dim Ligne As Long
Dim I As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

  Ligne = Me.ComboBox1.ListIndex + 2

  ComboBox2 = Ws.Cells(Ligne, "B")

  For I = 1 To 7
     Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
  Next I

End Sub

 

Pour le bouton « Nouveau contact », saisissez à la suite :

'Pour le bouton Nouveau contact

Private Sub CommandButton1_Click()

Dim L As Integer

 If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("Clients").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     Range("A" & L).Value = ComboBox1
     Range("B" & L).Value = ComboBox2
     Range("C" & L).Value = TextBox1
     Range("D" & L).Value = TextBox2
     Range("E" & L).Value = TextBox3
     Range("F" & L).Value = TextBox4
     Range("G" & L).Value = TextBox5
     Range("H" & L).Value = TextBox6
     Range("I" & L).Value = TextBox7
 End If

End Sub

La phrase « Confirmez-vous l’insertion de ce nouveau contact? » indique la question qui sera posée lors du clic sur le bouton Nouveau contact et « Demande de confirmation d’ajout » au titre de la boîte de dialogue.

 

Pour le bouton « Modifier », saisissez à la suite :

'Pour le bouton Modifier

Private Sub CommandButton2_Click()

Dim Ligne As Long
Dim I As Integer

   If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
     If Me.ComboBox1.ListIndex = -1 Then Exit Sub

         Ligne = Me.ComboBox1.ListIndex + 2

         Ws.Cells(Ligne, "B") = ComboBox2

     For I = 1 To 7
         If Me.Controls("TextBox" & I).Visible = True Then
            Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
         End If
     Next I
   End If

End Sub

La phrase Confirmez-vous la modification de ce contact ? indique la question qui sera posée lors du clic sur le bouton Modifier et Demande de confirmation de modification au titre de la boîte de dialogue.

 

Enfin, pour le bouton Quitter, saisissez à la suite :

'Pour le bouton Quitter

Private Sub CommandButton3_Click()

   Unload Me

End Sub

Attention, si vous avez plus ou moins de 7 TextBox n’oubliez pas de modifier le chiffre 7 aux lignes For I = 1 To 7 dans les parties Formulaire, Code client et Bouton modifier et à rajouter une ligne à la suite de Range(« I » & L).Value = TextBox7 dans la partie Nouveau contact.

 

Désormais, vous pouvez appuyer sur F5 pour tester le formulaire.

Formulaire

Il se peut qu’en utilisant la touche ↹ (tabulation), votre curseur ne se déplace pas comme vous le souhaitiez, notamment si vous ne créez pas vos Contrôles dans l’ordre. Pour remédier à ce problème, cliquez droit sur votre formulaire en Mode création et cliquez sur Ordre de tabulation, également accessible dans le menu Affichage.

Vous n’avez plus qu’à monter et descende les éléments pour les mettre dans l’ordre désiré et à cliquer sur Ok sachant que l'emplacement des Labels n’a pas d’importance :

Ordre de tabulation

Si vous avez besoin de modifier le formulaire, retournez dans Visual Basic Visual basic. Dans l’Explorateur de projet, en cliquant droit sur l’UserForm1, vous pourrez basculer entre Code et Afficher l’objet :

Afficher objet

Pour terminer, nous allons créer une macro pour lancer ce formulaire et nous éviter de devoir retourner dans Visual Basic à chaque fois que nous en aurons besoin. Dans l’onglet Développeur, cliquez sur Macros Bouton macros . Donner un nom à celle-ci comme Lancer_formulaire et cliquez sur Créer. Entre les deux lignes présentes dans Visual Basic, saisissez UserForm1.Show vbModeless. Fermez la fenêtre, recliquez sur Macros Bouton macros , choisissez la macro créée, cliquez sur Options et choisissez votre raccourci. Selon la lettre choisie, le raccourci comportera la touche Shift ou non pour ne pas remplacer un raccourci existant :

Options de macros

Cliquez sur Ok, fermez la boîte de dialogue et, pour lancer votre formulaire, vous n’aurez plus qu’à utiliser le raccourci créé.

Enfin, n’oubliez pas d’enregistrer votre fichier dans un format prenant en compte les macros en allant dans le menu Fichier > Enregistrer sous. Choisissez un emplacement et le type Classeur Excel (prenant en charge les macros – ce sera donc un fichier .XLSM).

Si vous ne souhaitez pas avoir la notification suivante à l’ouverture du fichier :

Avertissement sécurité

Vous pouvez la désactiver en allant dans le menu Fichier > Options > Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité > Paramètres des macros > Activer toutes les macros.

Centre de gestion confidentialité

Cependant, ceci n’est pas recommandé pour des raisons de sécurité.

 

Vous avez désormais le choix entre saisir les données de manière classique dans la feuille de calculs, les saisir dans le formulaire de saisie de base ou les saisir dans votre nouveau formulaire personnalisé.

L’article est téléchargeable ici.

EDIT : LE CODE POSANT DES SOUCIS DANS SA RETRANSCRIPTION SUR CET ARTICLE EST DISPONIBLE EN FORMAT .TXT EN TÉLÉCHARGEMENT ICI

Pour plus d’éléments sur la compréhension du code, Lydia a réalisé un très bon article que je vous conseille d’aller lire pour résoudre les soucis éventuels de transcription : ça se passe ici !

Pourrait également vous intéresser



351 réflexions sur “Créer un formulaire personnalisé pour saisir des données sur Excel”

  1. Dans la commande nouveau contact il est possible de simplifier la partie d’ajout de donner issues des textbox comme suit :
    Au lieu de :

    Range(« C » & L).Value = TextBox1
    Range(« D » & L).Value = TextBox2
    Range(« E » & L).Value = TextBox3
    Range(« F » & L).Value = TextBox4
    Range(« G » & L).Value = TextBox5
    Range(« H » & L).Value = TextBox6
    Range(« I » & L).Value = TextBox7

    Mettre :
    For I = 1 To 7
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(L, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I

    suivant le nombre de colonne de votre tableau remplacer le 7 votre nombre de colonne (pour moi 72)

  2. Bonjour à vous,
    Merci pour ces fabuleuses démonstrations.

    À partir de cet exemple, j’ai tenté de le modifier afin de l’accommoder pour mes besoins.
    Toutefois, étant nulle en VBA, je demande ici votre opinion.
    En faisant la touche F5, j’obtiens un message d’erreur d’exécution -2147024809 Objet spécifié introuvable et je n’arrive pas à trouver les erreurs.

    Voici le code modifié et je vous remercie de votre soutien :
    Option Explicit

    Dim Ws As Worksheet ‘Pour le formulaire

    Private Sub UserForm_Initialize()

    Dim J As Long
    Dim I As Integer

    ComboBox3.ColumnCount = 1 ‘Pour la liste déroulante Direction
    ComboBox3.List() = Array(«  », « DG », « DL », « DRHCAJ »)

    Set Ws = Sheets(« Données ») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J

    End With

    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    ComboBox4.ColumnCount = 1 ‘Pour la liste déroulante Type d'emploi
    ComboBox4.List() = Array(«  », « Occasionnel », « Temps complet »)

    Set Ws = Sheets(« Données ») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J

    End With

    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    ComboBox5.ColumnCount = 1 ‘Pour la liste déroulante Temps de télétravail
    ComboBox5.List() = Array(«  », « – de 25% », « entre 25% et 50% », « + de 50% », « Temps complet »)

    Set Ws = Sheets(« Données ») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J

    End With

    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    ComboBox6.ColumnCount = 1 ‘Pour la liste déroulante Prêt de matériel
    ComboBox6.List() = Array(«  », « Oui », « Non »)

    Set Ws = Sheets(« Données ») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J

    End With

    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    End Sub ‘Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    L = Sheets(« Données »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(« A » & L).Value = ComboBox1
    Range(« B » & L).Value = ComboBox2
    Range(« C » & L).Value = ComboBox3
    Range(« D » & L).Value = ComboBox4
    Range(« E » & L).Value = ComboBox5
    Range(« F » & L).Value = ComboBox6

    End Sub ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long
    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    Ws.Cells(Ligne, « B ») = ComboBox2

    For I = 1 To 7
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I

    End Sub ‘Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

  3. Bonjour,

    J’ai créé un formulaire.
    Seulement, je voudrais que les données aillent dans une feuille en fonction d’une des données renseignées dans le formulaire.
    Par exemple, j’ai des onglets nommés 2003, 2004, 2005 etc
    Lorsque l’on renseigne le formulaire, il y a une case année de naissance.
    Il faudrait donc que les données saisies aillent dans l’onglet excel correspondant à l’année renseignée.

    Mes première recherches google n’ont pas été très fructueuses. Je n’ai sans doute pas les bon mots clés…

  4. Bonjour
    Merci pour ce tuto. J’ai utilisé le script indiqué. Mais j’ai 8 combobox et 12 textbox, qui ne se suivent pas (elles s’intercalent les unes les autres).
    Je ne sais pas comment modifier les lignes pour qu’à l’appel d’une référence, les champs de combobox et de textbox se positionnent au bon endroit, ni pour qu’en modification, cela fonctionne bien également. Par contre, pas de souci pour la création.
    Merci de votre aide

  5. Charles Etienne Ciss

    Bonjour et merci pour ce blog sur le excel
    Je suis un lecteur régulier depuis quelques temps déjà et je trouve que les articles sont de qualités ce que j’apprécie fortement.
    Je me permet de vous poster un lien car cela a très bien fonctionné pour moi : http://bit.ly/CreerFichierSEPASurExcel !!!
    Au revoir et à tantôt j’espère sur d’autres articles.
    Charles

  6. Bonjour,

    j ai construit une base de donnée sur Excel en vba, mais je bloque!!!!!!

    je souhaite appeler un client « combobox ? et que s’ouvres les trois formulaires rempli avec les informations de la base.

    très cordialement

  7. Bonjour,
    Merci pour votre tuto.
    Je ne connais rien au VBA et j’ai suivi à la lettre le tuto.
    J’ai une 1ère erreur à la 6ème ligne. (en mode débug)
    Au lieu de :
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    il faut mettre : (manque le point)
    ComboBox2.Column.Count = 1 ‘Pour la liste déroulante Civilité
    Maintenant, toujours sur la même ligne j’ail’erreur :
    erreur d’exécution 424 objet requis.
    Je ne vois pas ce qui bloque

    Cordialement
    André

  8. Bonjour !
    Merci pour ce tuto, tout fonctionne parfaitement.
    J’aimerais créer une feuille « Accueil » et y placer un bouton qui lancerait le formulaire. Ça fonctionne, mais il me remplit la page « Accueil » et non la page »Clients ». Comment y remédier ?
    Merci de votre aide !

  9. Bonjour,

    Tout d’abord un grand merci Lydia pour ces tutoriels très bien réalisés et très clairs.

    J’ai une question concernant la création de formulaire personnalisé : existe-t-il une possibilité lors de la création d’un nouveau contact de « nettoyer » la fiche afin de redémarrer sur une version vierge ? Notamment lorsqu’il s’agit de créer plusieurs contacts à la suite.

    Merci par avance pour votre aide et bravo pour ce super travail que vois faites 🙂

  10. Bjr merci encore une fois. Votre tuto m’a beaucoup aidé j’ai pu créer mon logiciel pour établissement avec vos conseils. Mais j’ai un petit souci
    – lorsque je met ma feuille sous forme de tableau, le gestionnaire de saisie ne reconnaît pas la première ligne. Donc j’ai du mettre le Row -1 pour qu’il reconnaisse la première ligne. Après saisie je remarque que la saisie n’avance ,elle est figée sur toujours sur la première ligne. Bon j’ai du remettre le Row-1 en ignorant la première ligne. Aidez moi sur ça
    – lorsque je veux modifier les données que j’ai rentrées , ça confirme bien  »vos données ont été modifiées  »mais cela n’apparaît dans la base de donnée.aidez moi
    – comment réinitialiser la base de données via un code VBA sans avoir à aller dans la feuille source pour supprimer un ou tout. Mon code que j’utilise, efface seulement que les données dans le champ du gestionnaire de saisie. Merci

  11. Bonjour, vos 2 tuto sont vraiment geniaux. Avec aucune connaissance je suis arrivé a des miracle 😉

    Cependant pour ce dernier code j’ai un decallage ou je n’arrive pas a voir mon erreur. Pourriez vous m’aiguiller? et me dire comment pouvoir vous envoyer le code ou bien mon tableur

    Pour information j’ai 46 textbox et 37 combobox (36 + 1 pour la référence client).

    Cordialement,,

    Mathieu

  12. hello bonjour, avant tout d’abord merci pour le tuto, ça marche bien.
    et si on voulait récupérer ces données du formulaire et le mettre dans dans une base sql server?

    car moi j’arrive pas a faire les Imports. merci d’avance

  13. Bonjour,

    Merci pour votre tuto.

    J’ai suivi à la lettre ce dernier, mais j’ai deux problèmes :

    1- Je n’ai pas de liste déroulante pour mon code client et civilité
    2- Lorsque je veux rajouter un nouveau client, cela n’apparaît pas dans mon tableau en le saisissant via le formulaire personnalisé.

    Merci de votre aide !

    Bien cordialement,

    Carole

  14. je suis nouveau sur la page. j’ai suivie la video sur la création d’un formulaire personnalisé et voila mon probleme:

    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array( » « ,  » M. « ,  » Mme « ,  » Mlle « )
    Set Ws = Sheets( » Clients « ) ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range( » A  » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range( » A  » & J)
    Next J
    End With
    For I = 1 To 7
    Me.Controls( » TextBox  » & I).Visible = True
    Next I
    End Sub

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne,  » B « )
    For I = 1 To 7
    Me.Controls( » TextBox  » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub
    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox( » Confirmez-vous l’insertion de ce nouveau contact ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
    L = Sheets( » Clients « ).Range( » a65536 « ).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range( » A  » & L).Value = ComboBox1
    Range( » B  » & L).Value = ComboBox2
    Range( » C  » & L).Value = TextBox1
    Range( » D  » & L).Value = TextBox2
    Range( » E  » & L).Value = TextBox3
    Range( » F  » & L).Value = TextBox4
    Range( » G  » & L).Value = TextBox5
    Range( » H  » & L).Value = TextBox6
    Range( » I  » & L).Value = TextBox7
    End If
    End Sub
    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox( » Confirmez-vous la modification de ce contact ? « , vbYesNo,  » Demande de confirmation de modification « ) = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne,  » B « ) = ComboBox2
    For I = 1 To 7
    If Me.Controls( » TextBox  » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls( » TextBox  » & I)
    End If
    Next I
    End If
    End Sub
    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    lorsque j’entre le code ci dessus, le fichier me met

    « erreur d’execution ‘9’; l’indice n’apparait pas dans la selection. »

    comment régler ce probleme

    1. bonjour.
      sur ta 7ème ligne : Set Ws = Sheets( » Clients « ) ‘Correspond au nom de votre onglet dans le fichier Excel

      tu dois remplacer client par le nom de ton onglet par exemple Feuil1. le nom de ton onglet se trouve au pied de page de ton classeur Excel. tu peux aussi renommer ce nom avec un clic droit dessus.
      j’ai eu le meme problem et c’est de cette maniére que je l’ai resolue.
      j’esper que sava t’aider.

      merci

  15. Bonjour Lydia,

    Je recherche une méthode pour générer automatique une fiche de type formulaire (mise en page jolie) issue des données d’un tableau Excel.
    Aujourd’hui, j’utilise un tableau Excel où une ligne = une fiche word jolie que je fais à part pour l’envoyer.
    Pour comparer avec votre vidéo sur VBA (qui est très claire soit dit en passant), je souhaite renseigner ma ligne Excel et qu’une fiche (pdf, excel, word, autres) se génère automatiquement en reprenant les données saisies (et le must du must sur la laquelle je peux insérer une photo). Je souhaite au final avoir uniquement cette fiche dans un document.

    Cela est-il possible ? Et si oui, comment ?

    Je vous remercie par avance pour votre réponse.
    Bien cordialement,
    Elodie EDDE

    1. Bonjour,

      Il est possible de compléter le formulaire proposé par Lydia. C’est par exemple d’ajouter un bouton « créer une fiche ».
      – Il faut préalablement créer un onglet de BASE avec toute la « mise en page jolie »
      – Ensuite dans le code de ce nouveau bouton il y a :
      Private Sub CommandButton1_Click
      Dim L As Integer
      If MsgBox(« Confirmez-vous l’ajout de ce nouvel espace ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
      Sheets(« BASE »).Copy After:=Sheets(Sheets.Count) ‘pour copier la présentation de base et avoir ce nouvel onglet à la suite des autres
      L = Sheets.Count
      Sheets(L).Range(« A1 »).Value = ComboBox1 ‘à partir de là il faut dire ou va chaque info (TextBox et ComboBox) dans ce nouvel onglet
      End If
      End Sub

  16. Bonjour, je n’arrive pas à saisir le code quand je suis en mode VBA pour faire le lien entre mon formulaire et mon tableur.
    Tout simplement parce que je ne voix pas la manœuvre que vous avez faite pour coller les codes après avoir supprimé ce qui s’est affiché par défaut. La partie de votre commentaire ou vous avez dit que  » nous allons trouver tous les codes dans l’article ». S’il vous plait, veuillez me dire clairement comment faire apparaitre les code pour que je puisse continuer ma formation?
    Cordialement, monsieur Youo.

  17. Bonjour!

    C’est la première fois que je consulte ce site et je trouve qu’un tel type d’objet VB serait très utile pour le projet qui m’occupe.

    Cependant, dès la première modification du Classeur1 ds le Code, soit :

    « Option Explicit
    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(« », « M. », « Mme », « Mlle »)
    Set Ws = Sheets(« Clients ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J
    End With
    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub »

    sans les guillemets (et c’est tout ce qu’il y a comme code, tout a été remplacé), j’obtiens le message d’erreur suivant lorsque je tente un f5:

    « Erreur de compilation:

    Attendu : fin d’instruction »

    Comment régler cette erreur?

    Bien à vous,

    Dane

    1. salut
      regarde cette ligne ComboBox2.List() = Array(« », « M. », « Mme », « Mlle »)
      tu dois la remplecer par = Array( » « , « M. », « Mme », « Mlle »).
      partout ou tu verra « ou » tu remplace par « .

      merci

  18. bonjour et merci
    je trouve la une partie de réponses à mes problèmes : en fait je voudrais créer un fichier de « clients » auxquels je souhaite envoyer un courrier type que je pourrais associer à leur adresse :
    a) création du client
    b) adressage d’une lettre type complétée avec les données clients ou fournisseurs
    plusieurs lettres type créés sur word
    je sais faire du publipostage mais la il s’agit de faire à l’unité si je puis dire
    merci par avance

  19. Salut, merci pour le tuto. Ca fonctionne super bien.

    Par contre je souhaiterai ajouter une liste déroulante à la place d’un champs texte. Je ne vois pas quelles lignes je dois copier ou remplacer. Merci pour l’aide.

    Cordialement

    Renaud

  20. salut merci pour votre rubrique !! enfaîte j’arrive pas choisire les codes et les civilite
    sur le formulaire et le il ya des erreurs au niveaux du boutton modifier peux tu me corriger
    merci encore

  21. Bonsoir,

    C’est intéressent

    Vous pouvez ajouter un bouton à la place de faire « ctrl+shift » et vous l’appelez affiche formulaire.

    Cordialement
    WAJDI

  22. Bonjour,
    Je n’arrive pas a saisir le code
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    Toute la ligne est rouge et un message d’erreur apparaît « Erreur de compilation Attendu : séparateur ou ) »
    Comment faire pour corriger l’erreur?

  23. Rouzee Christele

    Bonjour,
    J’ai suivi instruction pas à pas une erreur c’est produit à la fin.

    message : erreur de compilation
    attendu : fin instruction

    Pouvez vous m’aider je travaille sur Excel 2016.
    Merci
    Bien cordialement

  24. Bonjour,

    Merci pour l’article,
    Peut on faire en sorte que l’on puisse que saisir à l’aide du formulaire ? qu’il s’ouvre automatiquement quand on clique sur le tableau ?
    Et est il possible de bloquer un case (pour ne rien saisir à l’intérieur) suivant la valeur choisie dans la liste déroulante ?
    Merci beaucoup pour votre aide,
    Cordialement,

  25. Bonjour et merci pour ce formidable tuto et en plus cela marche super bien, malgré ma tête de 70 printemps…. J’ai ma base avec quelques 2000 noms, et lorsque je rentre un nouveau patient, je voudrais être certain qu’il n’est pas déjà rentré… Est-ce possible d’éviter la double ou triple inscription ?
    Cordialement.
    Guy

    1. Bonjour Alex, j’ai aussi Excel et ça marche bien pour moi. Voilà ce que j’avais fait à partir du tuto de Lydia, que je remercie en passant.
      Menu fichier, Option, Personnaliser le ruban, à droite de la boîte de dialogue qui va apparaître j’ai pris nouveau groupe puis à gauche (la partie du milieu) au dessus il y a « choisir les commandes dans la catégorie suivante » , après un clic il y ‘aura un menu déroulant et vous choisissez formulaire. Salutation

  26. Bonjour

    je vous remercie pour votre site, vraiment très agréable et mon formulaire et presque opérationnel. Cependant dans mes listes déroulantes il n’y a a rien qui s’affiche ni même dans un champs date ou je demande la date du jour.

    J’ai dans mon formulaire 2 champs de civilité, pour mon client et pour mon commercial mais rien ne s’affiche.
    je vous remercie d’avance pour votre aide.

    Je vous joint mon code
    Crdt
    David

    Option Explicit
    Dim Ws As Worksheet

    ‘Pour le formulaire
    Private Sub UserForm2_Initialize()
    Dim J As Long
    Dim I As Integer

    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité Patient
    ComboBox2.List() = Array(«  », « M. », « Mme », « Mlle »)
    ComboBox3.ColumnCount = 1 ‘Pour la liste déroulante Civilité praticien
    ComboBox3.List() = Array(«  », « M. », « Mme », « Mlle »)
    Set Ws = Sheets(« Patients ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J
    End With
    For I = 1 To 20
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, « B »)
    For I = 1 To 20
    Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub

    Private Sub ComboBox3_Change()

    End Sub

    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    L = Sheets(« Patients »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement la première ligne de tableau non vide
    Range(« A » & L).Value = ComboBox1
    Range(« D » & L).Value = TextBox1
    Range(« C » & L).Value = ComboBox2
    Range(« E » & L).Value = TextBox2
    Range(« F » & L).Value = TextBox3
    Range(« G » & L).Value = TextBox4
    Range(« H » & L).Value = TextBox5
    Range(« I » & L).Value = TextBox6
    Range(« J » & L).Value = TextBox7
    Range(« B » & L).Value = TextBox8
    Range(« K » & L).Value = TextBox9
    Range(« L » & L).Value = TextBox10
    Range(« W » & L).Value = TextBox11
    Range(« O » & L).Value = TextBox12
    Range(« P » & L).Value = ComboBox3
    Range(« Q » & L).Value = TextBox14
    Range(« R » & L).Value = TextBox15
    Range(« S » & L).Value = TextBox16
    Range(« T » & L).Value = TextBox17
    Range(« U » & L).Value = TextBox18
    Range(« V » & L).Value = TextBox19
    Range(« N » & L).Value = TextBox20
    Range(« M » & L).Value = TextBox21
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne, « B ») = ComboBox2
    For I = 1 To 20
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Private Sub Label1_Click()

    End Sub

    Private Sub Label12_Click()

    End Sub

    Private Sub TextBox8_Change()
    DateDuJour = Format(Date, « dd,mmmm,yyyy »)
    End Sub

    Private Sub UserForm_Initialize()

    End Sub

  27. bonjour, j’ai besoin d’aide . j’ ai suivi votre tutoriel et j’en suis arrivé la la programmation si dessous .
    le problème c’est que mes listes ne s’affichent pas . Si vous connaissez la raison, un coup de pousse me serait d’un grand secoure . Merci !

    Option Explicit

    Dim Ws As Worksheet

    ‘Pour le formulaire

    Private Sub UserForm1_Initialize()

    Dim J As Long

    Dim I As Integer

    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Liens hypertexte

    ComboBox2.List() = Array( » « ,  » CEF « ,  » FINDER »,  » LORENS « ,  » MOLLER « ,  » OMRON « ,  » RS « ,  » SEFI « ,  » TABUR « )

    Set Ws = Sheets(GESTION) ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    ‘Pour la liste déroulante Code pièce

    Private Sub ComboBox1_Change()

    Dim Ligne As Long

    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    ComboBox2 = Ws.Cells(Ligne,  » B « )

    For I = 1 To 7

    Me.Controls( » TextBox  » & I) = Ws.Cells(Ligne, I + 2)

    Next I

    End Sub

    ‘Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de cette nouvelle pièce? « , vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(« GESTION »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(« A » & L).Value = ComboBox1

    Range(« B » & L).Value = ComboBox2

    Range(« C » & L).Value = TextBox1

    Range(« D » & L).Value = TextBox2

    Range(« E » & L).Value = TextBox3

    Range(« F » & L).Value = TextBox4

    Range(« G » & L).Value = TextBox5

    Range(« H » & L).Value = TextBox6

    Range(« I » & L).Value = TextBox7

    End If

    End Sub

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de cette nouvelle pièce ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    Ws.Cells(Ligne, « B ») = ComboBox2

    For I = 1 To 7

    If Me.Controls(« TextBox » & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)

    End If

    Next I

    End If

    End Sub

    ‘Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

    Private Sub UserForm_Click()

    End Sub

    1. Bonjour,

      Le code donné ici n’est pas adapté au copier/coller pour deux raisons:

      Les guillemets indiquant un commentaire ne sont pas bons, il faut les remplacer par une apostrophe ‘
      Les autres guillemets (« ») ne sont pas reconnus, ils faut les remplacer par des guillemets de type  »  » et enlever les espaces après « et avant ».

      Les modifications iront très vite avec un CTRL + H et ça devrait tourner sans problême par la suite.

      Bonne journée

  28. Bonjour,

    Cette présentation est claire et bien expliquée j’ai beaucoup aimé. Cependant j’aimerai en savoir un peu plus sur les fonction VBA afin de personnaliser moi même mon formulaire. Proposez vous des formations en ligne? Si oui, je serai intéressée.

    Cordialement,

    Stéphanie.

  29. Bonjour Lydia,

    Savez-vous par hasard comment rendre compatible sur mac la ligne de code suivante?
    ComboBox1.Value = Range(« A » & Cells(Rows.Count, 1).End(xlUp).Row) + 1
    Me.ComboBox2.RowSource = « SALARIES!C2:C » & Sheets(« SALARIES »).[C65000].End(xlUp).Row

    Par avance, merci.

    Cordialement,

    Stéphane CINTAS.

  30. Bonjour,

    je tente de créer un formulaire avec les box suivantes:

    Colonne A : TextBox1
    Colonne B : ComboBox1 (« Oui, « Non »)
    Colonne C : ComboBox2 (« Oui, « Non »)
    Colonne D : ComboBox3 (« Oui, « Non »)
    Colonne E : ComboBox4 (« Oui, « Non »)
    Colonne F : ComboBox2 (« Oui, « Non »)
    Colonne G : TextBox2

    Sachant que la première ligne à créer sera à la ligne 5 (de 1 à 4 j’ai du texte qui fait office de présentation)

    Pas besoin de bouton modification, juste nouvelle entrée et annuler.

    Mon problème est simple, j’arrive à rien :/

    Etant totalement débutant niveau macro (enfin j’ai quelques bases) j’ai tenté de modifier vos macros de la façon suivante:

    Option Explicit

    Dim Ws As Worksheet

    Private Sub UserForm_Initialize()
    Dim J As Long

    Dim I As Integer
    ComboBox1.ColumnCount = 1
    ComboBox1.List() = Array( » Oui « ,  » Non »)
    Set Ws = Sheets(3)
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I
    End Sub

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1
    ComboBox2.List() = Array( » Oui « ,  » Non »)
    Set Ws = Sheets(3)
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox3.ColumnCount = 1
    ComboBox3.List() = Array( » Oui « ,  » Non »)
    Set Ws = Sheets(3)
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox4.ColumnCount = 1
    ComboBox4.List() = Array( » Oui « ,  » Non »)
    Set Ws = Sheets(3)
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox5.ColumnCount = 1
    ComboBox5.List() = Array( » Oui « ,  » Non »)
    Set Ws = Sheets(3)
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With

    For I = 1 To 7

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    Private Sub CommandButton1_Click()
    Dim L As Integer
    L = Sheets(3).Range(«A»).End(xlUp).Row + 1
    Range(« A » & L).Value = TextBox1
    Range(« B » & L).Value = ComboBox1
    Range(« C » & L).Value = ComboBox2
    Range(« D » & L).Value = ComboBox3
    Range(« E » & L).Value = ComboBox4
    Range(« F » & L).Value = ComboBox5
    Range(« G » & L).Value = TextBox2
    End Sub
    Private Sub CommandButton2_Click()

    Unload Me

    End Sub

    J’ai le droit à un message d’erreur:
    Nom ambigu détecté: UserForm_ Initialize

    J’imagine qu’il doit y avoir 50 autres erreurs dans mes macros mais j’aimerai déjà réussir à régler cela.

    Merci d’avance

    Carlos

    1. Je me répond à moi même mais j’ai réglé une grosse partie de mes problème sauf que je n’ai aucun choix de dispo dans mes menus déroulants de mon formulaires (les Oui ou Non)

      Mes macros modifiées:

      Option Explicit

      Dim Ws As Worksheet

      Private Sub ComboBox1_Initialize()
      Dim J As Long

      Dim I As Integer
      ComboBox1.ColumnCount = 1
      ComboBox1.List() = Array(« Euro », « US », « Japon », « Autres »)
      Set Ws = Sheets(3)
      For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

      .AddItem Ws.Range(« A » & J)

      Next J

      End With

      For I = 1 To 2

      Me.Controls(« TextBox » & I).Visible = True

      Next I
      End Sub

      Private Sub ComboBox2_Initialize()
      Dim J As Long
      Dim I As Integer
      ComboBox2.ColumnCount = 1
      ComboBox2.List() = Array(« Oui », « Non »)
      Set Ws = Sheets(3)
      For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

      .AddItem Ws.Range(« A » & J)

      Next J

      End With

      For I = 1 To 2

      Me.Controls(« TextBox » & I).Visible = True

      Next I
      End Sub

      Private Sub ComboBox3_Initialize()
      Dim J As Long
      Dim I As Integer
      ComboBox3.ColumnCount = 1
      ComboBox3.List() = Array(« Oui », « Non »)
      Set Ws = Sheets(3)
      For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

      .AddItem Ws.Range(« A » & J)

      Next J

      End With

      For I = 1 To 2

      Me.Controls(« TextBox » & I).Visible = True

      Next I
      End Sub
      Private Sub ComboBox4_Initialize()
      Dim J As Long
      Dim I As Integer
      ComboBox4.ColumnCount = 1
      ComboBox4.List() = Array(« Oui », « Non »)
      Set Ws = Sheets(3)
      For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

      .AddItem Ws.Range(« A » & J)

      Next J

      End With

      For I = 1 To 2

      Me.Controls(« TextBox » & I).Visible = True

      Next I
      End Sub

      Private Sub ComboBox5_Initialize()
      Dim J As Long
      Dim I As Integer
      ComboBox5.ColumnCount = 1
      ComboBox5.List() = Array(« Oui », « Non »)
      Set Ws = Sheets(3)
      For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

      .AddItem Ws.Range(« A » & J)

      Next J

      End With

      For I = 1 To 2

      Me.Controls(« TextBox » & I).Visible = True

      Next I
      End Sub

      Private Sub CommandButton1_Click()
      Dim L As Integer
      L = Sheets(3).Range(« a65536 »).End(xlUp).Row + 1
      Range(« A » & L).Value = TextBox1
      Range(« B » & L).Value = ComboBox1
      Range(« C » & L).Value = ComboBox2
      Range(« D » & L).Value = ComboBox3
      Range(« E » & L).Value = ComboBox4
      Range(« F » & L).Value = ComboBox5
      Range(« G » & L).Value = TextBox2
      End Sub
      Private Sub CommandButton2_Click()

      Unload Me

      End Sub

      Private Sub UserForm_Click()

      End Sub

  31. Bonjour
    Merci pour cet article très bien construit !
    Je souhaiterais construire une fonctionnalité qui s’inspire en partie de celle-ci …mais je ne trouve pas de réponse sur les autres sites internet.
    J’ai actuellement 6 onglets différents qui correspondent à 6 types de produits différents.
    J’aimerais créer un formulaire qui demande à chaque fois au client son nom, son prénom mais aussi (et c’est là que ca se complique) deux menus déroulants: le premier permet de choisir laquelle des 6 catégories nous intéresse et une fois sélectionner le menu suivant propose la liste des produits contenu dans la catégorie choisie. Puis après validation grâce à un bouton les données sont recueillies dans un nouvel onglet.

    dans ce qu’il y a de complexe: rendre les menus déroulants pour le choix des données interdépendants, faire apparaître ce formulaire dans d’autres pages et créer un bouton graphiquehyperlink sur chaque page Excel (non par un raccourci ou un bouton dans la barre d’utilisateur) permettant d’ouvrir ce formulaire

    Désolé de la complexité de la demande
    Merci d’avance et encore merci pour ce site

  32. Bonjour,

    Tout d’abord, merci beaucoup pour ce tutoriel qui m’a permise de réaliser un magnifique formulaire pour mon entreprise.

    Cependant, un élément ne fonctionne pas.. Dans ce formulaire j’ai créée 2 liste déroulante (ComboBox) en suivant le tutoriel mais quand je clique sur la flèche, il n’y a aucun élément.

    Merci beaucoup.

  33. Bonjour,
    Tout d’abord merci beaucoup pour ce tutoriel qui permet de créer un formulaire !

    Suite à la création de mon formulaire, en faisant « F5 » pour avoir l’aperçu du résultat, j’obtiens une erreur :
    « Erreur d’exécution ‘9’:
    L’indice n’appartient pas à la sélection. »

    Pourrais-je avoir un coup de main dès que possible ? :s

    Par avance, merci.
    Cordialement.

    1. Clique sur le lien en bas pour l’avoir sous .txt
      Sur ton formulaire, double clique sur une case et colle ton texte.
      ça a fonctionné pour moi, j’avais la même erreur

  34. Bonjour,

    Tout d’abord bravo et merci pour votre blog. C’est simple mais diversifié et utile. Du bon web quoi…

    J’ai une remarque concernant le fichier Clients. Apparemment il lui manque la colonne Code Client en A.

    En l’état actuel, dans le formulaire, c’est la civilité qui s’affiche en lieu et place du code client et du coup on ne peut pas afficher les enregistrements déjà existants. Lorsque l’on en crée un, le code client se place bien en colonne A et décale donc les autres données.
    Une fois ajoutée cette colonne, tout fonctionne bien.

    Ou alors ai-je raté quelque chose ?

    Bonne journée,

    1. Bonjour et merci pour vos tutos. Je souhaiterai préciser ma recherche. Colonne A (combobox1) où se trouve des catégories (ex: Nettoyage, Industrie, Négoce ….) et dans la colonne B (combobox2) se trouve les noms de mes clients. Les Textboxs sont comme dans votre exemple (Adresses, code postaux, téléphone) et j’ai rajouté des lignes … Bref. Mon objectif est de sélectionner dans la combox 1 une catégorie (Nettoyage ou industrie ou autre) puis dans la combobox2 sélectionner un client appartenant à la catégorie sélectionnée et évidement les textbox suivent derrière….
      En vous remerciant

  35. Bonsoir et bravo pour votre site : c’est grâce à vous que je me perfectionne.

    J’ai appliquer votre cours pour créer un formulaire (plus de 50cellules) j’ai adapté à mon formulaire et tout marche, mais mon tableau va contenir environ 500 lignes, comment pouvoir rechercher et modifier en tapant une reférence ?

    « Attention, si vous avez plus ou moins de 7 TextBox n’oubliez pas de modifier le chiffre 7 aux lignes For I = 1 To 7 dans les parties Formulaire, Code client et Bouton modifier et à rajouter une ligne à la suite de Range(« I » & L).Value = TextBox7 dans la partie Nouveau contact »

    Ok à la place de 7 je mets 500, mais à la place de I ?

    Merci pour votre aide je suis bloqué…

  36. je suis bloquée ça ne fonctionne pas je suis à la partie F5 pour contrôler si l’interface fonction et j’ai le message suivant :
    Erreur de compilation :
    Variable non définie

    Et quand je fais OK Private Sub UserForm_Initialize () est surligné en jaune est-ce que quelque peux m’aider ?

    Merci

  37. Bonjour,

    Quelqu’un aurai-t-il une version du User form finalisé avec les codes? Dans le but d’apporter quelques modifications par la suite…

    Autre chose, il semble que dans la vidéo le code soit différent dans la première partie,

    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ICI: ComboBox1 au lieu de Combobox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(« », « M. », « Mme », « Mlle »)

  38. Bonjour,
    Super tuto qui m’a permis de créer un formulaire de saisie pour les membres de mon club.
    2 questions :

    – que mettre comme code dans un bouton « Supprimer » pour éffacer un enregistrement ?

    -peut-on mettre l’userform dans une feuille de calcul différente de celle contenant les donnèes ?

    Merci encore

  39. c’est exactement ce type de fichier dont j’avais besoin, et je viens donc de découvrir pour la première fois VBA et les Macros, je comprends pas vraiment encore tout, et j’ai bien saisie toutes les données et enfin au bout de 4 h et refaire la vidéo 4 fois en entier, j’y suis arrivé Oufff!!! Mais la moindre erreur pardonne pas!
    Ce n’est pas la première fois que je suis vos vidéos sur YT, et franchement un grand merci pour tout ces tutos!
    ça finira par payer!!

  40. Bonjour, j’ai acheté un mac pro et la dernière version d’office 2011 pour mac.

    Dans l’onglet fichier, il n’y a pas d’option pour personnalisé le ruban.

    J’ai trouvé dans l’onglet outil (macro, nouvelle macro et vba)

    Quand, je quitte ou je veux sauvegardé mon travail, je ne peut revenir a mon travail quand j’ouvre le fichier.

  41. Bonjour,
    J’aurais une question à propos du bouton qui permet d’enregistrer la donnée.
    Dans votre cas, le bouton « Nouveau contact » permet d’ajouter une ligne à la feuille active où est affichée le formulaire.
    J’aurais voulu dans mon cas faire afficher le formulaire dans une feuille « Formulaire » et que les données enregistrées aillent se noter dans une deuxième feuille « Données » du classeur.
    Seulement avec le code que vous avez donné il faut que le formulaire soit affiché dans la feuille donnée pour les informations se remplissent sur cette feuille.

    Auriez-vous une idée pour résoudre mon problème?

    Merci

  42. bonjour,

    quelle sont les lignes de codes pour définir une liste déjà existante sans avoir à tout recopier dans le VBA? (partie combobox2)
    ces données étant dans le même classeur mais dans un onglet différent.

    Merci d’avance

  43. quand je fait F5, il me dit :

    « Erreur d’exécution ‘9’
    L’indice n’appartient pas à la sélection »

    Pourriez-vous me dire pourquoi?

    1. J’ai rencontré ce probléme, j’ai juste changé le nom de l’onglet j’ai mis « CLIENTS », que j’ai renoté dans mes codes. J’ai enlevé tout les espaces aprés les «  » et voilà ca a marché.

  44. Bonjour!

    J’ai adoré votre tuto, et suis parvenue à régler certains problèmes… sauf qu’il m’en reste un: j’ai 2 champs de plus que vous, et lorsque je mets le code en place, en le vérifiant avec F5, il me dit :

    « Erreur d’exécution ‘9’
    L’indice n’appartient pas à la sélection »

    Pourriez-vous me dire pourquoi?
    J’ai pensé que cela venait peut-être des lettres, qui ne vont pas assez loin, mais même en les changeant, je ne résous pas le problème… J’y vais à l’aveugle, il faut dire, c’est mon premier VBA.

    En tous cas, merci infiniment de ce tuto!
    Cordialement,
    Sasha

    1. Bonjour!

      Jai le même soucis que Sasha
      j’ai 2 champs de plus que vous, et lorsque je mets le code en place, en le vérifiant avec F5, il me dit :

      « Erreur d’exécution ‘9’
      L’indice n’appartient pas à la sélection »

      merci pour votre tuto

  45. Bonjour.

    Je vous remercie tout d’abord pour ce tuto, vraiment très simple et bien fait! Par contre, lorsque j’ai rentré les codes, il y a un problème au niveau « Nouveau Contact » sur la ligne :

    L = Sheets( » Clients « ).Range(« a65536?).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Il m’affiche:

    Erreur de compilation. Attendu: séparateur de liste ou )

    J’ai essayé de placer une parenthèse mais ça ne change rien du tout.
    Qu’en pensez-vous? Ca ne doit pas être grand-chose, mais du coup je ne peux pas aboutir sur la macro.

    Merci en tous cas!
    Cordialement
    Sasha

    1. Bonjour Sasha,

      le problème que tu rencontres va sûrement arriver à tout le monde puisque que le code que tu copies est correct dans la forme mais comporte quelques petites erreurs (de compatibilité entre navigateur/logiciel).

      Cette ligne : L = Sheets( » Clients « ).Range(« a65536?).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

      à cet endroit précis : Range(« a65536?) –> Le ? doit être remplacé par un guillemet  » !

      Des anguilles de ce genre se glissent un peu partout, rien de très méchant quand on relis bien ! 😉

      Bonne correction !

    2. Il faudrait corriger votre code comme suit :

      L = Sheets( » Clients « ).Range(« a65536?).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

      Faire plutôt ceci :

      L = Sheets(«Clients» ).Range(«a65536″).End(xlUp).Row + 1

      Voilà je crois que celà devrait marcher normalement.

  46. Bonjour
    J’ai essayé le tuto super, sauf un problème dans les lignes de commande, est ce qu’il fonctionne sous la version 2007
    .AddItem Ws.Range(« A » & J)
    Next J
    Merci par avance d’une réponse

  47. Bonjour,

    Je souhaite réaliser une seconde userform dans le meme classeur Excel. Si j’initialise le formulaire avec « Pour le formulaire Private Sub UserForm_Initialize() » j’ai une erreur excel « objet introuvable »

    Par contre, lorsque j’initialise avec ‘Pour le formulaire Private Sub UserForm2_Initialize() » cela fonctionne mais mes combobox ne sont pas opérationnelles. Le menu reste vide.

    Pouvez vous m’aider ?

    Merci
    James

  48. Bonjour

    j’ai un problème peut-être très simple pour vous, mais pas moyen de trouver ! ! Pourriez-vous me dire comment écrire en VBA que dans la Colonne A:A la valeur 1 devient 2 et la valeur 2 devient 1. Je vous en remercie beaucoup

  49. bonjour,

    merci pour le tuto
    en revanche je ‘arrive pas à le mettre en pratique car je ne trouve pas la base excel dans mon espace membre?

    merci de votre aide

  50. bonjour, et bravo pour ce tutoriel que je n’ai pas encore mis en oeuvre mais qui semble excellent
    j’ai une demande préalable avant de me lancer dans un formulaire perdonnalisé : comment obtenir dans le formulaire de base excel la fonction « dupliquer la fiche courante »?
    Le but est de ne corriger que certains champs de cette copie pour saisir une nouvelle fiche qui a plein de champs en commun avec la précédente…
    merci
    cdlmt,
    RT

  51. Bonjour,
    Dans la partie « modifier », à quoi correspond le « ListIndex » ? Est-ce quelque chose de propre à votre macro ?
    Car en créant ma propre macro, je mets les données qui correspondent à mes choix et le « ListIndex » ressort en erreur « Erreur de compilation, membre de méthode ou méthode de donnée introuvable ».
    Merci d’avance.

  52. Bonsoir, merci pour ce tuto, vraiment tres bien fait.

    Je souhaiterai savoir si lorsque je remplie par exemple une texbox1 il est possible que automatiquement une autre texbox est exactement la même valeur ?
    En fait je souhaiterai remplir 2 texbox avec la même valeur sans avoir a recopier a chaque fois ?

    Merci

  53. Bonjour, j’ai suivi ce cours et j’ai pensé que vous pourriez m’aider.
    voilà, j’ai fait un formulaire de saisie sur excel avec des frame et liste déroulante.

    Problème : après saisie les données ne s’enregistrent pas sur mon classeur.

    Si vous avez des pistes de réflexion. Merci

    cldt

  54. Bonjour,

    Déjà merci pour ce tuto qui m’a bien aidé pour la création de mon formulaire. Je voudrais savoir comment faire pour avoir dans ma combobox1 le nom et prénom qui s’affiche au lieu du numéro client ?

    Merci d’avance

    Yann

  55. Bonjour,

    Déjà merci beaucoup pour ce auto il m’a beaucoup aidé pour la création d’un formulaire. Je voudrais savoir comment faire pour avoir dans ma combobox1 le nom et prénom qui s’affiche au lieu du Numero Client.

    Merci d’avance

  56. j’ai oublié un souci : mon onglet s’appelle fichier clients repertoire 2015;
    Quand j’ai voulu le changer entre les guillemets et remplacer « clients », message d’erreur du même genre et mon mot « clients » dans mon nouveau titre d’onglet est surligné.
    Que dois je faire?

  57. Bonjour et merci tout d’abord pour votre vidéo très bien expliquée pour des personnes novices comme moi avec excel.
    Je suis pas à pas votre création en faisant la même chose sur excel et j’ai déjà un petit message d’erreur qui ne cesse de revenir. J’en suis au copier coller de vos formules :

    Pour le bouton Nouveau contact, saisissez à la suite :

    ‘Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(« Clients »).Range(« a65536″).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    [etc etc]

    Outre le fait que je doive comme vous le précisez refaire l’apostrophe pour que les petites annotations passent en vert, je dois également enlever les espaces entre les guillemets pour que les formules deviennent ou bleues ou noires, et j’ai une erreur qui persiste sur :
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    j’ai enlevé les espaces entre les guillemets et les mots pour que les formules rouges deviennent noires ou bleues, mais j’ai un message d’erreur sur le l » de « l’insertion » :

    microsoft visual basic pour application
    erreur de compilation
    attendu : séparateur de liste ou )

    je ne sais pas ce que cela veut dire et j’ai tout essayé ce que je pouvais, supprimer l’apostrophe, mettre un L majuscule, rapprocher le ?, l’écarter, écarter la parenthèse ( de MsgBox, la rapprocher…..etc,
    mais rien n’y fait.
    Pouvez vous l’aider?
    Merci d’avance

    PS j’ai une autre question,
    pourrais je ensuite une fois le tableau fini faire des filtres, pour rechercher non seulement par le code client ou la civilité, mais aussi par le nom du client ou la ville etc? Et comment cela se fait?

  58. bonjour a tous et bonne année,
    je voudrai supprimer la ComboBox, N°2 c’est à dire les civilités, mais je suis un peu perdu pour le code VBA, tout ce que j’essai me renvoi un message d’erreur, je suis perdu pouvez vous m’aider?
    merci d’avance

  59. Bonjour,
    Il a quelques temps j’ai utilisé votre précieux formulaire, que j’ai réadapté en fonction de mes besoins (un grand merci au passage).
    Celui-ci fonctionnait bien jusqu’à maintenant où je me rencontre avec une Erreur 1004.

    J’ai créé une textbox qui me permet d’avoir une zone compte rendu dans le formulaire. Or, lorsque cette zone de commentaire dépasse les 8202 caractères, la macro plante et m’affiche l’erreur 1004.

    bug sur nouvelle entree: Range(« O » & Ligne_der).Value = TextBox13
    bug sur un formulaire que je modifie et qui atteind les 8203 caractères: Ws.Cells(Ligne, i + 2) = Me.Controls(« TextBox » & i)

    A l’inverse, si je tape mes données dans la cellule qui correspond dans le tableur, j’ai mon compte rendu qui s’affiche integralement dans mon formulaire.

    Etant novice, je ne sais pas s’il faut que je rajoute une variable ou des codes en plus pour que ces modifs soient acceptées.

    Je précise que la propriété de la textbox et paramétré en illimité apriori (maxlength 0)

    Merci beaucoup pour l’aide que vous pourrez peut être m’apporter.

  60. serait t’il possible de m’envoyer un fichier déjà fait car dans le cadre de mes études j’ai besoin de créée un fichier client pour des professionnelles et cela compte pour l’obtention de mon bts ??
    car cela fait déjà 10 fois que je recommence et cela bloque toujours à la fin …
    merci d ‘avance et de votre compréhension

  61. Bonjour,
    je viens de suivre votre tuto. Et tout fonctionne très bien. Bien évidemment, je souhaiterai l’adapter pour un de mes tableaux. Pour cela j’aurai 4 questions :

    1er Q – dans mon tableau actuelle qui est en feuille « A », je fais référence à une liste qui est en feuille « B ». je n’arrive pas à faire apparaitre cette liste dans une Combobox.

    2°Q – quand je lance mon formulaire pour 1ère ouverture, j’ai tous les champs vides. ce qui est parfait pour saisir un nouveau contact. mais si je dois rajouter un contact, les données du contact précédent est toujours visible dans les champs, comment je peux faire pour que juste après la saisie du premier contact, les données s’effacent laissant ainsi des champs vides

    3°Q -Si je veux faire 2 actions dans mon formulaire. Dans l’ordre modifier un contact et en ajouter un, je retrouve le même PB qu’à ma question 2. je dois faire attention de bien remplacer les infos du contacts modifier par les infos de mon contact à ajouter. Est-il possible de faire comme ci-dessus, effacer les données après modification???

    4°Q – Enfin, et promis je ne vous embête plus, Comment actualiser automatiquement ma liste de la ComboBox « code client » après la saisie d’un nouveau client. Il faut fermer le formulaire et le ré-ouvrir pour que la liste s’actualise. Pas très pratique….

    Merci d’avance pour toutes vos réponses

  62. Bonjour,
    Merci pour ce tuto, j’ai une question, comment fait-on pour avoir comme vous une ligne sur 2 qui se colorie quand on la remplie, s’il-vous-plaît, ou alors ou je peux trouver l’explication,je cherche mais je n’ai pas trouvé?
    Merci d’avance
    Stéphanie

  63. Bonjour,

    Déjà j’aimerais commencer par vous remercier car j’ai pu faire mon formulaire personnalisé tout seul !
    Beau travail.

    Néanmoins j’ai une petite question …

    J’arrive a ajouter autant de TextBox que je veux .. mais aucune ComboBox à choix déroulant.

    Je m’explique :

    J’aimerais par exemple au lieu de ma TextBox11 avoir une ComboBox3 avec un choix déroulant.

    Qu’elle est la formule ?

    J’ai essayé un tas de truc mais sans succes, il y’a toujours une erreur

    Merci

  64. bonjour, je suis bloqué au moment où il faut rentrer : UserForm1.Show vbModeless. entre deux lignes
    est-ce la bonne écriture ?

    Sub Lancer_formulaire()
    UserForm1.Show vbModeless.
    End Sub

    merci d’avance

      1. oui dans le fichier feuille, cela s’appel bien UserForm1
        et quand j’écrit ça :

        Sub Lancer_formulaire()
        UserForm1.Show vbModeless.
        End Sub

        et bien le UserForm1.Show vbModeless. apparaît en rouge …..

  65. Bonjour

    Aprés de longue recherche je cherche comment il faut faire pour que je puisse avoir une donnée d’une cellule dans ma textbox mais directement aprés changement, car pour le moment je dois cliquer dans ma textbox puis faire un espace ce qui est vraiment embêtant ? auriez-vous quelque chose à me proposer. Je vous en remercie

  66. Bonjour,

    J’ai utilisé ce tutoriel que j’ai adapté à ma façon. Tout fonctionne bien.
    Cependant plutôt que d’afficher les données que je veux intégrer sur une ligne, je voudrai les afficher sur Excel sur une colonne, par exemple dans les cases B1, B2, B3…mais je n’arrive pas à les afficher :
    J’ai écris ceci :
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Confirmez-vous l’insertion de cette saisie ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    L = Sheets(« Donnees »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range(« B1 » & L).Value = Me.ComboBox1
    Range(« B2 » & L).Value = Me.ComboBox2
    Range(« B3 » & L).Value = Me.TextBox1
    Range(« B4 » & L).Value = Me.TextBox2
    Range(« B5 » & L).Value = Me.TextBox3
    Range(« B6 » & L).Value = Me.TextBox4
    Range(« B7 » & L).Value = Me.TextBox5
    Range(« B8 » & L).Value = Me.TextBox6
    Range(« B9 » & L).Value = Me.TextBox7
    Range(« B10 » & L).Value = Me.TextBox8
    Range(« B11 » & L).Value = Me.TextBox9
    Range(« B12 » & L).Value = Me.TextBox10
    Unload Me
    Load frmSaisie
    frmSaisie.Show
    End If

    End Sub

    Je pense que l’erreur vient de L mais je ne comprends pas ce qui cloche.
    Merci de votre aide.

      1. Pour les guillements, c’est la mise en forme qui s’est mal faite.
        J’ai vérifié et j’ai :

        Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox(« Confirmez-vous l’insertion de cette saisie ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
        L = Sheets(« Donnees »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
        Range(« B1 » & L).Value = Me.ComboBox1
        Range(« B2 » & L).Value = Me.ComboBox2
        Range(« B3 » & L).Value = Me.TextBox1
        Range(« B4 » & L).Value = Me.TextBox2
        Range(« B5 » & L).Value = Me.TextBox3
        Range(« B6 » & L).Value = Me.TextBox4
        Range(« B7 » & L).Value = Me.TextBox5
        Range(« B8 » & L).Value = Me.TextBox6
        Range(« B9 » & L).Value = Me.TextBox7
        Range(« B10 » & L).Value = Me.TextBox8
        Range(« B11 » & L).Value = Me.TextBox9
        Range(« B12 » & L).Value = Me.TextBox10
        Unload Me
        Load frmSaisie
        frmSaisie.Show
        End If

        End Sub

        1. Bonjour,
          Je pense que votre problème vient que L est en colonne A… obligatoirement car vous partez de A65536 pour remonter ensuite. Donc il ne fait pas la sélection.
          Ce qu’il faut faire, c’est utiliser ce fonctionnement sur la première colonne A et ensuite, utiliser la commande OFFSET pour décaler d’une colonne avant chaque indication de valeur.

  67. Bonjour, je viens de voir ce tuto qui est vraiment sympa mais j’ai un souci que je n’arrive pas à régler.
    Pour ma liste déroulante Code client, quand je clique dessus j’ai déjà un nombre de lignes, ces lignes correspondes à mes cellules qui sont au dessus de mon tableau.

    Comment faire pour que dans ma ComboBox1 il n’y es que les lignes de mon tableau et rien d’autre?

    Merci

    1. Bonjour,
      Le code a été prévu pour coller exactement au descriptif donné par Lydia. Si votre format est différent, il vous faut identifier la colonne concerné par votre combobox et décaler le ListIndex + 2 en modifiant le +2 en fonction du nombre de ligne qu’il faut.

      1. Mon format est le même, juste au dessus de mon tableau j’ai 4 lignes qui sont hors tableau et pourtant dans le combobox1 elles sont inscrites.
        En faite le combobox prend l’intégralité de la colonne.

        J’ai beau essayé avec un Rowsource ça ne fonctionne pas non plus.

          1. ça a été mon 1er reflex de modifier le listindex mais que je mette n’importe quelle valeur ça ne change rien du tout, j’ai toujours au dessus de ma 1ere valeur tableau, les 4 valeurs hors tableau mais de la même colonne soit A1, A2, A3 et A4.

          2. Bon je ne devais pas avoir les idées claires. La ligne qui doit être modifiée se trouve plus haut.
            Au lieu de For J=2 To… il faut modifier le 2 pour coller au numéro de ligne de votre tableau.
            Ça devrait aller mieux.

          3. Oui j’ai vu ça hier que s’était le J a modifier mais derrière ça ne suit plus, je suis dessus, mais cellules ne sont plus les bonnes.

          4. Petite question en changeant le J en J = 4, comment je fait pour ensuite dire de lire ma colonne B et H ?

            Dans mon combobox ça me marque la colonne C et D

            j’y arrive pas :/ merci

          5. Je me suis peut être mal exprimé.

            J’ai actuellement une « combobox » et deux « TextBox », quand je clique sur ma combobox maintenant j’ai bien mes chiffres (depuis que j’ai changé la valeur de J), mon TextBox1 fonctionne bien car j’ai la bonne valeur soit ma cellule B4, par contre, mon TextBox2 me donne pour valeur ma cellule C4 alors que je souhaits la valeur de ma cellule H4.

            Une petite idée du code?

            Merci

          6. C’est difficile à dire dans la mesure où le code fourni devrait vous dispenser de ces problèmes. Ça vient d’une adresse que vous n’avez pas modifiée dans votre adaptation.

  68. Bonjour,
    Tout d’abord merci pour ce tuto qui est super bien fait.
    Une petite adaptation serait génial pour moi.
    Je voudrai créer plusieurs combobox qui iraient chercher les données dans une feuille dédiée et à un emplacement bien défini.
    Avez vous une solution rapide .?

    Merci beaucoup

    1. Bonjour, il faut indiquer aux combobox d’aller rechercher les informations nécessaires avec un simple =. Le mieux est de nommer les cellules puisque vous utilisez plusieurs feuilles.

      1. Je n’arrive pas à afficher mon compteur, mais je vais bien finir par y arriver…

        Mon problème suivant est :J’ai une feuille « Fourniseurs » avec en colonne A le numéro de SIRET de chacun et en colonne B leur nom.
        Sur mon Userbox j’ai donc une textbox pour le numéro et un second pour le nom, ce que j’aimerai arrivé à faire c’est que quand je tape le n°, le nom s’affiche automatiquement. Je ne sais si cela est possible, c’est le principe du RECHERCHEV dans Excel.

        Merci de me venir en aide.

  69. C’est encore moi ! ! !

    Je vous joint mon projet par ce lien:

    http://cjoint.com/?DJDwvLNQXhO

    Je rencontre 2 problèmes:

    Le premier, c’est que la liste déroulante de numérotation client (numéro d’enregistrement chez moi) ne fonctionne pas, mais je vois pas pourquoi, pouvez-vous m’aidez?

    Deuxième problème, lorsque je clique sur le bouton modifier j’ai un message d’erreur qui me renvoie à la composition du code du bouton modifier.

    En espérant que vous pourrez m’aider.

    Merci d’avance

    Thom

    1. Thom,
      Pouvez-vous nous dire quelles sont les erreurs que vous avez ? C’est plus simple de savoir sur quoi on part que de revoir tout le code.
      Avez-vous excuté la macro en pas à pas ? ce serait idéal pour savoir quand ça bloque, ce qui marche ou ne marche pas.
      Merci

  70. C’est encore moi.

    J’ai terminer mon projet, cependant la fonction Nouveau client (Numéro d’enregistrement dans mon code) ne fonctionne pas.

    Il faut savoir que mon tableau sera vierge au premier usage, donc je pense qu’il faut lui créer un code pour qu’il créé le premier numéro, mais je vois pas comment.

    Est-ce que quelqu’un peux m’aider.

    Merci Merci 🙂

    Voici mon code:
    Private Sub TextBox15_Change()

    End Sub

    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox1.ColumnCount = 1 ‘Pour la liste Enregistreur demande
    ComboBox1.List() = Array(« SLR », « FFD », « APT », « TPT »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 3 To Ws.Range(« C » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« C » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Demandeur
    ComboBox2.List() = Array(« Client », « MSI », « RBE », « SLS », « SLR », « FFD », « APT », « TPT »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox2
    For J = 3 To Ws.Range(« D » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« D » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox3.ColumnCount = 1 ‘Pour la liste Marque
    ComboBox3.List() = Array(« AEG », « AQUAVAC », « ARISTON », « ASTORIA », « BEKO », « BERGHOFF », « BLANCO », « BOSCH », « BRANDT », « BRANDY BEST », « CADEL », « CALOR », « CANDY », « DE DIETRICH », « DEVILLE », « DOMENA », « DYSON », « ELECTROLUX », « ERARD », « EWT », « FALCON », « FAURE », « FRANKE », « GODIN », « GROHE », « GRUNDING », « HAIER », « HANSGROHE », « HOOVER », « HOTPOINT », « INDESIT », « INVICTA », « ISOTIP JONCOUX », « KITCHENAID », « KRUPS », « LADEN », « LAGRANGE », « LEISURE », « LG », « LIEBHERR », « MAGIMIX », « MIELE », « MOULINEX », « NILFISK », « PANASONIC », « PHILIPS », « RIVIERA&BAR », « ROBLIN », « ROSIERE », « ROWENTA », « SAMSUNG », « SAUTER », « SCHOLTES », « SEB », « SIEMENS », « SIMEO », « SMEG », « SUPRA », « TEFAL », « TEN », « VEDETTE », « VIVA », « WHIRLPOOL », « WHITE&BROWN »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox3
    For J = 3 To Ws.Range(« J » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« J » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox4.ColumnCount = 1 ‘Pour la liste Enregistreur Retour
    ComboBox4.List() = Array(« SLR », « FFD », « APT », « TPT »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox4
    For J = 3 To Ws.Range(« N » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« N » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox5.ColumnCount = 1 ‘Pour la liste Produit retourné
    ComboBox5.List() = Array(« OUI », « NON »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox4
    For J = 3 To Ws.Range(« O » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« O » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox6.ColumnCount = 1 ‘Pour la liste Dépôt de destination
    ComboBox6.List() = Array(« 00 Pacé », « 10 Avranches », « 02 Pacé », « 12 Avranches », « SAV Pichon », « SAV Pacé »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox6
    For J = 3 To Ws.Range(« S » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« S » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox7.ColumnCount = 1 ‘Pour la liste Etat produit retourné
    ComboBox7.List() = Array(« Conforme à la demande », « NON conforme à la demande », « Autre »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox7
    For J = 3 To Ws.Range(« Q » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« Q » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox8.ColumnCount = 1 ‘Pour la liste Enregistreur de l’avoir
    ComboBox8.List() = Array(« SLR », « FFD », « APT », « TPT »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox8
    For J = 3 To Ws.Range(« V » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« V » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    ComboBox10.ColumnCount = 1 ‘Pour la liste Retour effectué par
    ComboBox10.List() = Array(« Camion Joncoux », « Transporteur », « Client », « Commercial »)
    Set Ws = Sheets(« Feuil1 ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox10
    For J = 3 To Ws.Range(« T » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« T » & J)
    Next J
    End With
    For I = 1 To 15
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    End Sub

    ‘Pour la liste déroulante Numéro d’enregistrement

    Private Sub ComboBox9_Change()

    Dim Ligne As Long

    Dim I As Integer

    If Me.ComboBox9.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox9.ListIndex + 2

    ComboBox9 = Ws.Cells(Ligne, « A »)

    For I = 1 To 15

    Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)

    Next I

    End Sub

    ‘Pour le bouton Nouvelle demande

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(« Feuil1 »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(« A » & L).Value = ComboBox9

    Range(« B » & L).Value = TextBox1

    Range(« C » & L).Value = ComboBox1

    Range(« D » & L).Value = ComboBox2

    Range(« E » & L).Value = TextBox2

    Range(« F » & L).Value = TextBox3

    Range(« G » & L).Value = TextBox4

    Range(« H » & L).Value = TextBox5

    Range(« I » & L).Value = TextBox6

    Range(« J » & L).Value = ComboBox3

    Range(« K » & L).Value = TextBox7

    Range(« L » & L).Value = TextBox8

    Range(« M » & L).Value = TextBox10

    Range(« N » & L).Value = ComboBox4

    Range(« O » & L).Value = ComboBox5

    Range(« P » & L).Value = TextBox9

    Range(« Q » & L).Value = ComboBox7

    Range(« R » & L).Value = TextBox11

    Range(« S » & L).Value = ComboBox6

    Range(« T » & L).Value = ComboBox10

    Range(« U » & L).Value = TextBox12

    Range(« V » & L).Value = ComboBox8

    Range(« W » & L).Value = TextBox14

    Range(« X » & L).Value = TextBox13

    Range(« Y » & L).Value = TextBox15

    End If

    End Sub

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de cette demande ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    Ws.Cells(Ligne, « B ») = ComboBox2

    For I = 1 To 15

    If Me.Controls(« TextBox » & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)

    End If

    Next I

    End If

    End Sub

    ‘Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

      1. Bonjour,

        J’ai 2 en-têtes, donc la numérotation de mon « numéro d’enregistrement » commence en ligne 3, sur la colonne A.

        J’espère que cette info va vous aider.

        En tout cas un grand merci.

        Thom

  71. Bonjour,

    Ce Tuto est top.

    J’aurais voulus savoir, si sur un formulaire il était possible de mettre un ComboBox pour sélectionner la feuille sur laquelle les infos devront être enregistrés.

    En vous remerciant d’avance.

    Thom

      1. Merci Lydia pour cette réponse.

        Je bloque depuis ce matin, sur le problème suivant:

        Dans mon formulaire j’ai 9 ComboBox au total, j’arrive à faire fonctionner que la première, les autres ne veulent pas se remplir.

        Comment faire dans le code pour programmer plusieurs Combobox, indépendantes les unes de autres.

        En vous remerciant par avance.

        Thom

  72. Bonjour;
    Je tiens à vous remercier tous pour ces précisions, et surtout à lydia pour ce tutorat. En fait j’ai bien apprécié la méthodologie et j’ai appris pas mal de choses.

    Par contre, je reste null au niveau du langage VBA!!!
    j’ai projet d’étude que je dois rendre, mais ça bug et je ne sais pas comment m’y prendre!!!
    le projet et de en fait de chercher un code parmi une une liste qua j’ai sur Excel, et de la completer avec des données que je dois remplir!!!
    Serait il possible de m’aider?

    Merci d’avance
    Khadija

    1. Bonjour Khadija,
      Normalement, ce tutoriel devrait vous aider facilement à ce genre de choses. Alors dans un premier temps, je peux vous conseiller de vérifier la structure de votre fichier pour voir si elle s’adapte aux références données par Lydia. Ensuite, si cela ne change rien, donnez nous un peu plus de détails sur votre problème et nous essayerons de trouver une solution.

      1. Merci beaucoup.
        En fait je suis toujours au dessus, le langage n’est pas facile, :p
        Il n’y a pas une plate forme, où on peut échanger en direct?!!

        1. Bonjour,

          Avez-vous essayé le code qui se trouve dans le fichier txt en bas de l’article ? Car, comme l’a indiqué Thierry, en suivant le tutoriel, vous devriez pouvoir naviguer facilement parmi les lignes de votre fichier.

          Et non, il n’y a pas de plateforme pour échanger en direct, ce site est un blog et non un forum 😉

  73. bonjour Lydia;
    j’ai eu un code d’erreur
    le numéro de l’erreur c’est le ‘9’
    l’indice n’appartient à la sélection.
    je suis un peu perdu. 🙁

    1. Bonjour Kamel,
      Avez-vous modifié les références de cellules dans votre tableau ? ou ajouté des champs ? Il semble que vous ayez une référence qui soit en dehors des limites définies par le code.
      Ça veut dire qu’il va falloir adapter les limites. Avez-vous pu identifier à quel moment s’arrête votre code et donc sur quelle ligne ? cela permettrait de savoir quelle limite il faut changer.

  74. Bonjour !
    Votre tutoriel m’a bien avancé cependant je reste un peu bloqué.
    En effet :
    -Le code client commence avec des lignes blanches car j’ai plusieurs lignes d’en-têtes
    -Lorsque j’ajoute un client il s’ajoute a la fin de mon tableau déjà créé
    -Et lorsque je clique sur un client rentré, la plupart des informations sont décalés.
    Pourrais-je me permettre de vous demandez un peu d’aide car je suis plus que novice en matière de VBA
    Cordialement

    1. Bonjour François, J’ai eu aussi ce problème quand j’ai transformé ce code pour un modèle de gestion de fournitures pour le site http://www.Kalligo.com
      Peut-être pourriez-vous vous en inspirez ? il s’agit d’un décalage des références que vous avez entre votre tableau et l’exemple traité par Lydia.
      L’adresse pour voir le document est : http://www.kalligo.com/modele-lettre/organiser/classer/1106-tableau-commande-fournitures.htm

  75. Bonjour,

    Tout d’abord merci pour cet article ! En une journée j’ai pu comprendre beaucoup de chose du language VBA, merci pour tout.

    Seulement je rencontre un problème lorsque je copie/colle le code et que j’appuie sur F5; j’ai une fenetre qui apparait « erreur de compilation: erreur de syntaxe », à ce moment là le « Private Sub Userform_Initialize () » ce surligne en jaune. Pouvez-vous m’éclairer sur mon problème ?

    Bonne fin de journée à tous !

      1. Bonjour,

        Merci de votre réactivité ! Après avoir renommé en UserForm 1, celà à fonctionné un temps, c’est maintenant la ligne « Private Sub ComboBox1_Change() » qui est surlignée en jaune et revient en érreur avec une « erreur compilation ».

        Cordialement.

          1. Bonjour,

            Avec l’erreur compilation il y a « erreur syntaxe ». De plus dans la Combo box lorsque je lance avec F5 la liste déroulate n’apparait pas.

            Merci d’avance.

  76. Bonjour
    merci pour ce travail qui m’a beaucoup aidé .
    si vous pouvez m’aider je serais très reconnaissant
    je voulez ajouter un nouveau bouton « recherche » car j’ai un tableau qui contien plus que 313 personnes et c’est très difficil de trouver un contact
    j’attends avec patience votre réponse
    merci

    1. Salut voici un petit bout de code simplifier pour rechercher et sélectionner une cellule dans une colonne de tableau à insérer dans un bouton…

      Dim da TaRecherche As String, AdresseResultat As String
      Dim Trouve As Range, Colonne As Range

      TaRecherche = TextBox1.Value ‘Marche avec combobox et autres…

      Set Colonne = Sheets(« Nom de ta feuille »).Range(« Nom de ton tableau »).Columns(1)’Numéro de la colonne de la recherche
      Set Trouve = Colonne.Cells.Find(what:=TaRecherche, LookAt:=xlWhole)
      AdresseResultat = Trouve.Address
      ‘AdresseResultat correspond à ta cellule
      AdresseResultat.Select

  77. Bonjour le Monde, j’espère que vous vous portez tous bien

    j’ai une question svp:

    j’ai un signal que je peut récupérer d’un capteur, je veux utiliser ce signal dans une macro pour jouer le rôle d’un bouton
    une fois le signal arrive dans excel ou je sais pas quoi, ma macro se lance.

    est ce que vous avez une idée?

    merci d’avance

    1. Bonjour Joseph,
      Ce point dépasse mes compétences actuelles. Je pense que cela fait appel à des liaisons entre Microsoft Office et le logiciel de votre capteur (il faut les connaître) et savoir utiliser le déclencheur.
      Je pense que ça fait appel à des connaissances de développeur et je ne sais pas où vous pourriez trouver ça.
      Bon courage

      1. Un grand Merci à vous , en fait y’a pas de logiciel pour le capteur, je peux récupérer le signal avec le port RS232 mais je sais pas comment faire pour l’intégrer dans excel.

        en tout cas merci bcp

  78. Bonjour,

    Votre tuto est excellent et j’ai suivi pas à pas vos conseils mais sa ne fonctionne pas , il me met erreur 1004 dans range pour worksheet ..

    J’aimerai bien que vous puissiez m’aider car vba code j’y connais pas.
    Voici un copier/coller de ce que j’ai fais :
    Option Explicit
    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array( » « ,  » M. « ,  » Mme « ,  » Mlle « )
    Set Ws = Sheets(« Donnee ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range( » A  » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range( » A  » & J)
    Next J
    End With
    For I = 1 To 11
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne,  » B « )
    For I = 1 To 11
    Me.Controls( » TextBox  » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub

    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox( » Confirmez-vous l’insertion de ce nouveau contact ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
    L = Sheets( » Donnee « ).Range( » a65536″).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range( » A  » & L).Value = ComboBox1
    Range( » B  » & L).Value = ComboBox2
    Range( » C  » & L).Value = TextBox1
    Range( » D  » & L).Value = TextBox2
    Range( » E  » & L).Value = TextBox3
    Range( » F  » & L).Value = TextBox4
    Range( » G  » & L).Value = TextBox5
    Range( » H  » & L).Value = TextBox6
    Range( » I  » & L).Value = TextBox7
    Range( » J  » & L).Value = TextBox8
    Range( » K  » & L).Value = TextBox9
    Range( » L  » & L).Value = TextBox10
    Range( » M  » & L).Value = TextBox11
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox( » Confirmez-vous la modification de ce contact ? « , vbYesNo,  » Demande de confirmation de modification « ) = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne,  » B « ) = ComboBox2
    For I = 1 To 11
    If Me.Controls( » TextBox  » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls( » TextBox  » & I)
    End If
    Next I
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

  79. Bonjour! tout d’abord je vous remercie pour ce tuto extrêmement bon, il m’a bcp aider pour mon startup application, j’ai une question toute bête( car je suis nv en VBA :p ), lorsque je veux ajouter qlq chose dans la première ligne vide, une erreur se produite au niveau de cette ligne :
    L = Sheets(« Feuil1 »).Range(« a65536? »).End(xlUp).Row + 1
    avec un message: Erreur d’exécution.

    je serais très reconnaissant si vous pouvez m’aider en ça
    merci d’avance
    cordialement

        1. j’ai enlevé le point d’interrogation et ça a marché sans problème, est ce que votre code fonctionne avec( je sais mm pas ce que ça veut dire (« a65536 »).
          est ce que vous pouvez me renseigner sur quoi je doit utiliser pour effectuer une recherche dans le tableau en parcourant seulement la première colonne?
          Merci pour votre aide.

          1. Bonjour JOSEPH,
            Le soucis est que ton code enfin, ce code récupérer la dernière ligne de tableau non vide + 1(ligne) pour en créer une par la suite, cependant un tableau sur excel contient toujours une ligne, même vide, donc il faut que tu mettes une lettre, un point, un chiffre ou ect…) dans une cellule de la première ligne pour que ton code fonctionne. Mais je ne connais pas le code pour éviter cela.

            Pour rechercher par exemple une date dans la première colonne et en sélectionner la ligne sur une certaine feuille(ou pas !) ce code devrait t’aider.

            ‘Là, tu déclares t’es variables
            Dim Res As Range, Col As Range
            Dim Dem As Date
            Dim AdRes As String
            Dim Ll As Integer
            ‘Dem correspond à ta recherche,
            ‘ici on recherche la date qu’il y à dans la cellule N1 mais on peut utiliser une textbox
            Dem = Range(« N1 »).Value
            ‘On recherche dans la feuille Stock dans le Tableau4 (ou « a65536 ») et dans la première colonne
            Set Col = Sheets(« Stock »).Range(« Tableau4″).Columns(1)
            ‘On lance la recherche
            Set Res = Col.Cells.Find(what:=Dem, LookAt:=xlWhole)
            ‘On recherche et msgbox si sa ne trouve pas
            If Res Is Nothing Then
            AdRes = Dem &  » n’est pas présent dans  » & Col.Address
            Else
            ‘On récupère le résultat de la recherche et on le convertis en adresse
            AdRes = Res.Address
            End If
            ‘Histoire qu’on puisse récupérer le numéro de ligne et la séléctionner
            Ll = Sheets(« Stock »).Range(AdRes).Row
            Sheets(« Stock »).Activate
            Rows(Ll).Select

            J’ai fais sa à la va vite mais j’espère que ça t’aidera.
            Bon codage !

          2. Je me rectifie…
            Sa ne marché pas à cause de ton point d’interrogation, mais en faite je pensais que tu faisais référence à l’erreur qu’il se produit quand tu n’as aucune ligne dans le tableau…

          3. Merci dreazzz pour votre réponse,
            en fin je fait ce que vous avez dit, mais le problème c’est dans l’affichage des informations qui sont dans les cellules de la ligne trouvé
            voilà le code que j’ai faite suite à votre aide
            ‘ chercher et afficher l’existance d’une bobine
            Private Sub commandbutton2_Click()
            Dim Res As Range, Col As Range
            Dim Id As Integer
            Id = TextBox1
            Set Col = Sheets(« BDD »).Columns(1)
            Set Res = Col.Cells.Find(what:=Id, LookAt:=xlWhole)
            If Res Is Nothing Then
            MsgBox « Bobine inéxistante!! », vbExclamation, « Message Erreur »
            Else
            MsgBox « la bobine existe!! », vbExclamation, « Message Erreur »
            End If
            End Sub

            mnt je cherche à afficher dans les textesboxs les cellules de toute la ligne

            merci infiniment

          4. Si j’ai bien compris c’est pour éviter modifier une ligne existante ?
            S le code que tu as envoyé marche cela veux dire qu’il récupère la cellule tu convertis sa en numéro de ligne, c’est à dire tu déclares un string et un integer… Look plutôt :
            AdRes As string
            Ll As integer
            AdRes = Res.Address
            Ll = Sheets(« Stock »).Range(AdRes).Row
            ‘Ll devient ton numéro de ligne et à partir de la
            TextBox2 = Range(« B » & Ll).Value
            TextBox3 = Range(« C » & Ll).Value
            Je ne suis pas sure du code je n’es pas la main sur excel mais si ça ne marche pas je me pencherai sur le sujet demain 😉
            Bon codage !

          5. J’ai fait des modifications en suivant les vos remarques, mais ça na malheureusement pas marché 🙁
            voilà la partie concernée du code:

            ‘ 3-chercher et afficher l’existance d’une bobine
            Private Sub commandbutton2_Click()
            Dim Res As Range, Col As Range
            Dim Id As Integer
            Dim AdRes As String
            Dim Ll As Integer
            Id = TextBox1
            Set Col = Sheets(« BDD »).Columns(1)
            Set Res = Col.Cells.Find(what:=Id, LookAt:=xlWhole)
            If Res Is Nothing Then
            MsgBox « Bobine inéxistante!! », vbExclamation, « Message Erreur »
            Else
            ‘ MsgBox « la bobine existe!! », vbExclamation, « Message Erreur »
            ‘ AdRes sera l’adress du resultat trouvé
            AdRes = Res.Address
            Ll = Sheets(« BDD »).Range(AdRes).Row ‘ Ll devient le numéro de ligne
            TextBox2 = Range( » B  » & Ll).Value
            TextBox3 = Range( » C  » & Ll).Value
            End If
            End Sub

            merci pour le temps que vous avez m’accordé 🙂

          6. Bonjour JOSEPH,
            Je viens de tester le code et sa marche, je vais donc te l’expliquer plus en détails…
            Si tu n’arrives pas à ajouter mon code directement à ton formulaire, je te conseil de l’essayer ultérieurement..
            Créer un userform, un premier champ texte ou l’on indique la DATE recherché (Text1) et un second champ texte(Text2) qui va récupérer la cellule de la colonne B de la ligne trouver grâce à la date.
            Et un bouton qui va générer le code suivant :

            Private Sub CommandButton1_Click()
            Dim Res As Range, Col As Range
            Dim Dem As Date
            Dim AdRes As String
            Dim Ll As Integer
            Dim dd As Date
            Dim ff As Date

            ‘Les bornes des dates possible à recherché
            dd = (« 01/01/2015 »)
            ff = (« 31/12/2015 »)

            ‘Récupération de la date
            Dem = Text1

            ‘Vérification de la validité de la date en rapport avec les bornes
            If Dem ff Then
            msgBox « Seul l’année 2015 est disponible ! »

            Else

            Set Col = Sheets(« NOM DE TA FEUILLE »).Range(« NOM DE TON TABLEAU »).Columns(1) ‘Indique que l’on recherche dans la première colonne
            ‘On lance la recherche
            Set Res = Col.Cells.Find(what:=Dem, LookAt:=xlWhole)
            ‘Vérification du résultat
            If Res Is Nothing Then
            AdRes = Dem &  » n’est pas présent dans  » & Col.Address
            msgBox AdRes
            Else
            ‘Récupérer l’adresse de la céllule
            AdRes = Res.Address
            ‘Récupération de la ligne sur la variable Ll
            Ll = Sheets(« NOM DE LA FEUILLE »).Range(AdRes).Row
            Sheets(« NOM DE LA FEUILLE »).Activate
            Rows(Ll).Select
            Text2.Value = Range(« B » & Ll).Value
            End If

            End If
            End Sub

            Bon codage !

          7. C BON, j’ai adapté ça pour mon code, heureusement qu’il marche =D
            mais ça a déclencher Un nouveau Problème :/

            en tout vos remarques et propositions ont été très utiles.

            merci bcp (y)

          8. J’ai une question svp

            est ce que je peut écrire dans un textbox une information comme celle là:
            234 456 678
            et saisir chacune dans une cellule dans mon tableau?

            merci

  80. Merci pour ce superbe tuto! Est-il possible d’imprimer chaque fiche Client? peut-on insérer une photo?
    Je souhaite l’utiliser dans le cadre d’une association (formulaires individuels + base de donnée à transférer sur gmail…)

  81. Merci pour ce fabuleux tutoriel je bloquais énormément !

    Cependant, j’aimerais rajouter un bouton dans l’userform qui ouvre le sélecteur de fichier (j’utilise « Application.GetOpenFilename ») et qui insère le fichier sélectionner en lien hypertexte sur la date du formulaire.
    En gros, je n’arrive pas à récupérer le path et à l’insérer en tant que lien hypertexte à la TextBox1…
    Merci de votre aide !
    See you !

      1. Bonjour Lydia,
        D’abord un grand merci pour la précision des réponses que vous apportez aux questions qui vous sont posées. j’ai pleinement apprécié votre tuto sur le formulaire. Ce dernier m’a permis de faire un formulaire d’enregistrement pour mes besoins vis à vis d’un réseau de magasin. Seulement je rencontre un problème qui me bloque sur la finalisation de mon projet. Effectivement la touche modifier me pose problème. Les données s’enregistre correctement quand j’insère de nouveaux éléments (salariés) mais quand je veux modifier l’un d’eux, en sélectionnant leur code, les données rappelées dans le formulaires ne s’intègrent pas au bon endroit. Qui plus est quand j’effectue la modification les données ne se corrigent pas partout voir les éléments se répartissent dans des colonnes autres que celles initialement destinées. J’ai pour autant suivi votre procédure.
        Je n’arrive pas à résoudre ce souci. les éléments qui s’inscrivent correctement en insertion nouvelle, ne se répartissent pas identiquement dans le formulaire lors du rappel. il s’agit des éléments des textbox 6, textbox7 et textbox8 qui s’inscrivent en lieu et place dans les cellules normalement attachées à combobox3,combobox4 et combobox5. Même en modifiant dans le formulaire la modification en confirmant, ne se fait pas dans les cellules.
        Je peux éventuellement vous adresser mon travail si ca vous convient plus.
        Je n’ai pas d’expérience sur vba, c’est mon premier essai et j’avoue que depuis 4 jours j’apprécie la découverte.
        Enfin comment je peux sécuriser le chemin d’un hyperlien vers un doc PDF, affecté à un bouton, pour que ce dernier ne se modifie pas quand je transmet le dossier par mail, à un interlocuteur.
        Merci de votre aide

        Option Explicit
        Dim ws As Worksheet

        Private Sub CommandButton4_Click()
        INSTRUCTIONS.Show
        End Sub
        Private Sub CommandButton5_Click()
        Application.Visible = True
        Application.WindowState = xlMaximized
        Unload Me

        End Sub

        Private Sub Label1_Click()

        End Sub

        Option Explicit
        Dim ws As Worksheet
        Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer

        ComboBox2.ColumnCount = 1
        ComboBox2.List() = Array(«  », « M. », « Mme », « Mlle »)
        ComboBox3.ColumnCount = 7
        ComboBox3.List() = Array(«  », « SRH0001 », « SRH0002 », « SRH0003 », « SRH0004 », « SRH0005 », « SRH0006 », « SRH0007 », « SRH0008 », « SRH0009 »)
        ComboBox4.ColumnCount = 8
        ComboBox4.List() = Array(«  », « Déléguer efficacement », « Conduire des entretiens professionnels », « Développer son intelligence relationnelle », « Gestion de la relation client », « Management de proximité », « Hygiène et sécurité des produits », « Vente des produits à la coupe », « Techniques de vente », « Gestion financière de l’UC »)
        ComboBox5.ColumnCount = 9
        ComboBox5.List() = Array(«  », « 19 sept », « 16 oct », « 5 nov », « 02 et 16 oct », « 20 oct et 03 nov », « 12 et 26 nov », « 17 et 24 oct », « 19 et 25 nov », « 27 nov et 05 dec », « 15 oct », « 06 nov », « 13 nov », « 27 oct et 17 nov », « 18-26 nov et 9 dec », « 20-28 nov et 10 dec », « 13 nov », « 14 nov », « 27 nov », « 04 dec », « 09 dec », « 10 dec », « 24 nov », « 26 nov », « 04 dec », « 05 dec », « 14 et 21 oct », « 22 et 29 oct », « 18 et 26 nov », « 19 sept », « 16 oct », « 05 nov »)
        ComboBox6.ColumnCount = 10
        ComboBox6.List() = Array(«  », « 3244 », « 3305 »)
        Set ws = Sheets(« FORMASALARIÉS »)
        With Me.ComboBox1
        For J = 2 To ws.Range(« A » & Rows.Count).End(xlUp).Row
        .AddItem ws.Range(« A » & J)
        Next J
        End With
        For I = 1 To 8
        Me.Controls(« TextBox » & I).Visible = True
        Next I
        End Sub
        Private Sub ComboBox1_Change()
        Dim Ligne As Long
        Dim I As Integer
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        ComboBox1 = ws.Cells(Ligne, « A »)
        ComboBox2 = ws.Cells(Ligne, « B »)
        ComboBox3 = ws.Cells(Ligne, « H »)
        ComboBox4 = ws.Cells(Ligne, « I »)
        ComboBox5 = ws.Cells(Ligne, « J »)
        ComboBox6 = ws.Cells(Ligne, « K »)
        For I = 1 To 8
        Me.Controls(« TextBox » & I) = ws.Cells(Ligne, I + 2)
        Next I
        End Sub

        Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox(« Confirmez-vous l’insertion de ce nouveau salarié? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
        L = Sheets(« FORMASALARIÉS »).Range(« a65536 »).End(xlUp).Row + 1
        Range(« A » & L).Value = ComboBox1
        Range(« B » & L).Value = ComboBox2
        Range(« H » & L).Value = ComboBox3
        Range(« I » & L).Value = ComboBox4
        Range(« J » & L).Value = ComboBox5
        Range(« k » & L).Value = ComboBox6
        Range(« C » & L).Value = TextBox1
        Range(« D » & L).Value = TextBox2
        Range(« E » & L).Value = TextBox3
        Range(« F » & L).Value = TextBox4
        Range(« G » & L).Value = TextBox5
        Range(« L » & L).Value = TextBox6
        Range(« M » & L).Value = TextBox7
        Range(« N » & L).Value = TextBox8

        End If
        End Sub
        Private Sub CommandButton2_Click()
        Dim Ligne As Long
        Dim I As Integer
        If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        ws.Cells(Ligne, « B ») = ComboBox2
        ws.Cells(Ligne, « H ») = ComboBox3
        ws.Cells(Ligne, « I ») = ComboBox4
        ws.Cells(Ligne, « J ») = ComboBox5
        ws.Cells(Ligne, « k ») = ComboBox6
        For I = 1 To 8
        If Me.Controls(« TextBox » & I).Visible = True Then
        ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
        End If
        Next I
        End If
        End Sub

        Private Sub CommandButton3_Click()
        Unload Me
        End Sub

        1. Salut, étant donner que tu à rajouter des combobox, tu doit augmenté l’addition de ton entier en l’occurence « I ».
          Je pense que I + 6 pour toi fera l’affaire… Bien entendu en considérant que t’es combobox sont dans les cellules précédent les colonnes de t’es textbox. Je m’explique…
          ComboBox1 dans colonnes A
          ComboBox2 dans colonnes B…Ect
          Et ensuite:
          TextBox1 dans G (Si tu à 6 ComboBox)
          TextBox2 dans Hect…)

          En espérant t’avoir aidé… ☺

  82. Bonjour Lydia,

    Tout d’abord merci et bravo pour cet excellent article qui permet à de simples novices (comme moi) de faire du VBA comme les pros !
    Pour mes besoins, j’ai adapté l’exercice et renommé les boutons notamment celui qui permet de rajouter un contact en « Dupliquer » puisque c’est surtout sa fonction. Je veux justement créer un bouton « Ajouter » qui viderait les champs avant une nouvelle saisie. Mais je patauge…
    Pouvez-vous m’aider ?

      1. Bonjour Lydia,

        Et merci pour la rapidité de votre réponse. Je n’ai pas encore solutionné mon problème mais j’avance en tâtonnant. Voici ce que je souhaite faire :
        – Bouton « Nouveau » : crée une nouvelle ligne vierge en bas de liste
        – Bouton « Dupliquer » : crée une nouvelle ligne en reprenant les données de la ligne sélectionnée
        – Bouton  » Enregistrer » : enregistre soit les nouvelles données de la ligne dupliquée soit les modifications
        – Bouton « Supprimer » : Supprime la ligne sélectionnée
        – Bouton  » Quitter » : pour fermer après avoir demandé d’enregistrer

        Je me suis basé sur « Nouveau contact » et « Modifier » de votre script pour créer les boutons Dupliquer et Enregistrer mais je ne peux pas enregistrer un contact que je viens de dupliquer au risque de modifier la ligne d’origine.
        En ce qui concerne « Quitter » et « Supprimer », pas de problème.
        Et pour « Nouveau » votre dernier script me donne bien un masque avec des champs vides mais lorsque j’enregistre, je n’ai rien.

        Si vous avez d’autres pistes…, en vous remerciant par avance.

        1. Bonjour Christophe

          Le bouton modifier ne remplace pas l’enregistrement présent sur la feuille mais en ajoute.
          Concernant le bouton nouveau, vous avez dû modifier le code car il fonctionne très bien à la base.

          1. Bonjour Lydia,

            Plutôt que de tourner en rond (ou de prendre des cours de VBA), j’ai simplifié en renommant mes boutons par :
            – Vider
            – Dupliquer / Nouveau
            – Enregistrer les modif.
            – Supprimer
            – Quitter

            Même si ça ne fait pas exactement ce que je souhaitais, les boutons sont suffisamment explicites.

            Encore un grand merci pour votre aide.
            Christophe

  83. Bonjour,

    Etant novice au niveau vba.
    J’ai exactement suivit votre tuto à la lettre cependant un message d’erreur m’apparait:

    Run-time error ‘9’:

    Subscript out of range

    Mon Userform comporte 10 textbox, j’ai modifié ceci:

    For I = 1 To 10

    Dans formulaire, menu deroulant et le bouton modifier

    Et j’ai également rajouté 3 lignes dans le bouton nouveau client:

    Range( » J  » & L).Value = TextBox8

    Range( » K  » & L).Value = TextBox9

    Range( » L  » & L).Value = TextBox10

    Dans l’attente de vous lire,

    Yannick

    1. Bonjour,

      Ce code apparaît lorsque vous faites référence à un objet (textbox peut-être) qui n’existe pas. Avez-vous utilisé le débogage pour savoir d’où vient l’erreur ?

  84. Bonjour,

    J’ai suivi votre démonstration pour créer mon propre formulaire.
    Cependant il y a une chose que je n’arrive pas a faire correctement.
    J’aimerai quand je saisi une référence dans la liste déroulante, que l’ensemble des infos disponible dans mon tableau apparaisse dans mon formmulaire pour consultation.

    Pour info:
    J’ai 71 colonnes
    Pour le bouton nouveau contact je n’ai pas encore saisie l’ensemble des colonnes.

    Ci-dessous le texte du formulaire:

    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    Set Ws = Sheets(« Baseinfo ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J
    End With
    For I = 1 To 71
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub

    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox( » Confirmation de l’ajout d’une nouvelle référence ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
    L = Sheets(« Baseinfo »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range(« A » & L).Value = ComboBox1
    Range(« B » & L).Value = TextBox1
    Range(« C » & L).Value = TextBox2
    Range(« D » & L).Value = TextBox3
    Range(« E » & L).Value = TextBox4
    Range(« F » & L).Value = TextBox5
    Range(« G » & L).Value = TextBox6
    Range(« H » & L).Value = TextBox7
    Range(« I » & L).Value = TextBox8
    Range(« J » & L).Value = TextBox9
    Range(« K » & L).Value = TextBox10
    Range(« L » & L).Value = TextBox11
    Range(« M » & L).Value = TextBox12
    Range(« N » & L).Value = TextBox13
    Range(« O » & L).Value = TextBox14
    Range(« P » & L).Value = TextBox15
    Range(« R » & L).Value = TextBox17
    Range(« S » & L).Value = TextBox18
    Range(« T » & L).Value = TextBox19
    Range(« U » & L).Value = TextBox20
    Range(« V » & L).Value = TextBox21
    Range(« W » & L).Value = TextBox22
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Confirmez-vous la modification de la référence ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne, « B ») = TextBox1
    For I = 1 To 71
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Merci de votre aide.

  85. Bonjour,

    J’ai un message d’erreur de compilation, variable non définie qui s’affiche sur
    With Me.ComboBox1
    For j = 2 To Ws.Range(«A» & Rows.Count).End(xlUp).Row
    de la séquence « Private Sub UserForm_Initialize() Pour le formulaire »

    A quoi correspond le « A » ?

    Je n’ai pas mis les en-tête dans le même ordre que vous, j’en ai ajouté aussi.
    Mais normalement, j’ai bien associé les ComboBox..

    1. Bonjour,
      Le A correspond à la colonne A. La variable non définie veut dire que vous avez utilisé une variable sans la déclarer avant. Soit vous avez changé le nom de cette variable par rapport au tuto d’origine, et dans ce cas, il faut la déclarer aussi. Soit vous avez loupé une étape. Ici je pencherais pour le Ws qui ne serait pas déclaré.

  86. Bonjour,
    Je vous écrit pour d’abord vous remerciez,
    et parce que j’ai un soucis,
    Quand j’ajoute un contact via le mon formulaire, sa ne créer pas de ligne de tableau, sa s’intègre à la suite, mais pas à l’intérieur du tableau… (Pas facile à expliquer)
    Et pourtant j’ai bien le même code…

    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox( » Confirmez-vous l’insertion de ce nouvel événement ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
    L = Sheets(« Création »).Range(« Tableau2 »).End(xlUp).Row + 1
    Range(« A » & L).Value = TextBox1
    Range(« B » & L).Value = TextBox2
    Range(« C » & L).Value = TextBox3
    End If

    End Sub

    Qu’est-ce qui pourrait empêcher l’extension du tableau ?

    Je vous remercie de votre aide.
    Cordialement, Thismail

    1. Voila comment j’ai réglé mon soucis…
      Private Sub CommandButton1_Click()
      Dim L As Integer
      If MsgBox( » Confirmez-vous l’insertion de ce nouvel événement ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
      Dim LR As ListRows
      Range(« Tableau2 »).ListObject.ListRows.Add (1)
      L = Sheets(« Création »).Range(« Tableau2 »).End(xlDown).Row – 1

      Je commence à faire des recherches, mais je demande au cas où…
      Est-ce qu’on peux mettre un sélecteur de fichier via le formulaires pour le mettre (le fichier) en lien directement dans une cellule ?

      1. Bonjour,
        Cela peut-être fait en sélectionnant un contrôle spécifique dans le formulaire. Il faut un peu fouiller pour aller insérer cet objet mais c’est le même principe que l’ajout d’un bouton de calendrier (voir post relatif à cette manip).

  87. Bonjour

    J’aimerai ajouter une troisième COMBOBOX, tout va bien mais ne s’inscrit pas automatiquement dans excel. Y a-til un code que j’aurais oublié dans mon USERFORM

    merci

    1. Bonjour Damien,

      Il ne suffit pas d’ajouter la combobox dans le formulaire, il faut la coder également. Prenez comme exemple, une des combobox et n’oubliez pas de changer les chiffres dans for i = 1 to …

      1. j’ai encore une question, quand les données sont transmise sous excel je dois a chaque fois « convertir en nombre » n’y aurait-il pas moyen de le faire automatiquement ? salutations

          1. Concernant ce souci que je n’vais pas réussi à résoudre via le code, j’ai enregistré une macro où je sélectionnais les données et j’utilisais la fonction « convertir » (données) et dans la fenêtre je cliquais directement sur convertir. Après, j’ai arrêté la macro et j’ai récupéré le code créé pour l’adapter à mon code pour le formulaire.

    2. Bonjour désolé de nouveau de vous embêter mais je constate maintenant que quand je fais nouveau contact les données se mettent sur une autre page ? comment puis-je faire pour cela ? je vous en remercie. Salutations

  88. Bonjour,

    Votre site et votre tuto est en train de me simplifier la vie…. ça marche a merveille!!
    Cependant j’aurais une requête concernant l’utilisation de Comboibox 1. Je voudrais en fait qu’elle soit utilisé mais en utilisant le nom du client, a des fin de consultations :  » j’ai Mr TARTAMPION en face de moi, je cherche si il est déjà client chez nous… »
    Comment faire, ou il y a t’il un moyen plus simple pour de la consultation??
    Merci d’avance pour la suite, et déjà un grand merci pour ce tuto

    1. Bonjour,

      Vous pouvez, par exemple, placez une combobox sur le nom et saisir ce code :
      ‘Pour la liste déroulante nom
      Private Sub TextBox2_Change()
      Dim Ligne As Long
      Dim I As Integer

      If Me.TextBox2.ListIndex = -1 Then Exit Sub
      Ligne = Me.TextBox2.ListIndex + 2
      ComboBox1 = Ws.Cells(Ligne, « A »)
      For I = 1 To 7
      Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
      Next I
      End Sub

      1. Bonjour, et merci de cette réponse…. ça fonctionne…. !!!

        pour aller plus loin dans l’aspect « consultation », en sachant que plusieurs client auront le même nom, je me demande si et surtout comment faire pour que le nom soit saisie dans ma TextBox1, le prénom en textbox2…. et qu’ils puissent ( NOM ouai mieux NOM et PRENOM) apparaître directement dans une combobox… ou mieux dans une Listbox ( qui ne sera utiliser que pour la consultation et donc pas de saisie!!

        Comment faire ??

        Merci d’avance,

        Pour info Voici mon code
        Option Explicit
        Dim Ws As Worksheet

        ‘Pour le formulaire
        Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer
        ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
        ComboBox2.List() = Array(«  », « M. », « Mme », « Mlle »)
        Set Ws = Sheets(« Clients ») ‘Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
        For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
        .AddItem Ws.Range(« A » & J)
        Next J
        End With
        For I = 1 To 10
        Me.Controls(« TextBox » & I).Visible = True
        Next I
        End Sub
        ‘Pour la liste déroulante nom
        Private Sub ComboBox1_Change()
        Dim Ligne As Long
        Dim I As Integer
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        ComboBox2 = Ws.Cells(Ligne, « B »)
        For I = 1 To 10
        Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
        Next I
        End Sub

        ‘Pour le bouton Nouveau contact
        Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
        L = Sheets(« Clients »).Range(« a65536 »).End(xlUp).Row + 1
        ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
        Range(« A » & L).Value = ComboBox1
        Range(« B » & L).Value = ComboBox2
        Range(« C » & L).Value = TextBox1 ‘NOM
        Range(« D » & L).Value = TextBox2 ‘Prénoms
        Range(« E » & L).Value = TextBox3 ‘N° SIREN
        Range(« F » & L).Value = TextBox4 ‘N° SIRET
        Range(« G » & L).Value = TextBox5 ‘Adresse
        Range(« H » & L).Value = TextBox6 ‘Code POSTAL
        Range(« I » & L).Value = TextBox7 ‘Ville
        Range(« J » & L).Value = TextBox8 ‘Téléphone
        Range(« K » & L).Value = TextBox9 ‘fax
        Range(« L » & L).Value = TextBox10 ‘mail

        End If
        End Sub

        ‘Pour le bouton Modifier
        Private Sub CommandButton2_Click()
        Dim Ligne As Long
        Dim I As Integer
        If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        Ws.Cells(Ligne, « B ») = ComboBox2
        For I = 1 To 10
        If Me.Controls(« TextBox » & I).Visible = True Then
        Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
        End If
        Next I
        End If
        End Sub

        ‘Pour le bouton Quitter
        Private Sub CommandButton3_Click()
        Unload Me
        End Sub

        1. Bonjour,

          Il faudrait créer un label qui récupèrerait les 2 combobox en faisant une concaténation.
          Voici une piste à adapter : Label1.Caption = ActiveSheet.Range(« a1 »).Value

  89. Bonsoir Lydia,
    Nice tuto !
    Je suis novice en programmation VBA. Il y a un truc que je ne comprends pas dans votre code c’est le « Me » dans
    With Me.ComboBox1

    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(« A » & J)

    Next J

    End With
    Et il apparait dans tout le code et n’est pas expliqué peut être que vous pensez que les débutants allaient s’en sortir mais :-).
    Est que vous pouvez me l’expliquer également le code suivant:
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Merci d’avance .

    1. Bonjour Tiagri,

      Tout d’abord, ceci a été mon premier code VBA donc c’est que tout débutant peut y arriver en s’y plongeant sérieusement. Avant cela, je n’avais aucune notion.

      Pour la première partie, ce code recherche les données de la première colonne pour faire la liste déroulante et le deuxième code est expliqué en commentaire : il sert à quitter le formulaire sur clic du 3e bouton.

    2. Le « Me » indique généralement dans le code qu’il s’agit d’un formulaire.
      Cela permet d’indiquer que le code doit s’exécuter dans le formulaire.

      Pour le dernier code que vous indiquez, il s’agit d’une commande de fermeture du formulaire (unload pour fermer et Me pour le formulaire ainsi nommé).

      J’espère que c’est plus clair pour vous à présent. Je confirme également l’excellent travail de Lydia sur ce code qui est en tête des commentaires et bonnes appréciations sur le blog et ailleurs. Il faut persévérer ! 🙂

  90. Bonjour,
    Un grand merci pour ce formulaire c’est exactement ce dont j’avais besoin.
    Je rencontre néanmoins un problème, je souhaiterais y ajouter trois checkbox (case à cocher)
    l’idée c’est que lorsque je l’active elle indique son Caption.
    En espérant avoir été assez clair et que vous pourriez m’aider.
    Cordialement

    1. Débutant en VBA, je n’ai pas encore étudié les checkbox mais il faudrait tester avec quelque chose de ce genre-là :
      Range(« A1 »).Value = CheckBox1.Value

      Thierry s’y connait surement mieux que moi 😉

  91. Bonjour,
    J’ai réussi à créer une formulaire des nouveaux dossiers ( rose 30 mars ) grâce à ce tuto, mais j’ai un problème lorsque j’ajoute un nouveau dossier 10, je tape 1 il m’affiche les données de dossier 1 , j’ai essayé d’appliquer la solution que vous avez proposé à Maud 9 mars et j’ai changé le MatchEntry (Catégorie > Comportement) en n°2 , dans ce cas le saisie automatique s’arrête , mais lorsque je tape un numéro de dossier déjà existant, ses données ne s’affichent pas , et je risque de perdre les données déjà enregistrés de ce dossier. SVP qu’est ce que je peux faire ? Merci beaucoup pour votre aide.

    1. Bonjour,

      Il faudra choisir : soit vous utilisez la saisie semi-auto soit vous ne la choisissez pas. Dans ce cas, il faut sélectionner avec le menu déroulant.

  92. super , super , votre tuto!
    un grand merci pour vos tutos , j’ai bcp appris avec vous et ça m’aide énormément dans mon travail .
    cependant j’ai un ptit probleme , j’ai suivi pas a pas le tuto , tout fonctionne bien sauf quand je clic sur le bouton nouveau : il m’affiche cette erreur :
    erreur d’excution 9 : l’indice n’appartient pas à la séléction
    L = Sheets(« saisie production du jour »).Range(« a65536 »).End(xlUp).Row + 1 en surbrillance
    pourriez vous m’aidé svp.
    merci d’avance.

  93. Bonjour,

    Merci pour votre Tuto.
    Comme certain, je n’ai pas de données dans la liste déroulante. Lucien aurait trouvé la solution mais pas moi 🙂

    Voici mon code (basé sur votre exercice)

    Merci pour votre aide

    Option Explicit
    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm1_()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(«  », « M. », « MME », « MLLE »)
    Set Ws = Sheets(« clients ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J
    End With
    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub

    ‘Pour la liste déroulante Code client

    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, « B »)
    For I = 1 To 7
    Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub

    Private Sub ComboBox2_Change()
    End Sub

    ‘Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    L = Sheets(« clients »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range(« A » & L).Value = ComboBox1
    Range(« B » & L).Value = ComboBox2
    Range(« C » & L).Value = TextBox1
    Range(« D » & L).Value = TextBox2
    Range(« E » & L).Value = TextBox3
    Range(« F » & L).Value = TextBox4
    Range(« G » & L).Value = TextBox5
    Range(« H » & L).Value = TextBox6
    Range(« I » & L).Value = TextBox7
    End If
    End Sub

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox2.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox2.ListIndex + 2
    Ws.Cells(Ligne, « B ») = ComboBox2
    For I = 1 To 7
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Private Sub UserForm_Click()

    End Sub

    1. Bonjour Eric,

      Tout comme Lucien, votre formulaire porte-il le bon nom ? Et avez-vous bien repris tous les éléments (un simple guillemet peut empêcher le fonctionnement) ?

  94. Bonjour Lydia,

    Merci tout d’abord pour ce tuto, c’est très utile , j’ai bien réussi à créer ce formulaire 🙂 .
    J’ai un projet à réaliser qui consiste à créer un tableau , qui contient les numéros des dossiers ( à chaque fois on ajoute un nouveau dossier comme un nouveau code client ) , chaque dossier est associé à des éléments ( par exemples les infos des clients ) mais pour moi ces éléments doivent rempli par  » ✓  » si l’élément existe dans le dossier, sinon  »  » , alors je dois réaliser un formulaire qui contient des checkbox pour valider les éléments , mon problème c’est j’ai pas arriver à relier les checkbox avec les cellules ainsi d’incrémenter dans le cas d’un nouveau dossier.

    Pourriez vous me dire ce que je dois faire?

    Cordialement.

    1. Bonjour Rose,
      Je vois ce que vous voulez. Je dois regarder car je ne pratique pas assez souvent ce point. Mais ça doit pouvoir se faire.
      Par contre, j’ai peu de disponibilités en ce moment mais je vais garder ça en to-do liste.
      Ok pour vous ?

  95. Bonsoir
    Un grand merci pour votre tuto qui m’a vraiment aidée! Malheureusement j’ai un pb. J’ai repris pas à pas votre démo en augmentant le nombre de colonnes (2 comboBox et 11 zonetexte/ de A à M).
    Quand je fais F5 mon formulaire s’affiche sans aucune information.
    Je pense que le problème vient des lettres alphabétiques…
    Si quelqu’un peut me venir en aide, je le remercie par avance. Ci-dessous un copié/collé de mon code

    ‘Pour le formulaire

    Private Sub UserForm2()

    Dim J As Long

    Dim I As Integer

    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité

    ComboBox2.List() = Array(«», «M.», «Mme», «Mlle»)

    Set Ws = Sheets(«JournauxJournalistes») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(«A» & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range(«A» & J)

    Next J

    End With

    For I = 1 To 11

    Me.Controls(«TextBox» & I).Visible = True

    Next I

    End Sub

    ‘Pour la liste déroulante Code client

    Private Sub ComboBox1_Change()

    Dim Ligne As Long

    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    ComboBox2 = Ws.Cells(Ligne, «B»)

    For I = 1 To 11

    Me.Controls(«TextBox» & I) = Ws.Cells(Ligne, I + 2)

    Next I

    End Sub

    ‘Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(«JournauxJournalistes»).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(«A» & L).Value = ComboBox1

    Range(«B» & L).Value = ComboBox2

    Range(«C» & L).Value = TextBox1

    Range(«D» & L).Value = TextBox2

    Range(«E» & L).Value = TextBox3

    Range(«F» & L).Value = TextBox4

    Range(«G» & L).Value = TextBox5

    Range(«H» & L).Value = TextBox6

    Range(«I» & L).Value = TextBox7

    Range(«J» & L).Value = TextBox8

    Range(«K» & L).Value = TextBox9

    Range(«L» & L).Value = TextBox10

    Range(«M» & L).Value = TextBox11

    End If

    End Sub

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    Ws.Cells(Ligne, «B») = ComboBox2

    For I = 1 To 11

    If Me.Controls(«TextBox» & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(«TextBox» & I)

    End If

    Next I

    End If

    End Sub

    ‘Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

    Private Sub UserForm_Click()

    End Sub

      1. Merci Lydia pour votre réponse.
        Il s’agit d’un fichier avec des informations personnelles. Y a t-il un autre moyen?
        Encore merci de prendre de votre temps pour nous venir en aide.

        1. De par mon métier, les données que l’on me confie ne sont pas divulguées. Il me sera difficile de vous aider sans connaître la structure de votre fichier.

      2. Bonjour,

        J’ai le meme probleme , j’ai rajouter 11 textbox et j’ai suivi exactement le tuto mais lorsque je fais F5 , j’ai erreur ‘1004’ , Besoin d’aide svp.
        Option Explicit
        Dim Ws As Worksheet
        ‘Pour le formulaire
        Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer
        ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
        ComboBox2.List() = Array( » « ,  » M. « ,  » Mme « ,  » Mlle « )
        Set Ws = Sheets(« Donnee ») ‘Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
        For J = 2 To Ws.Range( » A  » & Rows.Count).End(xlUp).Row
        .AddItem Ws.Range( » A  » & J)
        Next J
        End With
        For I = 1 To 11
        Me.Controls(« TextBox » & I).Visible = True
        Next I
        End Sub

        ‘Pour la liste déroulante Code client
        Private Sub ComboBox1_Change()
        Dim Ligne As Long
        Dim I As Integer
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        ComboBox2 = Ws.Cells(Ligne,  » B « )
        For I = 1 To 11
        Me.Controls( » TextBox  » & I) = Ws.Cells(Ligne, I + 2)
        Next I
        End Sub

        ‘Pour le bouton Nouveau contact
        Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox( » Confirmez-vous l’insertion de ce nouveau contact ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
        L = Sheets( » Donnee « ).Range( » a65536″).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
        Range( » A  » & L).Value = ComboBox1
        Range( » B  » & L).Value = ComboBox2
        Range( » C  » & L).Value = TextBox1
        Range( » D  » & L).Value = TextBox2
        Range( » E  » & L).Value = TextBox3
        Range( » F  » & L).Value = TextBox4
        Range( » G  » & L).Value = TextBox5
        Range( » H  » & L).Value = TextBox6
        Range( » I  » & L).Value = TextBox7
        Range( » J  » & L).Value = TextBox8
        Range( » K  » & L).Value = TextBox9
        Range( » L  » & L).Value = TextBox10
        Range( » M  » & L).Value = TextBox11
        End If
        End Sub

        ‘Pour le bouton Modifier
        Private Sub CommandButton2_Click()
        Dim Ligne As Long
        Dim I As Integer
        If MsgBox( » Confirmez-vous la modification de ce contact ? « , vbYesNo,  » Demande de confirmation de modification « ) = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        Ws.Cells(Ligne,  » B « ) = ComboBox2
        For I = 1 To 11
        If Me.Controls( » TextBox  » & I).Visible = True Then
        Ws.Cells(Ligne, I + 2) = Me.Controls( » TextBox  » & I)
        End If
        Next I
        End If
        End Sub

        ‘Pour le bouton Quitter
        Private Sub CommandButton3_Click()
        Unload Me
        End Sub

  96. Très sympa ce tutoriel! J’ai un peu galéré, mais au final, ça tourne.
    Petite question :
    J’ajoute un nouveau client, par exemple le 15, et j’ai la fiche du client 1 qui apparait.
    Peut-on éviter ce truc?
    Car ça impose de tout réeffacer lors de la saisie des coordonnées du client 15. Et c’est source d’erreur ou d’oubli!
    Merci.

  97. Bonjour, avant tout félicitations !

    Avant de passer de longues heures devant mon ordinateur je pense qu’il est préférable d’avoir l’avis d’un « expert ». Je souhaite créer un formulaire où l’on pourrait renseigner :
    – nom d’une association
    – date
    – horaire
    – salle
    – nombre de participants

    Et récupérer toutes ces données dans un tableau qui me permettrait de suivre la fréquentation en fonction du jour (lundi, mardi…), de l’association, de la salle tout ça pour avoir une idée de la fréquentation par semaine, par mois et sur l’année et aussi avec des codes couleurs (une couleur par assoc (plus de 20), et une couleur par salles (6 en tout)…) J’ai déjà un document ou je référence à chaque fois mais il me semble qu’un formulaire me simplifierait la tâche au quotidien.

    Merci d’avance pour les quelques minutes que j’espère vous me consacrerez !

    Bonne soirée et encore bravo !

    1. Bonjour et merci Rémi.
      Tout d’abord, je ne suis pas du tout experte. Ce tutoriel était mon premier formulaire en VBA 😉

      Pour ce qui est de votre demande, vous pouvez tout à fait réaliser un formulaire en l’adaptant à vos besoins. Cependant, concernant les codes couleur, pour vous simplifier la vie, je vous inviterais à utiliser la mise en forme conditionnelle. Ensuite, selon vos besoins, vous pourrez créer des graphiques et/ou tableaux croisés dynamiques.

  98. Bonjour, quand je lance le formulaire, j’ai ce message :
    erreur d’exécution ‘9’
    L’indice n’appartient pas à la sélection.
    Que faire?
    Merci de me répondre.

  99. Bonjour,

    Merci pour ce tuto, j’ai réussi à créer un formulaire client personnalisé pour le travail de mon mari mais j’ai un souci lorsque j’arrive au client 10 : lorsque je veux créer le client 10, des que je tape le 1 ça m’affiche les données du client n°1, je ne peux pas creer le client 10… (et si je mets 010, c’est le onzieme (011) qui pose problème…)
    Que puis je faire ? Merci beaucoup pour votre aide…

    Voici mon code (j’ai dû modifier quelques parties car j’ai plusieurs combobox mais elles ne sont pas toutes dans les premieres colonnes…)

    Option Explicit
    Dim WS As Worksheet

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    ComboBox2.ColumnCount = 2
    ComboBox2.List() = Array(« Mr », « Mme », « Mr/Mme », « Sté »)
    ComboBox7.ColumnCount = 3
    ComboBox7.List() = Array(« Achat initial », « Achat complémentaire »)
    ComboBox3.ColumnCount = 13
    ComboBox3.List() = Array(« Alarme », « Interphonie », « Automatisme », « Vidéo »)
    ComboBox4.ColumnCount = 17
    ComboBox4.List() = Array(« Appel entrant », « Prospect », « Parrainage », « Portes Ouvertes », « Communication Proxéo », « Assurance », « Autres »)
    ComboBox5.ColumnCount = 15
    ComboBox5.List() = Array(« Comptant », « 10 fois », « Financement »)
    ComboBox6.ColumnCount = 18
    ComboBox6.List() = Array(« Validée », « En attente », « En attente RDV », « Sans suite »)
    Set WS = Sheets(« Feuil1 »)
    With Me.ComboBox1
    For J = 2 To WS.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem WS.Range(« A » & J)
    Next J
    End With
    For I = 1 To 13
    Me.Controls(« Textbox » & I).Visible = True
    Next I
    End Sub

    Private Sub ComboBox1_Change()

    Dim Ligne As Long

    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    ComboBox2 = WS.Cells(Ligne, « D »)

    ComboBox7 = WS.Cells(Ligne, « B »)

    ComboBox3 = WS.Cells(Ligne, « M »)

    ComboBox6 = WS.Cells(Ligne, « R »)

    ComboBox4 = WS.Cells(Ligne, « Q »)

    ComboBox5 = WS.Cells(Ligne, « O »)

    TextBox1 = WS.Cells(Ligne, « E »)

    TextBox2 = WS.Cells(Ligne, « C »)

    TextBox3 = WS.Cells(Ligne, « F »)

    TextBox4 = WS.Cells(Ligne, « G »)

    TextBox5 = WS.Cells(Ligne, « H »)

    TextBox6 = WS.Cells(Ligne, « I »)

    TextBox7 = WS.Cells(Ligne, « J »)

    TextBox8 = WS.Cells(Ligne, « K »)

    TextBox9 = WS.Cells(Ligne, « L »)

    TextBox10 = WS.Cells(Ligne, « N »)

    TextBox11 = WS.Cells(Ligne, « P »)

    TextBox12 = WS.Cells(Ligne, « S »)

    TextBox13 = WS.Cells(Ligne, « T »)

    End Sub

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(« Feuil1 »).Range(« a65536 »).End(xlUp).Row + 1
    Range(« A » & L).Value = ComboBox1

    Range(« B » & L).Value = ComboBox7

    Range(« D » & L).Value = ComboBox2

    Range(« E » & L).Value = TextBox1

    Range(« C » & L).Value = TextBox2

    Range(« F » & L).Value = TextBox3

    Range(« G » & L).Value = TextBox4

    Range(« H » & L).Value = TextBox5

    Range(« I » & L).Value = TextBox6

    Range(« J » & L).Value = TextBox7

    Range(« K » & L).Value = TextBox8

    Range(« L » & L).Value = TextBox9

    Range(« M » & L).Value = ComboBox3

    Range(« N » & L).Value = TextBox10

    Range(« O » & L).Value = ComboBox5

    Range(« P » & L).Value = TextBox11

    Range(« Q » & L).Value = ComboBox4

    Range(« R » & L).Value = ComboBox6

    Range(« S » & L).Value = TextBox12

    Range(« T » & L).Value = TextBox13

    End If

    End Sub

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Ligne = Me.ComboBox1.ListIndex + 2

    WS.Cells(Ligne, « D ») = ComboBox2

    WS.Cells(Ligne, « B ») = ComboBox7

    WS.Cells(Ligne, « M ») = ComboBox3

    WS.Cells(Ligne, « R ») = ComboBox6

    WS.Cells(Ligne, « Q ») = ComboBox4

    WS.Cells(Ligne, « O ») = ComboBox5

    WS.Cells(Ligne, « E ») = TextBox1

    WS.Cells(Ligne, « C ») = TextBox2

    WS.Cells(Ligne, « F ») = TextBox3

    WS.Cells(Ligne, « G ») = TextBox4

    WS.Cells(Ligne, « H ») = TextBox5

    WS.Cells(Ligne, « I ») = TextBox6

    WS.Cells(Ligne, « J ») = TextBox7

    WS.Cells(Ligne, « K ») = TextBox8

    WS.Cells(Ligne, « L ») = TextBox9

    WS.Cells(Ligne, « N ») = TextBox10

    WS.Cells(Ligne, « P ») = TextBox11

    WS.Cells(Ligne, « S ») = TextBox12

    WS.Cells(Ligne, « T ») = TextBox13

    End If

    End Sub

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

    1. Bonjour Maud,

      Cela n’a rien à voir avec le code. Passez sur l’affichage de l’objet et, dans la combobox (vous pouvez d’ailleurs le faire pour toutes les combobox), dans les propriétés, changez le MatchEntry (Catégorie > Comportement) en n°2. Cela arrêtera la saisie automatique.

  100. Bonjour,

    C’est la première fois que j’essaie de faire une programmation et j’ai beaucoup de difficultés.
    J’aimerai avoir votre aide car j’ai essayé votre tuto avec mes données à moi mais j’ai plusiers messages d’erreurs.

    D,abord quand je change les guillemets, les cases:
    If MsgBox(«Confirmez-vous l’insertion de ce nouvel employé ?», vbYesNo, «Demande de confirmation d’ajout») = vbYes Then

    Se mettent en rouge en mettant ce message: Compile error: Expected: list seperator or)

    Si je remet les anciens guillemets  » , ils ont l’air de focntionner

    Ensuite lorsque j’essaie de partir le formulaire en faisant F5, j’ai une erreur au début du code

    Private Sub UserForm_Initialize() est surligné en jaune
    et
    ComboBox2.List() = Array(«», «M.», «Mme», «Mlle») les deux guillemets vides sont également surlignés et j’ai l’erreur suivante: Compile error: Variable not define

    Voici mon code

    Option Explicit
    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim Q As Long
    Dim P As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(«», «M.», «Mme», «Mlle»)
    Set Ws = Sheets(«Embauche»)
    With Me.ComboBox1
    For Q = 2 To Ws.Range(«A» & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(«A» & Q)
    Next Q
    End With
    For P = 1 To 14
    Me.Controls(«TextBox» & P).Visible = True
    Next P
    End Sub

    ‘Pour la liste déroulante Code employé
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim P As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, «B»)
    For P = 1 To 14
    Me.Controls(«TextBox» & P) = Ws.Cells(Ligne, P + 2)
    Next P
    End Sub
    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim S As Integer
    If MsgBox(« Confirmez-vous l’insertion de ce nouvel employé ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    S = Sheets(«Embauche»).Range(«a65536»).End(xlUp).Row + 1
    Range(«A» & S).Value = ComboBox1
    Range(«B» & S).Value = ComboBox2
    Range(«C» & S).Value = TextBox1
    Range(«D» & S).Value = TextBox2
    Range(«E» & S).Value = TextBox3
    Range(«F» & S).Value = TextBox4
    Range(«G» & S).Value = TextBox5
    Range(«H» & S).Value = TextBox6
    Range(«I» & S).Value = TextBox7
    Range(«J» & S).Value = TextBox8
    Range(«K» & S).Value = TextBox9
    Range(«L» & S).Value = TextBox10
    Range(«M» & S).Value = TextBox11
    Range(«N» & S).Value = TextBox12
    Range(«O» & S).Value = TextBox13
    Range(«P» & S).Value = TextBox14
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim P As Integer
    If MsgBox(« Confirmez-vous la modification de cet employé ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne, «B») = ComboBox2
    For P = 1 To 14
    If Me.Controls(«TextBox» & P).Visible = True Then
    Ws.Cells(Ligne, P + 2) = Me.Controls(«TextBox» & P)
    End If
    Next P
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    1. Bonjour,

      Commencez par remplacer tous les guillemets français par des guillemets anglais. Votre code ne devrait pas être écrit en rouge, si tel est le cas, c’est qu’il y a une erreur, voire plusieurs. Ensuite, plusieurs choses sont à voir : est-ce que votre formulaire porte bien ce nom sur votre objet, est-ce que c’est aussi le cas pour vos combobox aussi… ?

  101. Bonjour,
    Je ne connaissais pas votre site, il est superbe.
    j’ai fais un formulaire en reprenant le votre, par contre je doit mettre plusieurs dates.
    Comment je peux faire apparaitre un calendrier en cliquant dans la ComboBox ?

    En vous remerciant
    Et surtout continuer comme ça

    Stéphane

    1. Bonjour,

      Pour placer un calendrier, cliquez droit sur la boîte à outils > Contrôles supplémentaires et cochez Microsoft Monthview Control. Cela vous fera apparaître un petit calendrier que vous pourrez placer sur votre formulaire.
      Il ne vous restera plus qu’à le paramétrer dans votre code pour récupérer l’information sur votre fichier.

      1. Bonsoir,

        Dans mon formulaire, j’ai 5 dates différentes à saisir. A ce jour j’arrive à saisir une seule date qui va dans les 5 emplacements. Dois-je ouvrir et fermer MonthView pour chaque TextBox ?
        Merci

  102. Salut,j’ai reproduit exactement ton tuto mais ça bloque J’ai le message suivant :

    Erreur d’exécution : -2147024809 (80070057)
    objet spécifié introuvable

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, « B »)
    For I = 1 To 7
    Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub

  103. Bonjour,

    Super tutoriel,merci !

    Je tente de reproduire le tuto mais je rencontre un problème lors de l’affichage des listes déroulantes.Je n’ai rien qui apparaît.

    Voici mon code :

    Option Explicit
    Dim Ws As Worksheet

    ‘Pour le formulaire
    Private Sub UserForm1_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(«  », « M. », « Mme », « Mlle »)
    Set Ws = Sheets(« Clients ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & J)
    Next J
    End With
    For I = 1 To 7
    Me.Controls(« TextBox » & I).Visible = True
    Next I
    End Sub

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, « B »)
    For I = 1 To 7
    Me.Controls(« TextBox » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub

    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    L = Sheets(« Clients »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range(« A » & L).Value = ComboBox1
    Range(« B » & L).Value = ComboBox2
    Range(« C » & L).Value = TextBox1
    Range(« D » & L).Value = TextBox2
    Range(« E » & L).Value = TextBox3
    Range(« F » & L).Value = TextBox4
    Range(« G » & L).Value = TextBox5
    Range(« H » & L).Value = TextBox6
    Range(« I » & L).Value = TextBox7
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne, « B ») = ComboBox2
    For I = 1 To 7
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Private Sub UserForm_Click()

    End Sub

    Merci de votre aide

    1. Bonjour Lucien,

      Cela ne serait-il pas dû au nom de votre userform ? Est-ce que son nom est le même qu’ici  » Private Sub UserForm1_Initialize() » ?

      1. Bonjour,

        Le nom du UserForm est bien UserForm1.
        Je n’ai aucun message d’erreur,cela s’affiche correctement.Sauf ce qui est dans la liste déroulante.

  104. Bonjour et merci,
    Ce code me permet de découvrir le vba tout en m’étant utile. J’essaie d’ajouter une fonction mais je n’y arrive pas. Je voudrai ajouter dans mon tableau excel une colonne « date mise à jour » et quand je valide la création ou la modification d’un nouveau contact, ca me met automatiquement la date du jour dans la cellule « date mise à jour » du contact concerné.
    Deuxieme point, quand je clique sur nouveau contact, je voudrais effacer tous les champs de l’userform. Je pense utiliser textbox1.value= » ». …Ou dois-je le placer dans votre code?

    Merci d’avance de votre aide

    1. Pour la date du jour, placez ce bout de code entre « Next I » et « End Sub » de « Private Sub UserForm_Initialize() » : TextBox1.Value = Date

      Si la date doit s’afficher dans TextBox1 bien sûr.

      Pour vider l’userform, placez entre « End If » et « End Sub » de « Private Sub CommandButton1_Click() » :
      Unload Me
      UserForm.Show

      Ce qui fermera et rouvrira le formulaire. Vous pouvez faire de même pour le bouton modifier en la plaçant au même endroit.

  105. Bonjour,

    Je tente d’utiliser ce code, mais pour la portion « Modifier » j’ai quelques soucis. En effet, j’utilise l’ensemble du code et le reste fonctionne parfaitement. La subtilité est que je n’utilise pas de boites déroulante (ComboBox) et ça modifie quelque peu le code. Je me demandais quelle est mon erreur dans ce que je met?

    Merci d’avance et bonne journée.

    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.TextBox5 = -1 Then Exit Sub
    Ligne = Me.TextBox5 + 2
    Ws.Cells(Ligne, « B ») = TextBox5
    For I = 1 To 5
    If Me.Controls(« TextBox » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If
    End Sub

    1. Bonjour,

      Si vous copiez le code entièrement mais n’utilisez pas les mêmes contrôles, il est possible que le problème vienne de là. Je vous conseillerais plutôt de réaliser le tutoriel entièrement, puis, une fois qu’il est fonctionnel d’essayer de modifier certaines choses, en repartant de votre base si ça ne fonctionne pas, pour réaliser le formulaire que vous souhaitez. Ce tutoriel était ma première création en VBA et compte tenu du nombre de questions et de demandes de créations de formulaires personnalisés, c’est de cette manière que je procède car je pars vraiment de zéro concernant ce langage.

  106. Bonjour,

    Super tutorial. Je n’ai aucune expérience ni formation en programmation. J’aimerais savoir comment vous avez fait pour encadrer vos textes de programmation au haut de votre formulaire afin de les copier coller automatiquement. Ai-je loupé quelques coups de clavier sans le savoir? Automatiser la programmation afin de l’insérer me serait très utile pour éviter de m’enfarger dans les fleurs du tapis.

    Merci pour ce tutorial. Il m’aide à surmonter ma peur du VBA.

    Danielle

      1. Bonjour,

        Je pense que vous parlez de mes « post-it » sur mon bureau , non ? Si tel est le cas, j’ai simplement copier le code dessus pour ne pas faire durer le tutoriel une éternité et avoir simplement à le coller pendant la vidéo.
        Il va malheureusement falloir se mettre à la programmation 😉

  107. Bonjour, très bon Tuto, bien expliqué, bravo.
    Je suis cependant bloqué dès le début le traitement s’arrête immédiatement après lancement de la macro avec pour message : « Erreur de compilation : variable non définie » avec «Listes» en surbrillance ainsi que « Private Sub UserForm_Initialize() » surligné en jaune. Le code que voici : Svp help

    Option Explicit
    Dim Ws As Worksheet

    ‘1) Pour le formulaire

    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Nom du Labor
    ComboBox2.RowSource = (« Lab_Name »)

    Set Ws = appExcel.ThisWorkbook.Sheets(«Listes») ‘Correspond au nom de l’onglet contenant toutes les listes déroul dans le fichier Excel

    With Me.ComboBox1

    For J = 2 To Ws.Range(«A» & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(«A» & J)
    Next J

    End With

    For I = 1 To 16
    Me.Controls(«TextBox» & I).Visible = True
    Next I

    End Sub

    ‘2) Pour la liste déroulante Code Laboratoire

    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, «B»)

    For I = 1 To 16
    Me.Controls(«TextBox» & I) = Ws.Cells(Ligne, I + 2)
    Next I

    End Sub

    ‘3) Pour le bouton Nouveau contact/Labo « New Entry »

    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Do you confirm the insertion of this Labo/Damage ? », vbYesNo, « Request of confirmation of addition ») = vbYes Then

    L = Sheets(«Listes»).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(«A» & L).Value = ComboBox1
    Range(«B» & L).Value = ComboBox2
    Range(«D» & L).Value = ComboBox3
    Range(«H» & L).Value = ComboBox4
    Range(«M» & L).Value = ComboBox5
    Range(«V» & L).Value = ComboBox6
    Range(«C» & L).Value = TextBox1
    Range(«E» & L).Value = TextBox2
    Range(«F» & L).Value = TextBox3
    Range(«G» & L).Value = TextBox4
    Range(«I» & L).Value = TextBox5
    Range(«J» & L).Value = TextBox6
    Range(«K» & L).Value = TextBox7
    Range(«L» & L).Value = TextBox8
    Range(«N» & L).Value = TextBox9
    Range(«O» & L).Value = TextBox10
    Range(«P» & L).Value = TextBox11
    Range(«Q» & L).Value = TextBox12
    Range(«R» & L).Value = TextBox13
    Range(«S» & L).Value = TextBox14
    Range(«T» & L).Value = TextBox15
    Range(«U» & L).Value = TextBox16

    End If

    End Sub

    ‘4) Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Do you confirm the modification of this Damage ? », vbYesNo, « Request of confirmation of modification ») = vbYes Then

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2

    Ws.Cells(Ligne, «B») = ComboBox2

    For I = 1 To 16

    If Me.Controls(«TextBox» & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(«TextBox» & I)

    End If

    Next I

    End If

    End Sub

    ‘5) Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

  108. Bonjour,
    Un grand MERCI pour ce tuto c’est exactement ce dont j’avais besoin.
    Je rencontre néanmoins un problème en ce qui concerne les modifications.
    Lorsque je saisi un code client à modifier, certaines des informations ne sont pas dans les bonne TextBox et certaines n’apparaissent pas!
    A Savoir:
    La TextBox1 reprend les données de la colonne C au lieu de la colonne B
    La TextBox2 reprend les données de la colonne D au lieu de la colonne C
    La colonne B qui devrait apparaitre dans la TextBox1 n’apparait nul part

    Voici le code :

    Option Explicit
    Dim WS As Worksheet
    ‘Pour le Formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array( » « , « Melle », « Mme. », « M. »)
    Set WS = Sheets(« Base ») ‘Correspondant au nom de l’onglet dans Excel
    With Me.ComboBox1
    For J = 2 To WS.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem WS.Range(« A » & J)
    Next J
    End With
    For I = 1 To 60
    Me.Controls(« TextBox » & I).Visible = True
    Next I

    End Sub

    ‘Pour la liste déroulante Code CLient
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = WS.Cells(Ligne, « D »)
    For I = 1 To 60
    Me.Controls(« TextBox » & I) = WS.Cells(Ligne, I + 2)
    Next I

    End Sub

    ‘Pour le Bouton Nouveau Contact

    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox(« Confirmez nouveau contact? », vbYesNo, « Confirmation d’ajout ») = vbYes Then
    L = Sheets(« Base »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne du tableau non vide
    Range(« A » & L).Value = ComboBox1
    Range(« B » & L).Value = TextBox1
    Range(« C » & L).Value = TextBox2
    Range(« D » & L).Value = ComboBox2
    Range(« E » & L).Value = TextBox3
    Range(« F » & L).Value = TextBox4
    Range(« G » & L).Value = TextBox5
    Range(« H » & L).Value = TextBox6
    Range(« I » & L).Value = TextBox7

    End If

    End Sub

    ‘Pour le Bouton Modifier

    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox(« Confirmez modification de contact? », vbYesNo, « Confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -2 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    WS.Cells(Ligne, « B ») = ComboBox2
    For I = 1 To 60
    If Me.Controls(« TextBox » & I).Visible = True Then
    WS.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)
    End If
    Next I
    End If

    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me

    End Sub

    PS : J’ai supprimé une partie du code dans la section  » Bouton nouveau contact  » pour réduire la taille du message mais j’ai bien 60 colonnes !!!!

    En espérant avoir été assez clair.
    Cordialement

    1. Bonjour,
      Désolé du délai mais je réponds après une longue absence du blog pour motifs persos. Je ne sais pas si votre demande est toujours d’actualité mais ça ressemble à un problème d’identification des colonnes dans votre fichier. Avez-vous modifier les adresses de ces colonnes (inversion) ?

      1. Bonjour,
        Merci de prendre enfin le temps de me répondre.
        Ce projet est en standby je n’ai donc pas d’urgence.
        J’ai effectivement essayé de modifier les adresses des colonnes pour voir si je trouvais une solution mais le problème persiste.

  109. Bonjour, j’ai suivi ce tuto en partant de la même table j’ai un soucis « d’erreur d’exécution 9 ; l’indice n’appartient pas à la sélection » indiqué ligne 4 (partie nouveau contact 🙂

    1| Private Sub CommandButton1_Click()
    2| Dim L As Integer
    3| If MsgBox( » Confirmez-vous l’insertion de ce nouveau contact ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then

    4| L = Workbooks(« macro.xlsx »).Sheets( » Feuil1 « ).Range(« A65536″).End(xlUp).Row + 1

    ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide’
    Range( » A  » & L).Value = ComboBox1
    Range( » B  » & L).Value = ComboBox2

    (ect…)

    Range( » H  » & L).Value = TextBox6
    Range( » I  » & L).Value = TextBox7
    End If
    End Sub

    Merci pour tout coup de main

  110. Bonsoir, j’ai suivi ce tutoriel du début jusqu’à la fin et j’avoue que c’est extra, j’essayerais demain matin dès que j’aurais du temps pour le réaliser entièrement… je n’ai grandement besoins de tel formulaire… Mille merci… tu es un ange…

  111. Merci pour le tuto, je n’arrive pas avoir les donnees dan sma comboBox3, merci
    Option Explicit
    Dim Ws As Worksheet

    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim R As Long
    Dim Q As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array(«  », « M. », « Mme », « Mlle »)
    Set Ws = Sheets(« essaie ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For R = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & R)
    Next R
    End With
    For Q = 1 To 15
    Me.Controls(« TextBox » & Q).Visible = True
    Next Q
    End Sub

    ‘Pour le formulaire
    Private Sub ComboBox3_Change()
    Dim R As Long
    Dim Q As Integer
    ComboBox3.ColumnCount = 1 ‘Pour la liste déroulante Fonction
    ComboBox3.List() = Array(«  », « AVRIL. », « MAI », « JUIN »)
    Set Ws = Sheets(« essaie ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For R = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & R)
    Next R
    End With
    For Q = 1 To 15
    Me.Controls(« TextBox » & Q).Visible = True
    Next Q
    End Sub

    ‘Pour la liste déroulante Code client
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim Q As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, « D »)
    For Q = 1 To 15
    Me.Controls(« TextBox » & Q) = Ws.Cells(Ligne, Q + 2)
    Next Q
    End Sub

    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim T As Integer
    If MsgBox(« Confirmez-vous l’insertion de ce nouveau contact ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    T = Sheets(« essaie »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range(« A » & T).Value = ComboBox1
    Range(« B » & T).Value = ComboBox2
    Range(« C » & T).Value = ComboBox3
    Range(« D » & T).Value = TextBox1
    Range(« E » & T).Value = TextBox2
    Range(« F » & T).Value = TextBox3
    Range(« G » & T).Value = TextBox4
    Range(« H » & T).Value = TextBox5
    Range(« I » & T).Value = TextBox6
    Range(« J » & T).Value = TextBox7
    Range(« K » & T).Value = TextBox8
    Range(« L » & T).Value = TextBox9
    Range(« M » & T).Value = TextBox10
    Range(« N » & T).Value = TextBox11
    Range(« O » & T).Value = TextBox12
    Range(« P » & T).Value = TextBox13
    Range(« Q » & T).Value = TextBox14
    Range(« R » & T).Value = TextBox15
    End If
    End Sub

    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim Q As Integer

    If MsgBox(« Confirmez-vous la modification de ce contact ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne, « B ») = ComboBox2
    For Q = 1 To 15
    If Me.Controls(« TextBox » & Q).Visible = True Then
    Ws.Cells(Ligne, Q + 2) = Me.Controls(« TextBox » & Q)
    End If
    Next Q
    End If
    End Sub

    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()

    Unload Me
    End Sub

    1. Bonjour,
      Cela vient sans doute du copier-coller. Pour un souci technique, les guillemets ne sont pas prises correctement. Essayez de supprimer les espaces à côté, et modifiez les (devraient ressembler à un « ). Ça devrait vous aider.

  112. Bonjour Lydia et merci beaucoup pour ton Blug, j’ai suivi les étapes mais moi aussi je me retrouve avec un message Erreur d’exécution 9 – l’indice n’appartiens pas à la sélection- quand j’appuie sur F5, pour mon modèle j’ai 06 TextBox et voici ce que j’ai comme Code:

    Option Explicit
    Dim Ws As Worksheet
    ‘Pour le formulaire
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité
    ComboBox2.List() = Array( » « ,  » SARL « ,  » EURL « ,  » ETS « )
    Set Ws = Sheets( » Clients « ) ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
    For J = 2 To Ws.Range( » A  » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range( » A  » & J)
    Next J
    End With
    For I = 1 To 6
    Me.Controls( » TextBox  » & I).Visible = True
    Next I
    End Sub
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne,  » B « )
    For I = 1 To 6
    Me.Controls( » TextBox  » & I) = Ws.Cells(Ligne, I + 2)
    Next I
    End Sub
    ‘Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox( » Confirmez-vous l’insertion de ce nouveau contact ? « , vbYesNo,  » Demande de confirmation d’ajout « ) = vbYes Then
    L = Sheets( » Clients « ).Range( » a65536 « ).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide
    Range( » A  » & L).Value = ComboBox1
    Range( » B  » & L).Value = ComboBox2
    Range( » C  » & L).Value = TextBox1
    Range( » D  » & L).Value = TextBox2
    Range( » E  » & L).Value = TextBox3
    Range( » F  » & L).Value = TextBox4
    Range( » G  » & L).Value = TextBox5
    Range( » H  » & L).Value = TextBox6
    End If
    End Sub
    ‘Pour le bouton Modifier
    Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox( » Confirmez-vous la modification de ce contact ? « , vbYesNo,  » Demande de confirmation de modification « ) = vbYes Then
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(Ligne,  » B « ) = ComboBox2
    For I = 1 To 6
    If Me.Controls( » TextBox  » & I).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls( » TextBox  » & I)
    End If
    Next I
    End If
    End Sub
    ‘Pour le bouton Quitter
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    le nom de mon document est bien Clients, je te remercie d’avance pour ta réponse et encore bravo pour ton travail.
    sofiane

    1. Bonjour, On pourrait rajouter un bouton supprimer avec une procédure qui utiliserait la fonction clear pour les cellules sélectionnées. Cependant, cela modifierait aussi l’ensemble du code car créerait des trous dans la base de données.

      1. Bonsoir, j’ai réalisé avec beaucoup d’intérêt cette programmation en vba. Merci pour ce tutoriel.
        Concernant la suppression d’une fiche je vous propose le code suivant. il ne fait que supprimer la ligne complète de la fiche que l’on veut supprimer:Private Sub CommandButton4_Click()
        Dim Ligne As Long
        Dim I As Integer

        If MsgBox( » Confirmer vous la suppresssion de ce contact? « , _
        vbYesNo, « Demande de suppression de contact ») = vbYes Then

        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 1
        Rows(Ligne + 1).EntireRow.Delete Shift:=xlDown

        End If
        End sub

        Pour moi ça marche très bien.

  113. Bonjour Lydia,

    Excusez moi de vous demander pardon mais existe t-il un code spécifique à entrer pour la liste déroulante concernant la civilité ?

    La macro fonctionne bien mais la liste civilité se déroule vide,

    Merci à vous

  114. Bonjour Lydia,

    J’ai réalisé votre exercice dans le cadre d’un travail. Je n’ai pas de liste déroulante dans mon formulaire, j’ai donc supprimé les parties avec les ComboBox. Lorsque j’exécute mon code, il fonctionne, jusqu’a ce que j’arrive au bouton « modifier ». La apparait un message d’erreur de ce genre: « Erreur d’execution ‘1004’: Erreur définie par l’application ou par l’objet. » Voici un copié colé de cette partie la du code:

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de cet armateur ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    For I = 1 To 5

    If Me.Controls(« TextBox » & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)

    End If

    Next I

    End If

    End Sub

    Voici mon code entier adapté à mes données:

    Option Explicit

    Dim Ws As Worksheet

    ‘Pour le formulaire

    Private Sub UserForm_Initialize()

    Dim J As Long

    Dim I As Integer

    Set Ws = Sheets(« Armateurs ») ‘Correspond au nom de votre onglet dans le fichier Excel

    For I = 1 To 5

    Me.Controls(« TextBox » & I).Visible = True

    Next I

    End Sub

    ‘ Pour le bouton Nouveau contact

    Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(« Confirmez-vous l’insertion de ce nouvel armateur ? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then

    L = Sheets(« Armateurs »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range(« A » & L).Value = TextBox1

    Range(« B » & L).Value = TextBox2

    Range(« C » & L).Value = TextBox3

    Range(« D » & L).Value = TextBox4

    Range(« E » & L).Value = TextBox5

    End If

    End Sub

    ‘Pour le bouton Modifier

    Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox(« Confirmez-vous la modification de cet armateur ? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then

    For I = 1 To 5

    If Me.Controls(« TextBox » & I).Visible = True Then

    Ws.Cells(Ligne, I + 2) = Me.Controls(« TextBox » & I)

    End If

    Next I

    End If

    End Sub

    ‘Pour le bouton Quitter

    Private Sub CommandButton3_Click()

    Unload Me

    End Sub

  115. Bonjour,
    j’ai fais votre exercice qui a très bien marché. J’ai essayé de reporter les données avec ce que je dois mettre en place qui est un peu différent du formulaire que vous proposez. Seulement, quand j’appuie sur F5, le message suivant s’affiche ‘Erreur d’exécution ‘9’ : l’indice n’appartient pas à la sélection ».
    Pourriez vous me dire ce qu’il ne va pas ?

    Merci d’avance !!!

    Option Explicit
    Dim Ws As Worksheet
    Private Sub UserForm_Initialize()
    ‘Pour le formulaire
    Dim P As Long
    Dim O As Integer
    ComboBox1.ColumnCount = 3 ‘Pour la liste déroulante AIDE
    ComboBox1.List() = Array(« matériel », « financier », « humain »)
    Set Ws = Sheets(« TABLEAU SUIVI ») ‘Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox2
    For P = 4 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range(« A » & P)
    Next P
    End With
    For O = 1 To 15
    Me.Controls(« TextBox » & O).Visible = True
    Next O
    End Sub
    ‘Pour la liste déroulante DEMANDE
    Private Sub ComboBox2_Change()
    Dim Ligne As Long
    Dim O As Integer
    If .Me.ComboBox1.ListIndex = -3 Then Exit Sub
    Ligne = Me.ComboBox2.ListIndex + 4
    ComboBox2.List() = Array(« en cours », « validée », « / »)
    ComboBox2 = Ws.Cells(Ligne, « D »)
    For O = 1 To 15
    Me.Controls(« TextBox » & O) = Ws.Cells(Ligne, O + 4)
    Next I
    End Sub
    ‘Pour la liste déroulante PROPOSITION
    Private Sub ComboBox3_Change()
    Dim Ligne As Long
    Dim O As Integer
    If .Me.ComboBox3.ListIndex = -5 Then Exit Sub
    Ligne = Me.ComboBox3.ListIndex + 2
    ComboBox3.List() = Array(« en cours », « validée », « / »)
    ComboBox3 = Ws.Cells(Ligne, « E »)
    Ligne = Me.ComboBox3.ListIndex + 5
    For O = 1 To 15
    Me.Controls(« TextBox » & O) = Ws.Cells(Ligne, O + 5)
    Next I
    End Sub
    ‘Pour le bouton NOUVELLE ENTREE
    Private Sub CommandButton1_Click()
    Dim R As Integer
    If MsgBox(« Confirmer l’ajout de cette nouvelle entrée? », vbYesNo, « Demande de confirmation d’ajout ») = vbYes Then
    R = Sheets(« TABLEAU SUIVI »).Range(« a65536 »).End(xlUp).Row + 1 ‘Pour placer le nouvel enregistrement à la premère de tableau non vide
    Range(« A » & R).Value = TextBox1
    Range(« B » & R).Value = TextBox2
    Range(« C » & R).Value = ComboBox1
    Range(« D » & R).Value = ComboBox2
    Range(« E » & R).Value = ComboBox3
    Range(« F » & R).Value = TextBox3
    Range(« G » & R).Value = TextBox4
    Range(« H » & R).Value = TextBox5
    Range(« I » & R).Value = TextBox6
    Range(« J » & R).Value = TextBox7
    Range(« K » & R).Value = TextBox8
    Range(« L » & R).Value = TextBox9
    Range(« M » & R).Value = texBox10
    Range(« N » & R).Value = TextBox11
    Range(« O » & R).Value = TextBox12
    End If
    End Sub
    ‘Pour le bouton MODIFIER
    Private Sub CommandButton2_Click()
    Dim As Long
    Dim P As Integer
    If MsgBox(« Confirmez vous la modification de ce contact? », vbYesNo, « Demande de confirmation de modification ») = vbYes Then
    If .Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Ws.Cells(« LignB ») = ComboBox2
    For P = 1 To 15
    If Me.Controls(« TextBox » & P).Visible = True Then
    Ws.Cells(Ligne, I + 2) = Me.Controls(TextBox & P)
    End If
    Next P
    End If
    End Sub
    ‘Pour le bouton QUITTER
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

      1. Je l’ai renommer mais maintenant j’ai le message suivant qui s’affiche « Erreur d’exécution: 2147024809 objet spécifié introuvable »

        Est ce qu’il y des erreurs dans la programmation ?

        Merci..

    1. Le message l’indice n’appartient pas à la sélection se produit lorsque l’on lance le programme et qu’il y a une cellule hors tableau qui est sélectionnée. Je m’explique sur avant de lancer le formulaire c’est une cellule vide qui est sélectionnée, le message d’erreur apparait.

  116. L’image est brouillée (alternance fond gris et grains), par contre on a le son et tes manipulations sont clairement audibles C’est dommage car ce tuto correspond exactement à mon besoin du moment. Qu’est ce qui ne va pas avec la vidéo ? peux-tu la recharger ?

  117. Bonjour
    Bravo pour ce blog.
    J’ai repris pas à pas votre exercice, sauf que j’ai 9 colonnes (de A à K).
    Quand je fais F5, j’ai un code erreur : La méthode Range de l’objet Worksheets a échoué.

    Où est mon erreur ? Merci !

    Voici un copier/coller de mon code :

    Option Explicit

    Dim Ws As Worksheet

    ‘Pour le formulaire

    Private Sub UserForm_Initialize()

    Dim K As Long

    Dim I As Integer

    ComboBox2.ColumnCount = 1 ‘Pour la liste déroulante Civilité

    ComboBox2.List() = Array(«  », « Monsieur », « Madame », « Mlle »)

    Set Ws = Sheets(« Clients ») ‘Correspond au nom de votre onglet dans le fichier Excel

    With Me.ComboBox1

    For K = 2 To Ws.Range( » A  » & Rows.Count).End(xlUp).Row

    .AddItem Ws.Range( » A  » & K)

    Next K

    End With

    For I = 1 To 9

    Me.Controls( » TextBox  » & I).Visible = True

    Next I

    End Sub

    1. Bonjour, J’ai un souci avec les copier coller et les affichages sur le blog (mais aussi ici dans les commentaires) avec les guillemets. Pouvez-vous vérifier les espaces à côté des guillemets ?
      C’est possible que ce soit votre unique problème.
      Tenez nous au courant/

  118. Bonjour Lydia,

    J’ai commencé à regarder cette formation sur la création d’un formulaire sur Excel mais j’ai dû m’arrêter au bout de quelques minutes seulement. Je possède la version 2011 pour Mac et l’onglet « option » dans le menu « fichier » n’apparait pas. J’ai cherché partout pour faire apparaitre ce fameux bouton « formulaire »… sans succès.

    Savez vous si dans ma version, on peut le trouver quelque part ?

    Merci pour votre travail qui nous est bien utile !

    Bab…

      1. Bonjour Lydia,

        Merci de votre réponse, mais je n’y ai pas trouvé ce que je cherchais. En outre, il semble que la version mac soit une version allégée car hors mis le bouton formulaire, il manque aussi la fenêtre des propriétés vba pour l’userform sous l’arborescence (qui elle, est bien présente)
        Je ne vois pas comment entrer les paramètres de mon interface.

        Si quelqu’un a une solution, je suis preneur !

  119. Bonjour

    j’aimerais savoir s’il serait possible lors du clique sur ajouter que dans une colonne Visual Bssic exécute la fonction « concatener » avec les information dans le formulaire?

    En tout cas Merci pour cette vidéo c’est un début de ce que je cherche à faire!

    Cordialement

  120. Super Tutoriel ! Merci!
    Si j’osais …je demanderai comment faire pour avoir selon le choix d’un argument dans un menu déroulant nommé ‘A’ (par exemple) des listes de valeurs différentes dans un menu déroulant nommé ‘B’ ?
    … si j’osais… bien entendu…

Répondre à Bollinger Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.