Rechercher dans ce blog

Nombre total de pages vues (en milliers)

CREER SON FORMULAIRE

CRÉER SON FORMULAIRE (USERFORM) SOUS EXCEL


Page en cours de refonte pour exploitation sous Microsoft 365
La programmation est exploitable pour les versions antérieures, seuls l'ergonomie et les visuels sont légèrement différents.



Qui n'a pas un jour utilisé l'option formulaire dans Excel ? La plupart d'entre vous je pense.
Ce formulaire a le mérite d'exister et fonctionne avec toutes les versions.

Source Microsoft : (https://support.office.com/fr-fr/article/Vue-d-ensemble-des-formulaires-contr%c3%b4les-de-formulaire-et-contr%c3%b4les-ActiveX-sur-une-feuille-de-calcul-dans-Excel-2016-pour-Windows-4969d331-9cea-44d3-9263-92376cad4dfc?ui=fr-FR&rs=fr-FR&ad=FR#bmdata_forms)

Excel peut générer automatiquement un formulaire de données intégré pour votre plage ou votre table. 
Le formulaire de données affiche tous les en-têtes de colonnes, sous forme d’étiquettes, dans une boîte de dialogue unique. 
Chaque étiquette comporte une zone de texte vide adjacente dans laquelle vous pouvez entrer des données pour chaque colonne, jusqu’à 32 colonnes maximum. 
Dans un formulaire de données, vous pouvez entrer de nouvelles lignes, rechercher des lignes en naviguant ou modifier et supprimer des lignes en fonction du contenu des cellules.
Si une cellule contient une formule, le résultat de la formule s’affiche dans le formulaire de données, mais vous ne pouvez pas modifier la formule à l’aide du formulaire de données.

Pour ma part, je ne le trouve pas agréable d'utilisation et son inconvénient c'est qu'il est limité en terme de champs soit exactement 32.
Ces champs correspondent aux colonnes juxtaposées que vous avez sélectionnées.
 



Donc, pas de possibilité d'avoir un formulaire avec des champs masqués et une visualisation agréable, ni de liste déroulante, ni de choix d'option et etc. comme dans l'image ci-après issue du même fichier.



Créer un formulaire de ce type n'est pas compliqué, et même relativement simple, si vous suivez scrupuleusement les explications à suivre.... Pas de limitation de champs, ergonomie personnalisée etc.


Donc au travail si vous le souhaitez.....

PARAMETRAGES D'EXCEL (Version Microsoft 365)

1)  Version d'enregistrement du fichier Excel :
      Vous devez enregistrer votre fichier sous "Classeur Excel (prenant en charge les macros)(*.xlsm)"    Recommandé

 
    


2) Vous devez avoir l'onglet  "Développeur" apparent dans Excel :


Pour afficher l'onglet Développeur dans Excel sous Microsoft 365, procédez de la manière suivante :
(Pour les autres versions vous trouverez facilement la méthodologie sur le web.)
  •  Dans le ruban supérieur cliquez sur Fichier , puis sur Option.
  •  Dans la fenêtre qui s'ouvre sélectionnez Personnaliser le ruban et cochez Développeur comme sur l'image suivante.
   Remarque   Le ruban est un élément de l'Interface utilisateur Microsoft Office Fluent


3) Les Macros doivent pouvoir être activées automatiquement :


  • Dans le ruban supérieur cliquez sur Fichier , puis sur Option
  • Dans la fenêtre Options Excel  sélectionnez Centre de gestion de confidentialité


  • puis dans la nouvelle fenêtre Centre de gestion de la confidentialié 
  • Sélectionnez Paramètres des macros
  • Puis cocher Désactiver toutes les macros avec notification.
  •  


CRÉATION DU FORMULAIRE


A ce stade, votre fichier est prêt pour la création d'un formulaire. Mais encore faut-il entrer quelques informations dans votre fichier.

Créez les colonnes suivantes (exemple sur lequel nous allons travailler) :
  • NOM
  • Prénom
  • Adresse
  • Code Postal 
  • Ville 
  • N° de Téléphone
  • N° de Fax 
  • E-mail
et bien plus si vous le souhaitez.... et renseignez quelques champs.


Maintenant nous allons cliquez sur l'onglet "Développeur" pour accéder à la programmation via Visual Basic.

Nous accédons à l'environnement Microsoft Visual Basic :


Vous pouvez utiliser un raccourci pour arriver à cet environnement en cliquant simultanément sur ALT + F11.

Sur ce lien vous accéder aux différents
 http://cellulexcel.blogspot.fr/p/menus-de-lediteur-vba.html



Le formulaire sera composé de :
* d'un USERFORM
* de deux boutons de commande (CommandButton)
* de 8 zones de texte (Textbox)
* d'une zone liste modifiable (ComboBox)
* de 8 intitulés (Label)



1) USERFORM

Dans un premier temps nous allons insérer un UserForm :
  • Choisir l'onglet Insertion
  • Cliquez sur Userform


Votre premier UserForm va apparaître et il sera nommé UserForm1
Si la boîte à outils  n'apparaît pas choisir l'onglet Affichage et cliquez sur Boîte à outils

Cette boîte à outils va nous permettre d'ajouter tous les éléments nécessaires au fonctionnement de notre formulaire à savoir :
  • Une liste déroulante de choix  ou de recherche
  • Les champs d'informations
  • Les titres des champs d'informations
  • Les boutons "Modifier" et "Quitter"


2) BOUTON DE COMMANDE

Définition d'un BOUTON DE COMMANDE :
En langage VBA, appelé CommandButton est utilisé pour lancer les traitements d'un programme.
C'est le plus important des contrôles.
Il ne transmet pas de données mais son événement "click" déclenche des actions.
La caption apparaît sur le bouton et doit annoncer sommairement ce qu'il fait.

Procédons à l'insertion des boutons "MODIFIER" et "QUITTER", pour cela cliquez sur le bouton de commande  une première fois. 

Votre bouton se positionnera dans l'UserForm sous le nom de CommandButton1, auquel nous allons attribuer un nom.

Dans la fenêtre Propriétés suivi du nom de l'objet sélectionné (dans le cas présent Propriétés - CommandButton1) remplacer le nom CommandButton1 en face de Caption par QUITTER


Procédez de la même manière pour le deuxième bouton de commande  (CommandButton2 = MODIFIER)

A ce stade, vous pouvez déjà visualiser votre formulaire avec ces deux boutons en appuyant sur la touche F5. Pour fermer le formulaire cliquer sur la croix en haut à droite.

3) ZONE DE TEXTE ou ZONE D'ENTREE TEXTE

Définition d'une ZONE DE TEXTE :
En langage VBA, appelé Textbox est utilisé pour afficher des informations saisie par l'utilisateur qui peut être récupérées par sa propriété Text ou Value.
Le contrôle doit être accompagné d'un label qui donne un minimum de description.

Nous allons maintenant insérer les zones de texte.


Insérer autant de ZONE de TEXTE que le nombre de colonne que vous avez dans votre fichier Excel.
Dans notre fichier d'exemple l'UserForm comporte 8 zones de texte.

Disposez-les un par un dans l'UserForm. A votre g, modifiez leur format (Couleur, style, ...) en les sélectionnant. Utilisez les poignées pour les étirer, les raccourcir ou autre.

Ne faites rien d'autres et surtout ne pas changer de nom. Ils doivent rester intitulés TextBox1, TextBox2 et etc.





4) ZONE LISTE MODIFIABLE

Définition d'une ZONE DE LISTE MODIFIABLE :
En langage VBA, appelé ComboBox est un contrôle qui réunit les caractéristiques de la zone de liste et de la zone de texte. 
L'utilisateur peut choisir un élément dans la liste ou saisir une valeurs dans la zone de texte.

Procédez de la même manière que précédemment pour insérer cette Zone Liste Modifiable, et positionnez-la où bon vous semble.
Elle s'appelle par défaut ComboBox1. Ne changez pas son nom dans la fenêtre Propriétés.


5) INTITULE

Définition d'INTITULE:
En langage VBA appelé Label est un contrôle qui permet d'afficher un texte non modifiable, par l'utilisateur, par exemple des titres ou des légendes, etc.
Il peut servir à communiquer un résultat mais le plus souvent à informer sur un autre contrôle.

Ajouter autant d'INTITULE que vous souhaitez dans l'UserForm pour repérer vos "zone de texte".

Le premier INTITULE s'appelle Label1 et ainsi de suite. Vous pouvez changer le nom dans l'UserForm en procédant  de la manière suivante  :
Dans la fenêtre propriétés remplacer le nom Label1 en face de Caption par "NOM" et ainsi de suite selon vos souhaits.


Et voilà vous avez normalement un résultat visible en pressant sur la touche F5

Mon exemple



Cliquez sur la croix en haut à droite pour fermer le formulaire car le bouton QUITTER n'est pas associé à un programme pour l'instant.


PROGRAMMATION de l'USERFORM

Vous avez sans doute remarqué, dès lors que vous ayez pressé la touche F5, que le formulaire se présentait à l'écran. Par curiosité, vous avez sûrement cliqué sur la touche QUITTER ou MODIFIER et essayé d'activer la liste déroulante.  

SANS RÉSULTAT

Et pour cause, le formulaire et tous les éléments qui y sont intégrés ne sont pas associés à une programmation.
Ce que nous allons effectuer maintenant. Vous n'avez pas besoin de connaissance particulière en programmation simplement de suivre à la lettre les explications ci-après.
Pour les plus curieux, n'hésitez pas tester voire même à consulter d'autres sites, mais je développerai plus tard quelques trucs et astuces.

Donc dans un premier temps retourner dans l'environnement Microsoft Visual Basic.
Cliquez n'importe où sur votre UserForm.
Votre UserForm va disparaître et laisser place à  un nouvel environnement :


 Supprimer le texte qui s'y trouve pour vous retrouver avec un environnement vide.

Sélectionnez le texte ci-après et collez-le dans cet environnement.
' Les lignes qui débutent par une apostrophe identifient un commentaire c'est-à-dire du texte exploitable par le lecteur et non par le programme VBA
' Objectif : documenter le code VBA pour le rendre plus compréhensible.



'Attention les deux lignes suivantes doivent être impérativement placées en tout début de programme
Option Explicit  'Activation de la déclaration explicite des variables
Dim Ws As Worksheet  'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm

'Correspond au programme du bouton QUITTER
Private Sub CommandButton1_Click()
Unload Me
 

'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
' Me => Référence à l'objet en cours
 End Sub

'Correspond au programme du FORULAIRE
'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
Private Sub UserForm_Initialize() 'à l'initialisation de l'userform
' Déclaration des variables grâce à Dim
'    1° Choisir un nom
'    2° Choisir un TYPE (= définir la nature du contenu)
' --------------------------------------------------------

Dim J As Long
'déclare la variable J
Dim I As Integer




' Affecter une valeur à une variable (= fixer la valeur de la variable)
  Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET

'On stock le nom de la feuille "FICHIER ADRESSES" dans une variable nommée WS

  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
'on lance une boucle de valeur mini 1 et maxi 8
    Me.Controls("TextBox" & I).Visible = True
'affiche les données dans les textbox
Next I
End Sub

'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim I As Integer
 


If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then

  If Me.ComboBox1.ListIndex = -1 Then Exit Sub
'On sort si pas de sélection
  Ligne = Me.ComboBox1.ListIndex + 2
  For I = 1 To 8
    If Me.Controls("TextBox" & I).Visible = True Then
      Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
    End If
  Next I
    End If
'fin de la condition

'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
            .NumberFormat = "0"
            .Value = .Value

End With
End Sub

'Correspond au programme de la LISTE DEROULANTE
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
  For I = 1 To 8
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
  Next I
 End Sub



Maintenant que vous avez inséré cette programmation, cliquez sur l'UserForm dans le projet pour faire apparaitre votre UserForm.



Dès que votre UserForm apparaît, appuyez sur F5 et...... Et YOUPI !!! Tout fonctionne par l'intermédiaire de l'environnement Vba Project.

Dans le présent programme vous avez remarqué que dans les annotations "Déclare la variable" donc si vous souhaitez en savoir plus, rendez-vous sur la page "DECLARATIONS DE VARIABLES" accessible via le lien suivant => DECLARATIONS de VARIABLES


Donc si vous souhaitez faire apparaître le formulaire depuis le fichier Excel il vous faut créer une macro avec une touche de raccourci :
 
Dans cet exemple j'ai donné à macro le nom de "FORMULAIRE"
 
Donnez à cette macro le nom que vous souhaitez.
Ensuite allez modifier cette macro

et insérer le texte suivant :
Sub FORMULAIRE() 'ou le nom que vous avez défini pour la macro
UserForm1.Show vbModeless '(*)
End Sub


(*) On distingue deux types d'Userform :
     1) En mode MODAL => Userform1.show
          Par défaut un Userform est en Modal, c'est-à-dire que l'utilisateur doit d'abord fermer l'interface pour pouvoir travailler sur une feuille de calcul.
     2) En mode Non MODAL => Userform1.show vbmodeless
         L'utilisateur peut intervenir sur une feuille de calcul en dehors de l'interface et sans la fermer.

Et voilà c'est fini.... Avec ce formulaire vous pouvez remonter toutes les informations insérées dans votre fichier Excel et modifier celles-ci.




SUITE => Insérer une nouvelle ligne via le formulaire

Pour insérer une nouvelle ligne via le formulaire voici la méthodologie.

Tout d'abord vous ajoutez un 3ème bouton de commande (CommandButton3) dans votre Userform que vous allez nommer  "Nouveau CONTACT"  :

Ensuite vous double-cliquez sur ce bouton pour lui attribuer un code de procédure pour l'insertion d'un nouveau contact. 

A l'écran s'affichera le texte suivant :

Private Sub CommandButton3_Click()

End Sub



A ce niveau vous allez insérer le code suivant entre les deux lignes affichées

Dim L As Integer

If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
'condition : si oui au message
L = Sheets("FICHIER ADRESSES").Range("a65536").End(xlUp).Row + 1
'Permet de se positionner sur la dernière ligne de tableau NON VIDE

Range("A" & L).Value = ComboBox1
'Insère la donnée de la liste déroulante dans la colonne A
Range("B" & L).Value = TextBox1
'Insère la donnée de la textbox1 dans la colonne B
'et à suivre....

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
End If




'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
            .NumberFormat = "0"
            .Value = .Value

End With

' Affiche une boîte de message
MsgBox ("Produit inséré dans fichier sélectionné") 'Vous informant que le présent contact est inséré dans votre tableau Excel.

Unload Me
' Vide et ferme l'Userform ( formulaire)
UserForm1.Show
'Affiche le  formulaire



Enregistrez votre fichier Excel et lancez votre formulaire.

A son ouverture, renseignez celui-ci...


et cliquez sur le bouton "Nouveau CONTACT"
Un message vous demandera de confirmer l'insertion de ce nouveau contact....


Après confirmation voici le résultat.





SUITE => Supprimer une ligne erronée  ou une ligne obsolète via le formulaire

Pour supprimer une ligne via le formulaire voici la méthodologie :

Tout d'abord vous ajoutez un 4ème bouton de commande (CommandButton4) dans votre Userform que vous allez nommer  "SUPPRIMER".

Ensuite vous double-cliquez sur ce bouton pour lui attribuer un code de procédure pour l'insertion d'un nouveau contact. 

A l'écran s'affichera le texte suivant :

Private Sub CommandButton4_Click()

End Sub



A ce niveau vous allez insérer le code suivant entre les deux lignes affichées

'Supprimer la ligne sélectionnée
Dim L As Long

If Me.ComboBox1.ListIndex = -1 Then Exit Sub
 L = Me.ComboBox1.ListIndex + 2
Ws.Rows(L).Delete


Enregistrez votre fichier Excel et lancer votre formulaire.
Et à vous de jouer.....



SUITE =>FORMULAIRE MULTIPAGES

 Si votre formulaire comporte un nombre très important de Textbox, vous pouvez opter pour la version formulaire Multipage.
Formulaire sera réduit et comportera  des onglets comme ceci.





Pour cela  cliquez sur le bouton Multipage de votre boite à outils.

Ensuite positionnez vos Textbox comme bon vous semble dans les onglets.

Pour ajouter un nouvel onglet, clic droit sur le multipage et choisissez "Nouvelle Page"  et clic droit vous pouvez la Renommer.

La programmation du formulaire ne change pas.




SUITE =>Envoyer un mail à votre contact via le formulaire.

Cette programmation fonctionne aussi bien avec Outlook Express ou Lotus Notes. Pour les autres applications je ne les ai pas exploitées. Si par le plus grand des hasards c'était le cas...pour vous, merci de me faire un retour afin que je puisse en faire profiter tout le monde.

Donc sur ce même formulaire, ajouter un 5ème bouton de commande (CommandButton5) que vous allez nommer par exemple "E-MAIL".

Ensuite vous double-cliquez sur ce bouton pour lui attribuer un code de procédure pour l'envoi d'un mail à l'interlocuteur choisi dans le formulaire :

Private Sub CommandButton5_Click()

End Sub



A ce niveau vous allez insérer le code suivant entre les deux lignes affichées

Dim MailAd As String
Dim Msg As String
Dim Subj As String
Dim URLto As String



'Sélectionne la cellule correspondant à l'adresse mail de la ligne :
If ComboBox1.ListIndex <> -1 Then Cells(ComboBox1.ListIndex + 2, 8).Select
'Le mail est adressé sur la base de la cellule active :
MailAd = ActiveCell

'On peut selectionner une plage de cellules pour effectuer un coller dans le mail :
'Range("B8:j32").Select
'Selection.Copy


'On peut mettre une personne en copie en ajoutant une texbox
'Copie = TextBox .Tex  'bien mentionner le n° de la texbox

Subj = "Votre Texte pour l'objet" 'Objet du message automatique mais on peut faire réféence à une TextBox
Msg = Msg & "Bonjour " & TextBox1.Text & ",%0D%0A %0D%0A" 'Corps du message
Msg = Msg & " Votre texte " & ",%0D%0A %0D%0A" & "Votre prenom ou NOM" & "%0D%0A %0D%0A" 'Corps du message
URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg & "&Cc=" '& copie
ActiveWorkbook.FollowHyperlink Address:=URLto

Enregistrez votre fichier Excel et lancez votre formulaire. Et à vous de jouer.....






SUITE =>Insérer ScrollBars (ou barre de défilement) :

 

Maintenant que vous maîtrisez  la création d'un formulaire, nous allons aménager celui-ci afin qu'il soit plus agréable en utilisation. 

Surtout si vous avez une multitude de Textbox et autres... Ce qui nous fait appaître à l'écran un énorme Formulaire, car il faut bien tout y mettre, mais ce n'est pas forcément esthétique.


Mais il y a toujours  une solution.



Celle-ci consiste à réduire le formulaire (éventuellement) et d'utiliser des barres de défilement.

Verticale, ou Verticale et horizontale, ou uniquement horizontale.


Donc voici la procédure :


Accéder aux propriétés du  formulaire avec Alt + f11.



Dans cettre fenêtre Propriétés  accéder à la ligne Scrollbars. 

Sur cette même ligne vous avez la mention  0 - fmScrollBarsNone.  





Sélectionnez dans la liste déroulante :

1 - fmScrollBarsHorizontal  pour le choix d'une barre de défilement Horizontal  (en bas du formulaire)

2 - fmScrollBarsVertical       pour le choix d'une barre de défilement Vertical (à droite du formulaire)

3 - fmScrollBarsBoth           pour le choix des deux barres de défilement (Horizontal et vertical)

Ensuite paramétrez la taille des barres de défilement dans ScrollHeigt ou ScrollWidth.


Attention les tailles de ces barres doivent toujours être supérieures à la taille du formulaire

Comme dans l'exemple ci-après :


Vous devriez arriver au résultat suivant :






















Vous pouvez aménager à votre guise la taille sur formulaire et la taille des barres de défilement.
A vous de jouer !!!




Agrandir ou réduire son formulaire avec un outils Zoom.

J'ai longtemps chercher sur la toile, mais j'ai trouvé et épuré le procédé.

Il m'est très utile dans le cadre de mon travail, car mes collègues n'ont pas forcément un environnement PC. Et un formulaire créé sur PC n'est pas très beau sur un environnement MAC.

De plus suivant la grandeur de l'écran de travail,  celui-ci n'est non plus très esthétique.

Pour ma part je travaille sur deux écrans simultanément mais pas de même taille (1280x800 pixels et 1680x1050 pixels). Donc ce procédé ZOOM m'est très utile pour afficher mon formulaire à la taille souhaitée suivant mon écran de travail.

Tous les éléments du formulaire seront réduitS ou augmentés en taille suivant votre choix via le bouton "ZOOM"


Donc voici la procédure.


Accéder aux propriétés du  formulaire avec Alt + f11.

Dans la boite à outils, choisissez le bouton Toupie (SpinButton) et insérerez-le dans le formulaire.




1) Ajouter le programme suivant juste en dessous  Option  Explicit
    (Si celle-ci n'existe pas il faut simplement l'ajouter)

'-------------------------------------
'Option Explicite pour le ZOOM soit SpinButton1

Dim Coef As Long
Dim ActionSpin As String
Dim ActionList As String

'--------------------------------------

2) Dans le programme Private Sub UserForm_Initialize()
    (Si celui-ci n'existe pas il faut simplement le créer)

Ajouter le code suivant :

'--------------Zoom à 100% + valeur Minimale et maximale du Zoom ----------
With Me.SpinButton1
                   .Value = 100  'valeur de base
                   .Min = 90       'Valeur mini du zoom en %
                   .Max = 125     'Valeur maxi du zoom en %
                   
End With
Reglage
'------------
--------------------------------------------------------------



3) Pour le réglage de l'ouverture de l'Userform à 100%

Ajouter le code suivant :

'-------------------------------------
'REGLAGE de l'userforme SpinButton
Private Sub Reglage()
With Me
Coef = .SpinButton1 - 100
.Height = ((280 / 100) * Coef) + 280 'correspond à la Hauteur de l'userform
.Width = ((425 / 100) * Coef) + 425 'correspond à la largeur de l'userform
.Zoom = .SpinButton1
End With
End Sub

'-------------------------------------

4) Pour l'action Zoom + et  Zoom- sur le bouton SpinButton (ou toupie)

Ajouter le code suivant :

'-------------------------------------
'ZOOM "PLUS"  avec SpinButton1
Private Sub SpinButton1_SpinUp()
ActionSpin = "Plus"
Reglage
End Sub


'ZOOM "MOINS"  avec SpinButton1
Private Sub SpinButton1_SpinDown()
ActionSpin = "Moins"
Reglage
End Sub

'-------------------------------------

5) et pour le fun, si vous souhaitez connaître le pourcentage de réduction ou d'augmentation, ajoutez le code suivant :

'-------------------------------------
'TITRE du formulaire avec % du zoom
'Facultatif
Private Sub SpinButton1_Change()
'Remarque : l'action Change étant un événement en amont de SpinUp ou SpinDown
Me.Caption = "    FORMULAIRE Zoom à : " & Me.SpinButton1 & " %"
End Sub
'-------------------------------------



Résultat :



























Personnaliser votre FORMULAIRE :

Si vous souhaitez personnaliser votre USERFORM (Formulaire), utiliser la fenêtre de propriétés.
Changer manuellement le nom, une fonctionnalité, l'apparence du formulaire...etc...


Description succincte des différentes propriétés :

=> BackColor ...... Spécifie la couleur de fond
                                   Choix par couleur "Système" ou "Palette" 

=> BorderColor .... Spécifie la couleur de bordure
                                   Choix par couleur "Système" ou "Palette" 
 
=> BorderStyle .... Spécifie le style de bordure
                                   Choix : 0 - fmBorderStyleNone => par défaut
                                                 1 - fmBorderStyleSingle 
 
=> Caption ............ Spécifie le texte affiché dans la barre de titre

=> Cycle ................ Spécifie l'action à effectuer lorsque l'utilisateur quitte le dernier contrôle
                                     Choix : 0 - fmCydeAllForms => par défaut
                                                   2 - fmCydeCurrentForm 

=> DrawBuffer ...... Spécifie le nombre de pixels de la mémoire tampon vidéo utilisée pour le rafraichissement de l'image 

=> Enabled ............ Spécifie si l'objet peut recevoir le focus et répondre aux événements générés par l'utilisateur
                                    Choix : Fasle
                                                 True 

=> Font ................ Spécifie la type de police de caractère
                                       Choix par sélection de la police de caractère, Style, Taille, Baret/ou souligné
 
=> Forecolor        : Spécifie la couleur de la police de caractère
=> Height               : Définit la dimension verticale
=> HelpContexID : Spécifie la rubrique d'un fichier d'aide
=> KeepScrollBarsVisible : Spécifie si les barres de défilement sont  visibles
=> Left                           : Définit la position par rapport au bord gauche de l'application
=> Mouseelcon           : Affecte un icône personnalisé
=> MousePointer....... Spécifie le type de pointeur
=> Picture.................. Spécifie l'image de fond de l'userform
=> PictureAlignment : Spécifie l'alignement de l'image de fond
=> PictureSizeMode  : Spécifie comment afficher l'image de fond
=> Picture Tiling ........... Permet d'afficher l'image en mosaïque
=> RightToLeft ............... Indique le sens d'affichage du texte et contrôle l'apparence visuelle sur un système  bidirectionnel.
=> ScrollBars ................. Indique si les barres de défilement verticales et horizontales doivent être affichées
=> ScrollHeight ............. Spécifie la hauteur de la zone totale pouvant être affichée en déplaçant la barre de défilement
=> ScrollLeft .................. Spécifie la distance, du bord gauche de la partie visible, à partir du bord gauche de l'UserForm
=> ScrollTop ................... Spécifie la distance, du bord supérieur de la partie visible, à partir du bord supérieur de l'UserForm
=> ScrollWidth ............... Spécifie la largeur de la zone totale pouvant être affichée en déplaçant la barre de défilement

=> ShowModal ............... Indique si la boîte de dialogue est modale=> SpecialEffect ............. Spécifie l'aspect du UserForm à l'écran=> StartUpPosition ........ Indique la position du UserForm lors de sa première apparition=> Tag .............................. Permet de stocker des informations supplémentaires=> Top .............................. Définit la position par rapport au bord supérieur de l'application=> WhatsThisButton ...... Indique si le bouton d'aide "Qu'est-ce que c'est" apparaît sur la barre de titre=> WhatsThisHelp .......... Indique si l'aide contextuelle utilise la fenêtre automatique fournie par l'aide de Windows  ou la fenêtre d'aide principale=> Width .......................... Définit la dimension horizontale=> Zoom .......................... Spécifie le changement de taille de l'objet=> Visible ........................ Spécifie si l'objet est masqué ou affiché.
   
A vous de jouer...




Vous pouvez me soumettre votre fichier à l'adresse mail suivante : 
blog.cellulexcel@gmail.com
 
Attention, suivant les sollicitations les réponses peuvent être plus ou moins tardives. C’est de l’entraide, pas un travail à temps plein.

N’hésitez pas à vous inscrire et à faire partager ce blog dans votre entourage.
Plus il y a des échanges,  plus les informations collectées nous enrichissent et c’est sans limite.
De plus la crédibilité de ce blog ne sera que plus accentuée.


Pour les réponses, je privilégie les inscrits. 
Donc n’hésitez pas cela ne vous engage à rien, c'est simple et gratuit.

MERCI
Emile

195 commentaires :

  1. Apres avoir copier coller la programmation, je clique F5 et un message apparait: 'Run time error'9': Subscript out of range'
    Une solution?
    Merci d'avance =)

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Vous avez du changer un paramètre dans votre formulaire.... soit ajouter ou supprimer une TextBox.
      Si vous ajouter ou supprimer vous devez modifier le code de la manière suivante :

      Une TextBox en moins : For I = 1 To 7
      Une TextBox en plus : For I = 1 To 9

      dans les codes suivants :
      Private Sub UserForm_Initialize()
      Private Sub CommandButton2_Click()
      Private Sub ComboBox1_Change()

      et Private Sub CommandButton3_Click() correspondant au bouton Nouveau contact, si vous avez pris la suite de la programmation du formulaire (Page modifiée ce jour)

      Bon courage.

      Supprimer
  2. un GRAND merci pour ce tuto !!!!
    c'est le plus clair que j'ai vu sur le net !
    votre blog est dans mes favoris, j'attends avec impatience vos nouveaux post

    mag

    RépondreSupprimer
    Réponses
    1. Merci à tous et toutes.....
      N'hésitez pas à en faire profiter votre entourage....

      Emile

      Supprimer
  3. Bonjour,
    Votre tuto est vraiment super, mais je bloque à l'étape de la programmation,
    J'ai beaucoup plus de TextBox que vous j'ai donc mis : Une TextBox en plus : For I = 1 To 22 comme vous l'avez expliquer précedemment,
    Mais ça ne marche toujours pas, pour infos j'ai également changer le nom des boutons de commande.
    J'etait vraiment bien bien parti grâce à votre tuto et j'ai besoin de faire un formulaire de saisie pour mon travail.

    Merci de votre réponse

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Je me suis permis de vous communiquer mon adresse mail dans le cercle Google+. A réception de votre fichier, je pourrai me permettre de résoudre votre problématique... en faire retour sur ce blog en détail dans le cas où d'autres visiteurs soient dans la même situation.

      Merci à tous, déjà 7200 pages visitées sur ce blog...
      A bientôt
      Emile

      Supprimer
    2. Bonjour,

      Merci pour ce tuto qui m’éclaire ! je suis débutant en VBA et je souhaite créer un formulaire pour une grosse base de donnée pour faciliter la saisie, est il possible de vous transmettre mon fichier pour me dire ce que vous en pensez ?

      Supprimer
    3. Bonjour julien,

      Avec plaisir.... je vous ai transmis mon adresse mail via Google+/hangouts - Cercle CELLULE EXCEL
      A bientôt

      Supprimer
    4. Bonjour,
      Merci pour ce super Tuto.
      J'ai le même problème, mais comme j'ai mélanger des TextBox avec des ComboBox ...
      Besoin d'aide !!
      Merci.

      Supprimer
  4. Bonjour,
    Merci de partager vos connaissances avec nous !
    Voici mon problème :
    Après quelques tâtonnements dus à l'ajout de plusieurs msgbox et combobox dans le programme, j'ai réussi à insérer les données dans mon fichier. mais si je relance la macro pour un nouvel enregistrement, elle ne s'arrête plus...
    j'ai remarqué qu'il y a du texte ajouté en plus dans "Sub Formulaire", on dirait que ça décrit les opérations effectuées.

    Je vous remercie de votre aide.


    RépondreSupprimer
    Réponses
    1. Bonjour Tidy,

      Pouvez-vous me communiquer votre code ? dans un premier temps.

      Emile

      Supprimer
  5. bonjour
    comment faire pour supprimer le petit triangle dans d3?dans le code VBA je ne trouve pas .merci pour votre future réponse.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Ajouter le code suivant dans le code du bouton "Nouveau CONTACT" et le bouton "MODIFIER" :

      With Ws.Range("D2:d10") 'Modifie le format des cellules de la plage D2:D10, changer la sélection de la plage pour aller au-delà
      .NumberFormat = "0"
      .Value = .Value
      End With

      Supprimer
  6. Bonjour

    Excellent travail pour la compréhension des néophytes courageux du VBA (dont je fais parti )!Un concentre d'enseignement en une seule leçon...
    j'aimerai connaître la possibilité de supprimer une entrée erronée ou devenue obsolète . Merci

    RépondreSupprimer
  7. Bonjour Benjamin,

    Question pertinente....et merci pour vos remarques.
    J'ai modifié la page du blog en conséquence...donc à vous de jouer...

    Emile

    RépondreSupprimer
    Réponses
    1. Bonjour Emile


      Merci, excellent cela fonctionne parfaitement !

      Supprimer
  8. Bonjour,

    j'ai un petit soucis c'est que lorsque je veux sauvegarder j'ai un message : Erreur de compilation:
    Membre de méthode ou de données introuvable

    et du coup bah coincé quoi ^^, le logiciel pointe sur :

    Correspond au programme du FORULAIRE
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET

    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 'affiche les données dans les textbox
    Next I
    End Sub

    le With Me.ComboBox1

    vous savez pourquoi?

    RépondreSupprimer
    Réponses
    1. Bonjour
      Attention si suppression de la Textbox7
      Si vous avez suivi scrupuleusement le tuto, la Textbox7 correspond aux informations qui doivent se trouver dans les cellules de la colonne H
      Donc si vous supprimez la Textbox7 et la colonne H, les informations apparaitront plus dans le formulaire et ne pourront plus être insérer dans le fichier ni même modifier. NORMAL
      Donc si vous voulez conserver la Texbox8 "observations" il faut renommer celle-ci "Textbox7" et changer le code "For I = 1 To 8" pour le remplacer partout par "For I = 1 To 7" ce qui correspond à 7 Texbox dans votre formulaire.
      et supprimer partout tout ce qui concerne la Texbox8
      Ensuite modifier la programmation du bouton "Nouveau Contact" en effaçant la ligne Range("I" & L).Value = TextBox8 qui correspond à la colonne i

      Emile

      Supprimer
  9. Déjà, merci de nous faire partager vos connaissances. Vous serait il possible de m'indiquer comment faire si la combobox1 utilise une liste d'une autre feuille excel du même classeur. Par avance merci.

    RépondreSupprimer
  10. Oceane,

    Le sujet est développé dans la page "Complément pour formulaire" au paragraphe "c) Liste déroulante issue d'une feuille de votre fichier"
    A vous de jouer
    Emile

    RépondreSupprimer
  11. Bonjour, quand je fais f5 le message suivant apparait 'erreur de compilation : membre de méthode ou de données introuvables'
    En effet dans programme FORULAIRE :
    Private Sub UserForm_Initialize() apparait en jaune et en dessous With Me.ComboBox1 combobox est en bleu.
    Comment puis je faire pour que cela fonctionne ?

    Merci d'avance

    RépondreSupprimer
    Réponses
    1. Marion

      As-tu créer une Combobox dans le formulaire ? Initialize ne trouve pas la combobox1... l'erreur doit provenir de ce point.

      Emile

      Supprimer
  12. Merci pour ce tuto excellent
    je souhaitrais pouvoir lr compléter par trois éléments
    1 - suppression d'un contact
    2- en cliquant sur l@dresse mail declencher un mail (outlook)
    3- j'utilise la case observation avec une @ de sire Http, donc idem en cliquant sur cette case du formulaire ouvrir la page web

    je vous souhaite de bonnes fêtes et une bonne année
    cdlt
    gilles

    RépondreSupprimer
    Réponses
    1. Gilles,
      Merci pour ces questions..
      J'ai mis à jour mon blog sur l'envoie d'un mail via OutLook (Cela mon fonctionne aussi avec Lotus Notes) voire la rubrique SUITE =>Envoyer un mail à votre contact via le formulaire.
      Pour le reste.... réponse bientôt..

      Supprimer
    2. Complément pour la suppression d'un contact (ou ligne)... voire rubrique SUITE => Supprimer une ligne erronée ou une ligne obsolète via le formulaire

      A bientôt

      Supprimer
  13. Salut, Comment faire pour que ce formulaire soit utiliser pour plusieurs onglets.
    Je m'explique à partir de votre belle formation, j'ai mis en place un formulaire de gestion mais j'ai plusieurs onglets qui correspondent au 12 mois de l'année et j'aimerais que l'utilisateur est la possibilité de sélectionner le mois (à partir d'un combox) sur lequel il désire interagir.
    Merci de votre aide

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Oui c'est réalisable...Je vais développer cette possiblité rapidement sur le blog.

      Supprimer
    2. Voili .... Voilou..... ça y est le premier "pêtage" de plomp.....
      Nouvelle page créée sur ce sujet....FORMULAIRE EXPLOITABLE SUR PLUSIEURS ONGLETS

      Amusez-vous bien...
      Emile

      Supprimer
  14. Bonsoir,

    Je n'arrive pas à réaliser la programmation pour mon formulaire :( Est-ce que quelqu'un peut m'aider je me creuse la cervelle depuis 1 semaine !!
    Merci :










    RépondreSupprimer
    Réponses
    1. Bonsoir,
      Avez-vous suivi scrupuleusement les étapes ? Si oui il ne devrait pas y avoir de souci dans le cas contraire inscrivez vous sur le site et faites-moi parvenir votre fichier.
      Bon courage.

      Supprimer
  15. Bonsoir comment sa se passe si on remplace la combox par une textebox ?

    RépondreSupprimer
    Réponses
    1. Tony...

      La question "Piège"... j'ai buggé.
      Si je trouve la solution je la développe..
      A bientôt

      Supprimer
  16. bonjour
    votre tuto est le 1er que je lis sur le net, qui est clair ! bravo
    je suis une grande grande grande débutante, et j'ai des soucis dès la programmation,
    pouvez vous m'aider svp
    merci par avance

    RépondreSupprimer
  17. Morgane
    N'hésites pas à t'inscrire et à me poser tes problématiques sur Googl+
    A bientôt
    Emile

    RépondreSupprimer
  18. Bonjour

    Bravo pour ce tutoriel. J'en avais consulté une tonne et à chaque fois je bloquais. Pourriez-vous m'indiquer quelle serait la prog à suivre si à la place de la textbox1 de la colonne B, j'ai une listbox avec 3 choix possible : par exemple, maison, appartement, immeuble et quelle serait la marche à suivre pour programmer que la textbox8 = 1.196* textbox 7, par exemple. Merci beaucoup pour votre retour.

    Frédéric

    RépondreSupprimer
    Réponses
    1. Bonsoir,

      Cette solution devrait fonctionner avec cette programmation dans Initialize
      Textbox8 = CDec(Textbox7) * 1.196

      En ce qui concerne la liste déroulante avec les trois choix, merci de vous référer au sujet "Complément pour formulaire"
      Bon courage
      Emile


      La fonction CDec transforme le texte-numérique en type décimal

      Supprimer
  19. Bonjour Emile,

    J'ai adoré ce tuto et j'ai fait une grande avancée pour répondre à mon besoin actuel! J'aimerai savoir s'il est possible d'aller plus loin et d'avoir plusieurs combobox qui ne feraient pas apparaitre les doublons et qui feraient office de filtres? Par exemple avoir une combobox "NOM" et une combobox "PRENOM" pour pouvoir sélectionner tous les "Monsieur DUPOND" dans la première combobox puis après pouvoir sélectionner l'enregistrement qui correspond à "Monsieur DUPOND Marcel" par exemple. J'aimerai juste savoir si c'est possible avant de me creuser la tête pour trouver comment faire :)

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Je partage cet enthousiasme. Ce tuto est génial.
      Mais j'ai une question similaire. Comment avoir une combobox qui ferait aussi office de filtre ?
      Je suis en train d'adapter ce tuto à mon fichier de travail qui comporte + de 400 lignes et est voué à grandir. Ma 1ère colonne me sert de recherche et les données qu'elle contient peuvent se ressembler. Par exemple je cherche les infos de Astier Energie 2 (A:215) mais quand je tape Astier dans la Combobox, je tombe sur Astier Energie (A:89). Je dois ensuite scroller jusqu'à Astier Energie 2.
      J'aimerais que la ComboBox agisse comme le filtre de recherche Excel; en commençant à taper le nom, seules les cellules contenant ces caractères seraient affichées dans la liste.

      Merci d'avance et encore bravo pour le tuto.

      Supprimer
  20. Bonjour
    Tout fonctionne jusqu'a 36 TextBox, ensuite ça plante. Auriez vous une solution ?

    RépondreSupprimer
    Réponses
    1. Bonjour Eric,
      Vous avez sûrement effectuer une erreur dans le code. Nous ne sommes pas limités en Textbox.... L'erreur vient peut-être d'ici..
      For I = 1 To 8 vous devez avoir normalement For I = 1 To 36 et cette information doit être modifiée dans l'ensemble du code.
      Bon courage.
      Emile

      Supprimer
  21. Très bon TUTO !!! SI on est un peu rigoureux dans la lecture et la procédure , ça marche niquel et du premier coup !!!

    RépondreSupprimer
  22. Bonjour,
    Tuto extra,cependant avant de me lancer j'aurais voulu votre avis d'expert!
    En fait je suis en stage et doit faire une proposition de réorganisation d'une base de données, qui sera amenée à être remplie, consultée ou modifiée par plusieurs personnes, et qui plus est qui n'utilisent Excel que pour remplir des cases de tableau avec du texte.
    N'y a t-il pas un risque que le formulaire soit un outil trop compliqué? Trop long à expliquer? Ou bien trop figé? (puisque lorsque j'aurais fini mon stage, ne pourra plus être modifié/adapté)

    RépondreSupprimer
    Réponses
    1. Bonjour Anne,

      Expert non de là...je partage simplement mes connaissances en espérant apporter des solutions à toutes les personnes qui consultent mon blog. Merci tout de même.
      Pour répondre à votre question le formulaire dépend des informations que vous souhaitez mettre ou qui se trouvent dans votre base de données. Ce n'est pas limité en terme de listes déroulantes, des boutons d'option, de case à cocher et etc.
      Le principe est que le formulaire puisse renseigner la base de données sans pour autant naviguer au sein même du fichier Excel, surtout s'il y a une multitude de colonnes et de lignes (pour exemple j'ai déjà travaillé pour une personne qui avait un choix de saisie de 5 produit par jour et étalé sur une année calendaire et avec 450 clients, ce qui représentait environ un choix de 820 000 cellules potentiellement amenées à être renseignées.....) Donc une personne ne maitrisant pas la programmation peut l'utiliser sans souci.
      Le deuxième point important, c'est la programmation. Il faut que les personnes susceptibles de corriger cette programmation aient un maximum d'informations sur votre manière d'avoir élaborer celle-ci. Vous aurez une approche de programmation qui, par exemple, sera peut être sensiblement différente de la mienne, mais qui fonctionnera aussi. Donc si cette programmation est suffisamment précise et interprétable par les "experts", celle-ci sera pérenne.

      Inscrivez vous à mon blog et joignez moi un fichier Excel.... et je vous communiquerai si cette programmation est envisageable. Pas la peine d'y mettre la totalité des informations.... une dizaine ligne suffisent..... A bientôt peut être.



      Supprimer
  23. Bonjour
    J'ai un problème avec la liste déroulante de mon formulaire
    lorsque j'ouvre le formulaire et clique sur la liste déroulante des noms, aucun nom n’apparaît à l'intérieur. je ne comprends pas j'ai pourtant suivi scrupuleusement vos lignes.

    RépondreSupprimer
  24. Bonjour Laurent,

    Surprenant ? n'hésitez pas à vous inscrire et faites moi parvenir votre fichier....

    RépondreSupprimer
  25. Bonjour,
    Je suis actuellement en stage dans une entreprise qui me demande de créer un formulaire avec un fichier excel. Je suis en plein essaie afin de pouvoir leur donner un résultat concret d'ici la fin de mon stage.
    Quand je fais le copier/coller et que je reclique sur userform, pour ensuite appuyer sur F5, une fenêtre s'affiche en me disant qu'il y a une erreur d'exécution et que l'objet spécifié est introuvable. Est-ce normal, puisque j'ai suivis les étapes au pied de la lettre?

    Kelly.

    RépondreSupprimer
  26. Re-bonjour,
    Du coup, j'ai trouvé la solution à mon problème. Mais en allant un petit peu plus loin, je me retrouve encore une fois bloqué.
    En effet, quand je suis à l'étape de la création du Macro, et que je rentre le "code" suivant :
    "Sub FORMULAIRE()
    UserForm1.Show vbModeless
    End Sub"
    Je me retrouve avec une erreur de syntaxe. au niveau du "Sub FORMULAIRE" ; Que faire?

    Kelly.

    RépondreSupprimer
    Réponses
    1. Bonjour Kelly,

      Ce code fonctionne, donc l'erreur ne doit pas venir de là mais plutôt de l'ouverture du formulaire.
      Pour vérifier le bon fonctionnement de votre formulaire, allez dans la programmation VBA (Alt + F11), ensuite sélectionnez votre formulaire et appuyez sur F5.
      Si l'erreur apparaît c'est qu'il y a un défaut dans votre programmation.

      En vous inscrivant sur ce blog, et me faisant parvenir votre fichier, je peux vous venir en aide en vous commentant votre erreur (si elle existe)
      A bientôt


      Supprimer
    2. J'ai fais ce que vous m'avez dis, et ce message apparaît :
      " Erreur de compilation
      Nom ambigu detécté : FORMULAIRE"
      Du coup, je ne peux plus rien faire ensuite...

      Supprimer
    3. Bonjour Kelly

      Faites-moi suivre votre fichier à l'adresse suivante :
      et1000lio@yahoo.fr

      Supprimer
  27. Je reviens vers vous car votre programme est tellement bien fait que je m'en suis servie pour mon travail. Mon problème se situe au fait que l'userform est commun à plusieurs feuilles excel. J'ai inséré des boutons qui sélectionne des feuilles excels et j'aimerai me servir de votre userform pour remplir les feuilles excels selon le bouton choisi. Vous serait il possible de m'aider ? Dans l'attente de vous lire, je vous souhaite de passer une bonne journée.
    OCEANE

    RépondreSupprimer
    Réponses
    1. Bonjour Océane,

      Oui l'userform peut servir pour plusieurs feuilles mais il faut que ces feuilles aient exactement la même structure. On peut envisagé une liste déroulante (Combobox) qui liste tous les feuilles présentes dans le classeur, et naviguer dans le classeur avec l'userform.
      Sujet développer dans la page "FORMULAIRE EXPLOITABLE SUR PLUSIEURS ONGLETS " (accès via SOMMAIRE)
      Vous pouvez éventuellement me faire votre fichier à : et1000lio@yahoo.fr

      A bientôt

      Supprimer
  28. Très bon tuto. J'aimerai m'en servir pour mon travail mais en apportant des modifications. Voila j'aimerai que l'userform soit commun à plusieurs feuilles excels en fonction de 5 boutons qui indiquerai la feuille excel sur laquelle il faudra travailler. Dans l'attente de vous lire et vous en remerciant par avance.

    RépondreSupprimer
  29. Bonjour,
    Je trouve votre programme très bien c'est pourquoi j'aimerai l'utiliser pour mon travail, mais des modifications sont à apporter car j'aimerai que l'userform soit commun à plusieurs feuilles excel préalablement défini par des boutons qui selectionne la feuille sur laquelle je veux travailler. Vous serait il possible de m'aider car j'ai cherché en avoir mal à la tête. Dans l'attente de vous lire, Cordialement

    RépondreSupprimer
  30. Excellent Tuto, par contre quand je clic sur F5, j'ai un message qui apparaît "Erreur d'execution '438': Propriété ou méthode non gérée par cette objet (et si je clique sur Débogage cela me dirige vers Sub FORMULAIRE() 'ou le nom que vous avez défini pour la macro
    UserForm1.Show vbModeless
    End Sub

    Pourriez-vous m'aider?

    merci

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Il y a une erreur dans la programmation du formulaire, de ce fait il ne peut pas ouvir l'Userform via la macro.
      Si vous supprimer momentanément la macro, mettez tout simplement un apostrophe devant chaque ligne comme ceci
      'Sub FORMULAIRE() 'ou le nom que vous avez défini pour la macro
      'UserForm1.Show vbModeless
      'End Sub

      L'apostrophe empêche le programma de lire les informations qui se trouve derrière cette apostrophe.

      Cela effectué, sélectionnez votre formulaire et appuyez sur F5, et vous allez surement repérer votre erreur via le débogage.

      Emile

      Supprimer
  31. Bonjour,
    Est il possible d'obtenir la liste de recherche par ordre alphabétique sans faire le tri au préalable dans la feuille de calcul?
    Merci d'avance

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Question pertinente, c'est envisageable et je l'ai réalisé (et "alambiqué").... Cela complique un peu le code mais cela fonctionne.... je vais le développer prochainement sur le blog dans l'onglet "Compléments pour formulaire"

      Emile

      Supprimer
    2. Sujet développé dans l'onglet "Compléments pour formulaire"

      Supprimer
  32. C'est vraiment génial de nous offrir ce sujet, précis, et construit. Je vais pouvoir dérouiller et agrémenter mes souvenirs en vba, créer un bel outil pour une belle activité.
    Un grand grand Merci !!

    RépondreSupprimer
  33. Bonjour,
    Tout d'abord je vous remercie pour ce tuto très bien expliqué, je découvre le vba et je me lance pour la 1ére fois dans la création d'un formulaire.
    J'ai copié vos instructions et changé en fonction de mon formulaire, mais lorsque j'appuie sur F5, un message d'erreur apparaît tel que (erreur d’exécution '-214702489 (80070057) objet spécifié introuvable.
    Savez-vous de quoi il s'agit?
    Merci pour votre réponse

    RépondreSupprimer
  34. j'ai suivi votre Tuto sur la création d'u formulaire avec VBA

    c'est juste dans mon cas, j'ai en ordre :
    ComboBox1
    TextBox1
    ComboBox2
    ComboBox3
    TextBox2
    TextBox3
    TextBox4
    TextBox5
    TextBox6

    et au programme de la liste déroulante, je veux afficher les textBox et les Combobox.
    est-ce possible et comment ?

    merci

    RépondreSupprimer
    Réponses
    1. Tayeb,

      C'est envisageable, mais plus complexe. Adressez-moi votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com.
      Je vous guiderai suivant la complexité..... et éventuellement cela me permettra de créer une page sur mon blog.
      A bientôt
      Emile

      Supprimer
    2. Bonjour,
      je suis encore débutant sur vba , j'ai une problématique similaire à celle de Tayeb,

      pourriez vous me dire comment vous contacter je suis vraiment coincé après plusieurs tentatives de tatonage ...:'(

      merci par avance

      Supprimer
  35. Bonjour,

    Merci pour ce tuto.

    Dit, pourquoi mes données inseré ne s'affichent pas dans la liste déroulante?

    Ainsi est-il possible d'ajouter un bouton "Supprimer" pour pouvoir supprimer une entrée?

    Si oui, pouvez-vous me communiquer la source de ce bouton?

    Merci et très cordialement,

    RépondreSupprimer
    Réponses
    1. Bonjour Bedod
      Les données devraient s'afficher dans la liste déroulante..il doit y avoir une erreur dans le code. Est-ce que le nom de l'onglet, où sont collectées les informations, est bien indiqué dans le programme.

      A la question "Ainsi est-il possible d'ajouter un bouton "Supprimer" pour pouvoir supprimer une entrée?" Qu'entendez vous par supprimer une entrée?
      Si c'est une ligne dans le fichier excel, la méthodologie est expliquée sur cette page.
      Si c'est pour effacer l'ensemble des informations dans le formulaire à l'écran c'est possible.

      Vous pouvez m'envoyer votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com
      Emile

      Supprimer
  36. bonjour comment rajoute une ComboBox2
    merci

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Simple : ajoutez "Une zone de liste modifiable" (Combobox1) et suivre les instructions dans la rubrique "Compléments pour formulaire" sur le présent Blog.
      Si vous avez des difficultés, Vous pouvez m'envoyer votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com

      Supprimer
    2. je vous est envoyer le fichier FORMULAIRE OK
      merci

      Supprimer
  37. Bonsoir,
    Merci pour ce tutoriel qui m'a bien aidé. Je l'ai adapté pour qu'il convienne à mes besoins, mais il y a trois petits points sur lesquels je coince.

    1) Une erreur dont voici le message :
    Erreur d'exécution '91' :
    Variable objet ou variable de bloc With non définie

    2) Je souhaiterais que les chiffres entrés dans le formulaire soient au format monétaire (ex. : 100.00 €).
    Comment procéder ?

    3) J'utilise ce formulaire pour remplir un tableau de 15 colonnes divisé en cinq parties.
    1ére partie : Date; Désignation; Actions; Lieux; Commentaires. (Cette 1ére partie est commune à toutes les autres).
    2éme partie : Recettes (espèces, chèques, virements)
    3éme partie : Dépenses (espèces, virements)
    4éme partie : Caisse (espèces, chèques)
    5éme partie : Banque (espèces, chèques, virements)
    Cela fait un grand tableau peu pratique à utiliser lors de réunion. L'idéal serait que les données entrées dans le formulaire soient réparties directement dans quatre tableaux (chacun dans une feuille différente et avec la composition suivante : 1ére partie + 2éme partie; 1ére partie + 3éme partie; 1ére partie + 4éme partie; 1ére partie + 5éme partie) et cela en complétant qu'une seule fois le formulaire. cela est-il possible et si oui comment procéder ?
    Merci pour votre aide et encore merci pour vos tutoriels.

    RépondreSupprimer
    Réponses
    1. Bonjour

      Réponse à la question :
      1) Soit votre bloc With ne se termine pas par End With ou une variable n'est pas déclarée dans ce bloc (Dim xxxx as xxx)
      2) Exemple : TextBox1.Value = Format(Range("A1").Value, "0.00" & " €")
      3) Il y a peut être une possibilité avec un formulaire en appelant un autre.. ou créer un formulaire Multipages (formulaire avec onglets).. mais je ne peux y répondre sans fichier.
      Vous pouvez m'envoyer votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com

      Supprimer
  38. Bonjour,
    Merci pour votre tuto qui m'a permis de faire mon premier formulaire personnalisé dans Excel, j'ai repris l'exemple à la lettre et cela fonctionne très bien.
    Maintenant pour mettre en pratique, j'ai un tableau de 76 colonnes où je doit aller chercher une quarantaine informations (TextBox et ComboBox) qui se trouvent éparpillées sur les 76 colonnes
    Question : Est-ce possible
    Si oui comment indiquer à chaque TextBox ou ComboBox la colonne qu'il doit scruter ?.
    Par ailleurs pouvez vous mieux m'expliquer les parties "userform_initialize()" et "ComboBox1_Change()"
    Merci

    RépondreSupprimer
    Réponses
    1. Quand un formulaire Excel se lance, une série d'événements se produisent.
      Un de ces événements est appelée initialisation.
      L'événement Initialize se préoccupe de la forme et de ses contrôles du formulaire. Cela vous permet de mettre en place un code d'initialisation, comme la définition des variables, de commutation ou de désactiver les contrôles, et beaucoup d'autres choses encore. Donc dans notre exemple :

      Dim = On créer une variable qui permet de stocker toutes sortes de données (Voire plus de détails : http://www.excel-pratique.com/fr/vba/variables.php)

      Initialize à l'ouverture du formulaire va chercher les éléments de la Colonne A et à partir de la 2ème ligne. Il alimente la Combobox1 avec ces informations d'où la possibilité de faire un choix dans la liste déroulante.
      With Me.ComboBox1
      For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
      .AddItem Ws.Range("A" & J)
      Next J
      End With

      Avec la déclaration de la Variable Dim I as integer (Numérique), on définit les chiffre 1 à 8 inclus. Donc dans le contrôle (Me.controls) on stipule que toutes les Textbox de 1 à 8 son visibles dans le formulaire.
      For I = 1 To 8
      Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
      Next I


      2) Faire remonter les informations de 40 colonnes sur 76, c'est possible mais trop complexe à expliquer ici.
      Tu peux m'envoyer ton fichier (3 ou 4 lignes suffisent y compris les en-têtes) car je ne pourrai pas répondre sans pouvoir scruter le contenu.
      A l'adresse suivante : blog.cellulexcel@gmail.com)

      A bientôt

      Supprimer
  39. Bonjour,
    Merci pour ce tutoriel précis, pratique et adapté aux débutantx comme moi!
    Je souhaite effectuer deux formulaires de ce type.
    - Le premier concerne les colonnes de 1 à 38 d'un classeur
    - Le second concerne les colonnes 38 à 99 du même classeur
    J'ai changé le nom des fonctions du 2ème code pour éviter les doublons, et j'ai changé le nom de la Combobox et partout dans le code du 2ème userform j'ai mis le nouveau nom, même si elle renvoie pour les deux formulaires à la même liste. Pour le reste j'ai cru, naïvement peut-être, qu'il suffisait de changer "For I = 1 to 8" en "For I = 38 to 99". Je n'ai pas de message d'erreur mais aucun élément dans la liste déroulante ni dans les text box.
    Est-ce aussi simple que je le pensais?
    Avez -vous une idée de mon erreur?

    Merci beaucoup pour votre réponse !

    RépondreSupprimer
  40. Bonjour,
    Pour commencer merci pour ce beau tutoriel.
    J'ai un petit Soussi tout ce qui il a après la colonne G se décale d'une case jais changer " For I = 1 To 13" mais rien !!
    avez vous la solution a mon problème.
    par avance merci

    RépondreSupprimer
    Réponses
    1. Bonjour Sébastien,

      Si vous avez suivi les instructions, la valeur de la Textbox13 devrait se trouver en colonne N sur votre fichier Excel.
      Mais ce n'est pas un souci, transmettez-moi votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com, je vous communiquerai les corrections à apporter...et peut-être faire part aux lecteurs de ce blog de l'erreur à ne pas faire...
      A bientôt

      Supprimer
  41. Bonjour,

    Et merci pour ce super tuto !

    En faisant F5 j'ai ce message qui s'affiche : erreur d’exécution '-2147024809 (80070057)':

    J'ai beau tout regarder, je ne vois pas mon erreur

    Merci

    Rebecca

    RépondreSupprimer
    Réponses
    1. Bonjour Rebecca,

      Difficile de vous répondre.... Vous pouvez m'envoyer votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com

      Supprimer
  42. Bonjour , j'aimerais pouvoir avoir un bouton qui imprimerais sur une feuille le contenu de mon formulaire avec la disposition que j'ai établie.

    surement possible .

    Merci en passant je commence et votre blog est très bien construit et clair.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      On peut imprimer directement un formulaire "rempli" sur une feuille.
      Voici la méthode (Le code n'est pas de moi.... l'auteur se reconnaitra peut-être)

      Insérer dans un module le code suivant :
      Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, _
      ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

      Public Const VK_SNAPSHOT = 44
      Public Const VK_LMENU = 164
      Public Const KEYEVENTF_KEYUP = 2
      Public Const KEYEVENTF_EXTENDEDKEY = 1

      Puis créer un bouton sur votre formulaire et intégrer le code à l'événement click (exemple pour le bouton de commande ComandButton1)
      Private Sub CommandButton1_Click()
      'BOITE DE DIALOGUE POUR LA DEMANDE D'IMPRESSION
      Dim IPVM
      IPVM = MsgBox("AVEZ-VOUS UNE IMPRIMANTE DE CONNECTEE ?", vbYesNo + vbDefaultButton2 + vbQuestion, " DEMANDE D'IMPPRESSION")
      If IPVM = vbNo Then Exit Sub

      If IPVM = vbYes Then
      Application.ScreenUpdating = False
      DoEvents
      keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
      keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
      keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
      keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
      DoEvents
      Workbooks.Add
      Application.Wait Now + TimeValue("00:00:01")
      With ActiveSheet
      .PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
      .Range("A1").Activate
      .PageSetup.Orientation = xlLandscape
      .PageSetup.LeftMargin = Application.InchesToPoints(0)
      .PageSetup.RightMargin = Application.InchesToPoints(0)
      .PageSetup.TopMargin = Application.InchesToPoints(0.3)
      .PageSetup.BottomMargin = Application.InchesToPoints(0)
      .PageSetup.HeaderMargin = Application.InchesToPoints(0)
      .PageSetup.FooterMargin = Application.InchesToPoints(0)
      .PageSetup.PrintHeadings = False
      .PageSetup.PrintGridlines = False
      .PageSetup.PrintComments = xlPrintNoComments
      .PageSetup.CenterHorizontally = False
      .PageSetup.CenterVertically = False
      .PageSetup.Draft = False
      .PageSetup.PaperSize = xlPaperA4
      .PageSetup.Order = xlDownThenOver
      .PageSetup.BlackAndWhite = False
      .PageSetup.Zoom = 100
      End With
      ActiveWindow.SelectedSheets.PrintOut Copies:=1
      ActiveWorkbook.Close False
      UserForm1.CommandButton1.SetFocus
      Application.ScreenUpdating = True
      End If
      End Sub


      Donc dès lors que vous cliquez sur le bouton, le formulaire sera imprimé sur l'imprimante connecté par défaut.

      A bientôt

      Supprimer
  43. Bonjour,
    Je viens de faire pas à pas votre tuto et tout se passe à merveille. J'aimerai mettre en place un 2° comboBox. J'affiche les données avec Array et pour le fun j'ai essayé également avec ROWSOURCE. Les deux cas, tout marche. Mais après c'est l'échec. Je n'arrive pas à lancer mon formulaire via F5 sans que cette erreur s'affiche erreur d’exécution '-2147024809 (80070057)':

    Voici ce que j'ai mis

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

    Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET

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

    ComboBox2.ColumnCount = 1
    ComboBox2.List() = Array ("", "Fille","garçon")

    For I = 1 To 9
    Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
    Next I
    End With
    End Sub


    Et là tout bloque. je n'arrive pas à trouver l'erreur. Pourriez-vous l'aider ?

    Merci

    RépondreSupprimer
  44. Bonjour,

    Attention, votre formulaire comporte 9 textbox, n'avez-vous pas supprimer une d'elles pour la remplacer par la Combobox2. Si c’est le cas c’est normal qu’il y ai ce message d’erreur.

    Si vous n’y parvenez pas, vous pouvez m'envoyer votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com.

    A TOUS :
    La question d’insertion de combobox (ou liste déroulante) m’est souvent posée. J’ai bien pensé créer une page sur ce sujet mais la programmation est beaucoup plus complexe et chaque fichier est différent suivant où ces combobox sont positionnées et à quoi elles von servir. Donc ce n’est pas envisageable.

    Par contre vous pouvez me soumettre vos fichier…. Mais attention, suivant les sollicitations les réponses peuvent être plus ou moins tardives. C’est de l’entraide pas un travail à temps plein.

    N’hésitez pas à vous inscrire et à faire partager ce blog dans votre entourage. Plus il y a des échanges plus les informations collectées nous enrichissent et c’est sans limite.
    Je privilégie les inscrits pour les réponses. Donc n’hésitez pas cela ne vous engage à rien, c'est simple et gratuit.

    Merci pour votre compréhension.

    RépondreSupprimer
  45. Bonjour EMILE RIOU,
    Très ravi de travail ssur votre tuto qui est très très édifiant, de ce fait je suis entrain de travail sur mon propre formulaire qui marche accès bien sauf que j'ai plusieurs colonne dont 6 TextBox et 5 Combobox je vous envoi par mail mon fichier pour m'aider à atteindre mon objectif càd enregistre automatique les personnes (Par N°, Nom, Postnom,Prénom, Adresse, Pays,Sexe,Juridiction,Mandat,Cellule,Situation Carcérale et Délit)

    RépondreSupprimer
  46. Bonjour,
    super tuto merci,
    j'ai fais un formulaire un peu plus complexe qui pour le moment ne marche pas, malgré la modification du nombre de textbox, "Erreur d'exécution '-2147024809(80070057)': objet spécifié introuvable." pouvez vous m'aider à sortir de se pétrin? meme en parcourant avec F8 je ne comprends pas pourquoi celà bloque.

    merci beaucoup.


    RépondreSupprimer
    Réponses
    1. Bonjour Caroline,

      Si votre fichier et formulaire est complexe, je ne peux pas vous répondre sans fichier.
      Vous pouvez me faire parvenir votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com.
      Deux lignes me suffisent : En-tête de Colonne et une ligne renseignée.

      N’hésitez pas à vous inscrire et à faire partager ce blog dans votre entourage. Plus il y a des échanges plus les informations collectées nous enrichissent et c’est sans limite.
      Je privilégie les inscrits pour les réponses. Donc n’hésitez pas cela ne vous engage à rien, c'est simple et gratuit.
      De plus la crédibilité de ce blog ne sera que plus accentuée.
      MERCI

      Supprimer
    2. merci beaucoup,

      je ne me suis jamais lancée dans un formulaire aussi complet mais il nous simplirait bcp la vie.

      je vous adresse le mail.

      bonne soirée

      Supprimer
  47. Christophe MOLLE11 mars 2015 à 15:39

    Merci pour cet excellent tutoriel. Les explications sont claires et concises. De plus, le webmaster répond rapidement aux questions et reste disponible pour approfondir certaines fonctions.
    Encore bravo et bonne continuation.

    RépondreSupprimer
  48. Bonjour,

    et merci pour cet excellent tuto.
    Je souhaiterais que les données affichées dans les colonnes 6;18;19 et 30 de mon fichier le soient au format nombre et celles affichées dans les colonnes 35;36 et 37 le soient au format monétaire.

    Pouvez vous m'indiquer comment procéder?

    Encore merci

    RépondreSupprimer
    Réponses
    1. Bonsoir et bienvenue sur ce blog.
      Si les données sont issue du formulaire, exemple pour une TextBox1 liée à la cellule A1
      1) Format Nombre
      Range("A1") = TextBox1.Value

      2) Format Monétaire
      Range("A1") = TextBox1.Value
      Range("A1").NumberFormat = "#,##0.00 €"

      Attention les données de la Textbox1 doivent être au format numérique c'est-à-dire un point au lieu de la virgule pour la séparation des décimales.
      Solution forcer la saisie numerique de la TextBox1
      Code :
      Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
      If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
      MsgBox "Caractère non autorisé"
      KeyAscii = 0
      End If
      End Sub

      Bonne soirée

      Supprimer
    2. Bonjour et merci pour la rapidité avec laquelle vous avez répondu.
      Puis-je me permettre une petite question subsidiaire?
      A quel endroit, dans la programmation du formulaire, dois-je insérer ce code?
      Encore merci

      Supprimer
    3. Finalement, j'ai trouvé la solution à mon probléme.

      Je vous remercie encore une fois.

      Supprimer
  49. Bonjour,
    Déjà merci pour ce tuto. mais j'ai un problème dans ma formule.
    J'ai sa comme formule :
    Private Sub UserForm_Initialize()
    Dim J As Long

    Set Ws = Sheets("Mouvements")

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

    End Sub

    et sa bloque au niveau du AddItem auriez-vous une solution pour moi svp?

    RépondreSupprimer
  50. Bonjour,

    Attention ne pas confondre ListBox et Combobox. Le programme développé est défini pour une Combobox.
    Définition :
    1) Combobox = Un contrôle ComboBox (Zone de liste modifiable) permet de créer une liste de choix dans un menu déroulant.
    2) ListBox = Le contrôle ListBox (Zone de liste) permet de choisir un ou plusieurs éléments dans une liste de choix.

    Donc insérer une Combobox et insérer le code suivant :
    Private Sub UserForm_Initialize()
    Dim J As Long
    Set Ws = Sheets("Mouvements")
    With Me.ComboBox1
    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("A" & J)
    Next J
    End With
    End Sub






    RépondreSupprimer
  51. Super tuto!
    Toutes mes félicitations et un grand merci!

    RépondreSupprimer
  52. Bonjour,
    En lisant avec intérêt votre blog, j'apprends à réaliser un USF.
    Bien qu'avec 60 lignes de ce genre
    "TextBox17.Value = Sheets("tableau").Range("e3").Value" je recopie effectivement mes valeurs mais je n'arrive pas à mettre du code plus élégant ( boucle ...).
    Pouvez vous m'indiquer comment procéder ?
    Cordialement

    RépondreSupprimer
    Réponses
    1. Exemple de Code à associer à un bouton

      Private Sub CommandButton1_Click()
      Dim Ligne As Long
      Dim I As Integer
      Set Ws = Sheets("NOM DE LA FEUILLE") 'Nom de la feuille
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'ON sort si pas de sélection
      Ligne = Me.ComboBox1.ListIndex + 2 'définiton de la ligne par rapport au choix de la combobox

      For I = 3 To 6 'La boucle For est répétée ici 3 fois.
      If Me.Controls("TextBox" & I).Visible = True Then
      Ws.Cells(Ligne, I) = Me.Controls("TextBox" & I)
      End If
      Next I
      End Sub

      Supprimer
  53. Bonjour, pouvez-vous réhéberger l'exemple de formulaire s'il vous plait ? Le lien présent n'a plus l'air valide.

    Merci.

    RépondreSupprimer
  54. Bonjour Emile,Je suis très heureux d'avoir découvert votre tuto, qui est très clair. Ignorant enVBA, j'ai recréé un fichier à partir de votre exemple, pour me familiariser et apprendre, en vue de l'utiliser dans une base généalogique.
    Fonctionnent bien : SUPPRIMER, MODIFIER, QUITTER
    ProblèmeS avec INSERER:
    1. Si clic sur liste déroulante/tape DU(pour DUVAL) il affiche les données de DURAND/le formulaire n'est donc pas vide/siOK= DUVAL + les données de DUrant.
    2. Si sur liste Dér/ Nom commençant par une lettre différente des noms de la liste/ça marche
    3.Si clic sur NOUVEAU CONTACT, en premier/la demande de confirmation/si OUI, insertion d'une ligne vide en fin de liste/si NON, rien
    4.Si je sélectionne un NOM existant/clic Nouveau contact/=une autre entrée avec ce même nom et ses données.
    J'ai repris tout de Zéro à maintes et maintes reprises, constat je ne vois (et sais) pas rectifier l'erreur.
    Pouvez-vous m'aider et me conseiller?
    Un grand merci d'avance.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Dès lors que l'on tape DU(pour DUVAL) le premier nom a apparaître est Durand et c'est normal car ces un accès rapide aux données. Donc il faut ensuite sélectionner le bouton de navigation (ou scroll) pour sélectionner tous les noms commençant par DU qui commenceront par Durand jusqu'à Duval.

      Par contre pour le reste, je n'ai pas connaissance de votre programmation et si votre fichier et formulaire est complexe, je ne peux pas vous répondre sans fichier.
      Vous pouvez me faire parvenir votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com.
      Deux lignes me suffisent : En-tête de Colonne et une ligne renseignée.

      Emile

      Supprimer
    2. La réponse est au-delà de mes espérances. L'erreur réparée et les apports esthétiques et commodes sont un enchantement, même si j'ai encore des hésitations quant aux chemins à prendre. Merci pour tout ce travail et pour l'enrichissement intellectuel que vous procurez à vos correspondants.
      Bon 15 août Emile.

      Supprimer
  55. Bonjour super explication
    dans mon formulaire je n'ai que une liste déroulante et 3 champs de saisie le problème viens de cette partie

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

    où ça ce transforme en boucle infinie mais je ne comprend pas ce qui est fait ici pouvez vous m'expliquer
    merci

    RépondreSupprimer
    Réponses
    1. With...End With, instruction (Visual Basic) => Exécute une série d'instructions qui font référence à plusieurs reprises à un objet ou une structure unique afin que ces instructions puissent utiliser une syntaxe simplifiée : Pour notre cas la Combobox1
      For...Next, instruction => Répète un groupe d'instructions un nombre spécifié de fois.
      Utilise la variable J et la définie comme commençant à la deuxième ligne de la colonne A de la variable WS (soit la feuille) jusqu'à la dernière ligne du fichier (End(xlUp)
      Donc l'AddItem (les données de la liste déroulante) est défini comme tel :
      WS (feuille).Range("A" &J) (de la cellule A2 à l'infinie)
      Donc toutes les données de la cellule A2:A sont listées dans la liste déroulante.
      En espérant avoir été assez explicite

      Supprimer
  56. Bonjour,

    tout d'abord merci pour ce tutoriel très complet qui va me permettre de proposer un outil de gestion bien pratique à mon équipe, cependant je bloque sur la première étape de programmation, j'ai bien la liste des noms dans la combobox (ce qui n'a pas été facile car mon tableau n'est pas au début de la feuille et j'avais des éléments au dessus qui faussaient la recherche, je les ai donc déplacé), mais lorsque je sélectionne un nom, rien ne s'affiche et lorsque je le rentre directement le nom s'affiche aussi dans la première textbox (sans doute parce que mon tableau commence en deuxième colonne).

    pour info j'ai 22 colonnes dans le tableau, de B14 à W313 (j'ai prévu large) et voici mon code :

    Option Explicit
    Dim Ws As Worksheet

    Private Sub CommandButton1_Click()
    Unload Me
    End Sub


    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    Set Ws = Sheets("Ass Mat")

    With Me.ComboBox1
    For J = 14 To Ws.Range("B" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("B" & J)
    Next J
    End With

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

    Private Sub CommandButton2_Click()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    For I = 1 To 21
    If Me.Controls("TextBox" & I).Visible = True Then
    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
    End If
    Next I
    End If

    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
    For I = 1 To 21
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
    Next I
    End Sub

    je pourrai également essayer de remettre le tableau en haut de la feuille mais avec la masse de formules qu'il y a j'ai pas envie de tout vérifier derrière, et j'avais fais un système de recherche au dessus avec RECHERCHEV que je souhaiterai remettre après avoir trouvé la solution car certaines données du tableau sont des statistiques relevées par formule sur d'autres feuilles du classeur et qu'il ne faut pas modifier, c'est pourquoi je ne souhaitais pas que ces informations apparaissent dans le formulaire VBA. Si vous avez une solution je m'engage à m'inscrire (ce que je comptais faire dans tous les cas mais faut pas le dire), si je passe cette difficulté j'aurai sûrement un autre problème à vous soumettre ultérieurement, dans tous les cas un grand merci pour ce tuto.

    PS : peut-être pourriez-vous rajouter des commentaires dans le code pour expliquer à quel moment on adresse le tableau/la première cellule du tableau?

    RépondreSupprimer
    Réponses
    1. L'erreur vient tout simplement de là :
      Ligne = Me.ComboBox1.ListIndex + 2 => lire + 14 au lieu de 2

      Pour info Ws.Cells(Ligne, I + 1) correspond à :
      WS => Feuille définie dans la variable Set Ws = Sheets("Ass Mat")
      Cells => Cellule
      Ligne => définie dans la variable Ligne = Me.ComboBox1.ListIndex + 14 (soit 14ème ligne)
      I => For...Next, instruction => Répète un groupe d'instructions un nombre spécifié de fois dans notre cas 21 fois à partir de la 1ère.
      Donc I + 1 correspond à 2
      Résultat => Egale à la cellule B14 pour la première cellule et ainsi de suite pour la boucle jusqu'à 21 (C14, D14, E14 etc....)

      Supprimer
    2. SU-PER! Merci beaucoup pour les explications, j'ai vraiment pas l'habitude de ce genre de syntaxe et ça m'a bien aidé à saisir sa logique, j'avais encore un problème, le nom s'affichait dans ma première textbox en plus de la combobox, ce qui décalait tout le reste, en tâtonnant un peu j'ai trouvé la solution :

      Private Sub ComboBox1_Change()
      Dim Ligne As Long
      Dim I As Integer
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 14
      For I = 1 To 21
      Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2) 'à la place de I+1
      Next I
      End Sub

      Je commence à prendre goût au VBA, et ce n'est qu'un début! Grâce à vous je vais pouvoir fournir à mon équipe un outil très complet, alors encore un grand merci, je m'inscrirai sans doute dimanche, donc à bientôt et bon week-end!

      Supprimer
    3. Bon faute d'internet je n'ai pas pu m'inscrire ce week-end mais ce n'est que partie remise! J'ai cherché un peu mais sans succès ; quand on commence à taper un nom dans la combobox, les textbox se remplissent, mais si ce nom correspond à une nouvelle entrée il faut effacer le contenu des textbox pour entrer de nouvelles données, encore trop novice, je ne sais pas quelle condition mettre à la combobox pour qu'elle vide les textbox lorsque le nom ne correspond plus à aucun des noms de la liste index, pourriez-vous m'aider s'il vous plaît?

      Supprimer
  57. Bonjour
    aide svp
    j'ai suivi les etapes et j'ai fait le meme formulaire lors de l'execution cette erreur s'affiche :

    erreur d'execution : ' -1247024809(80070057)
    Objet spécifié introuvable

    :( :(

    RépondreSupprimer
    Réponses
    1. Bonjour
      Difficile de vous réponse sans fichier.
      Inscrivez vous et envoyez moi votre fichier à l'adresse suivante : blog.cellulexcel@gmail.com

      Supprimer
  58. j'ai procédé comme indiqué dans le cours. j'ai même modifié l'userform pour avoir plus de rubrique selon la forme d'activité. mais le hic est que je ne me connais pas en création de programme ni en macro-commandes. cependant j'ai urgemment besoin de cette application. merci de m'aider

    RépondreSupprimer
  59. Bonjour et merci pour le tuto,

    Je cherche à faire en sorte que la liste déroulant commence à la ligne 7 de ma feuille, je ne trouve pas, merci de votre aide

    Cordialement, Jacques

    RépondreSupprimer
  60. Bonjour Jacques,

    Code à modifier dans Initialize => remplacer 2 par 7 ce qui correspond à la ligne 7 de la colonne A

    With Me.ComboBox1
    For J = 7 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("A" & J)
    Next J
    End With

    RépondreSupprimer
  61. Bonjour,

    Tout d'abord, je vous remercie pour ce formulaire qui correspond globalement à ce que je recherchais. Je rencontre néanmoins un petit problème, j'aimerais que les données de certaines colonnes ne soient pas prises en compte. Par exemple, sur les colonnes U à Z, je souhaiterais uniquement récupérer le contenu présent dans les colonnes U, W et Y. Sauf erreur de ma part, avec le code de base, ce n'est pas possible puisqu'à chaque insertion d'une Textbox, cette dernière récupère automatiquement le contenu de la cellule suivante...

    En vous remerciant par avance pour votre aide.

    Cordialement,

    Thomas

    RépondreSupprimer
  62. Bonjour Thomas,

    On peut contouner le problème ce qui n'aura pas d'incidence dans la programmation.

    Dans Initialize, vous pouvez rendre invisible un objet.
    Exemple => rendre la textBox4 invisible
    TextBox4.visible = False
    pour la rendre visible remplacer False par True

    Par contre vous devez supprimer les lignes suivantes dans Initialize.
    For I = 1 To 8 'on lance une boucle de valeur mini 1 et maxi 8
    Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
    Next I
    End Sub

    RépondreSupprimer
  63. Bonjour,

    Super ça marche, merci beaucoup ! En fait je n'avais pas remarqué mais on peut faire la modification directement dans les propriétés de la TextBox.

    J'aurais quelques autres petites questions :

    1/ J'ai des lignes vides dans mon tableau qui seront remplies tôt ou tard mais j'aimerais qu'elle ne soit pas prises en compte dans la liste déroulante de la ComboBox, est-ce possible ?

    2/ Dans cette même liste déroulante, j'ai remarqué que le défilement avec la molette de la souris n'était pas pris en charge par défaut, comment peut-on l'activer ?

    3/ J'ai modifié la colonne à prendre en compte pour la recherche (K au lieu de A) mais j'ai des infos dans la colonne F que j'aimerais voir apparaître dans une Textbox. Malheureusement je ne peux pas déplacer cette colonne pour la mettre après la "K" car visuellement ça ne paraîtrait pas très logique (j'envoie le fichier au client régulièrement). Auriez-vous une solution ?

    Désolé pour toutes ces questions et merci par avance pour votre aide !

    Cordialement,

    Thomas

    RépondreSupprimer
  64. Réponse à la question 1

    Supprimez les lignes suivantes :
    With Me.ComboBox1
    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("A" & J)
    Next J
    End With


    par :

    With Ws
    For Each c In Ws.Range("A2:A" & .Range("a65000").End(xlUp).Row)
    If c <> "" Then
    Me.ComboBox1.AddItem c
    End If
    Next c
    End With


    Réponse à la question 2 :
    Malheureusement non ! cela n'existe pas mais il y a des programmations.... mais pour ma part un peu compliqué.
    Par contre on peut augmenter le nombre de lignes dans une Combobox via ses propriétés dans ListRows .... changer le chiffre qui doit être par défaut 8 par un autre chiffre.
    En tapant un lettre puis une autre dans cette Combobox la liste déroulante s'alimente en fonction de la liste des mots présents dans cette Combobox

    Réponse à la question 3 :
    Sans fichier je ne peux y répondre.... merci de me le faire parvenir à mon adresse mail mentionnée dans ce blog.

    RépondreSupprimer
  65. Bonjour,

    Merci pour cette réponse rapide. Concernant ma 1ère question, j'ai remplacé les lignes mais maintenant j'ai un message d'erreur : "Erreur de compilation : Variable non définie" et le "c" après For Each est surligné.

    Cordialement,

    Thomas

    RépondreSupprimer
  66. Bonjour,

    Je n'ai pas trouvé ou télécharger le fichier exemple.

    Cordialement

    RépondreSupprimer
  67. Il est disponible tout en bas avant les commentaires...
    Cliquez sur la phrase Exemple du fichier avec FORMULAIRE
    cdt

    RépondreSupprimer
  68. Bonjour,

    Tout d'abord merci pour toutes ces explications, ça enlève une sacrée épine du pied.
    Malheureusement, après avoir tout fait, rajouté ou enlevé quelques lignes pour correspondre à ce que je veux faire, ça ne marche pas =( . En fait, tout fonctionne sauf quand je veux valider en cliquant sur "nouveau contact" qui est chez moi le CommandButton1 (Ca bloque au niveau de Private Sub CommandButton1_Click()).

    Voici mon code:

    Option Explicit
    Dim Ws As Worksheet


    Private Sub CommandButton3_Click()
    Unload Me
    End Sub

    Private Sub UserForm2_Initialize()
    Dim J As Long
    Dim I As Integer
    Set Ws = Sheets("Données_cérémonies")
    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 UserForm_Initialize()
    ComboBox1.AddItem "Humour"
    ComboBox1.AddItem "Solennel"
    ComboBox1.AddItem "Romantique"
    ComboBox4.AddItem "Oui"
    ComboBox4.AddItem "Non"
    ComboBox3.AddItem "Oui"
    ComboBox3.AddItem "Non"
    ComboBox2.AddItem "Jamais rencontré"
    ComboBox2.AddItem "Déjà rencontré 1 fois"
    ComboBox2.AddItem "Rencontré plusieurs fois"
    ComboBox7.AddItem "Oui"
    ComboBox7.AddItem "Non"
    ComboBox6.AddItem "Oui"
    ComboBox6.AddItem "Non"
    ComboBox5.AddItem "Oui"
    ComboBox5.AddItem "Non"
    End Sub

    Private Sub UserForm_Click()

    End Sub

    Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau client ?", vbYesNo, "Demande de confirmation") = vbYes Then
    L = Sheets("Données_cérémonies").Range("a65536").End(xlUp).Row + 1
    Range("A" & L).Value = TextBox1
    Range("B" & L).Value = ComboBox1
    Range("C" & L).Value = ComboBox4
    Range("D" & L).Value = ComboBox3
    Range("E" & L).Value = ComboBox2

    Range("F" & L).Do
    If TextBox3 <> "" Then Value = TextBox3
    If TextBox3 = "" Then Value = ComboBox7
    End If

    Range("G" & L).Do
    If TextBox4 <> "" Then Value = TextBox4
    If TextBox4 = "" Then Value = ComboBox6
    End If

    Range("H" & L).Do
    If TextBox5 <> "" Then Value = TextBox5
    If TextBox5 = "" Then Value = ComboBox5
    End If

    With Ws.Range("D2:d10")
    .NumberFormat = "0"
    .Value = .Value
    End With
    MsgBox ("Client inséré dans la base de données")
    Unload Me
    UserForm2.Show
    End Sub

    J'ai beau cherché, je ne trouve pas !

    RépondreSupprimer
    Réponses
    1. Bonsoir Guillaume

      Houla ! je vois beaucoup d'erreur de programmation, juste pour la 1ère erreur :
      => deux programme userform_initialize dont une incohérente celle Userform2 ????
      => au niveau de CommandButton1_click, je ne peux pas donner de réponse en l'absence de fichier.
      Peux-tu me faire parvenir ton fichier à mon adresse mail blog.cellulexcel@gmail.com
      J'ajouterai des commentaires supplémentaires à ce message pour que l'ensemble des gens connectés puissent comprendre ta requête
      Amicalement
      Emile

      Supprimer
  69. Dans mon formulaire, j'ai inséré un TextBox8 = Now. Ca fonctionne bien pour moi mais le problème est que ce fichier est partagé et le format numérique est différent pour chaque utilisateur. Est-ce que je peux créer une formule pour que le format soit standard?

    Merci.

    Sylvie

    RépondreSupprimer
    Réponses
    1. Bonjour Sylvie
      Voici la solution :

      Dim VALEUR_DATE As Date

      'Now renvoie la date et l'heure en cours (07.02.2012 09:09:02)
      VALEUR_DATE = Now()
      TextBox8 = Format(VALEUR_DATE, "dd.mm.yy hh:mm")

      Supprimer
  70. Je vous remercie pour ce super tuto pédagogique, je suis débutant en VBA,mais j'arrive à mettre en application votre Formulaire.Encore Merci et bonne continuation!

    RépondreSupprimer
  71. Bonjour,

    Merci beaucoup pour ce tuto et votre temps.

    Je souhaiterai que ma liste déroulante ne pointe pas la colonne A mais la colonne C, pouvez-vous me dire ou faire les modifs.
    Et j'aimerai bien des boutons "suivant", "précédent"; Pouvez-vous m'aider ?

    Merci à vous,
    Jean-Roch

    RépondreSupprimer
    Réponses
    1. Oui faites-moi parvenir votre fichier à l'adresse mail indiquée sur cette page.

      Supprimer
  72. Mr, j'ai suivi rigoureusement les étapes de votre formulaire, malheureusement mon combobox n'affiche pas la liste déroulante. je vous envoie mon fichier
    pour l'examiner et voir si pouvez faire qque chose, à noter que je travaille sous Excel 2010. Merci Bcps...

    RépondreSupprimer
    Réponses
    1. Ah ! Toujours pas de fichier ? et Excel 2010 n'est pas un problème.

      Supprimer
  73. Bonjour,je vous ai envoyé mon fichier à l'adresse suivante: blog.cellulexcel@gmail.com

    RépondreSupprimer
  74. Bonjour,
    Je commence déjà a vous féliciter pour ce tuto très explicite.
    J ai le même soucis que Aarachi Abderrahim a savoir que dans la liste déroulante aucune données n’apparaît
    Si vous avez une idée je suis preneur
    Merci d'avance

    RépondreSupprimer
    Réponses
    1. N'hésitez pas à m'envoyer votre fichier sur mon adresse mail.

      Supprimer
  75. bonjour ou je peux telecharger la solutuion

    RépondreSupprimer
    Réponses
    1. Bonjour,

      En m'envoyant un mail via à mon adresse mail... via l'onglet de contact

      Supprimer
  76. bonjour, quelqu'un peut-il m'aider à savoir comment créer un fichier excel me permettant de gérer un stock juste de deux produits.
    donc faire les entrées et sorties.
    merci
    M3

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Il y a sur ce blog une page concernant la construction d'un fichier stock.
      Vous pouvez m'envoyer votre fichier pour que je vous guide pour sa consctruction qui sera basé sur cette construction.
      A vous relire

      Supprimer
  77. Bonjour,

    Comment peut on initialiser la combobox une fois une ligne supprimée pour que son choix n'apparaisse plus dans la liste ?

    Merci

    RépondreSupprimer
    Réponses
    1. Changer le code d'alimentation de la Combobox dans le programme initialize et remplacer le par le code suivant (en changeant les données)
      Private Sub UserForm_Initialize()
      Dim i As Integer
      For i = 1 To Sheets("Nom de la feuille source").Range("A65536").End(xlUp).Row
      ComboBox1 = Sheets("Nom de la feuille source").Range("A" & i)
      If ComboBox1.ListIndex = - 1 Then ComboBox1.AddItem Sheets("Nom de la feuille source").Range("A" & i)
      Next i
      End Sub

      Supprimer
  78. comment ajouter une formulaire excel au blog merci

    RépondreSupprimer
    Réponses
    1. ??? je ne comprend pas votre demande... envoyez moi un mail via onglet contact dans le présent blog.
      Au plaisir de vous relire.

      Supprimer
  79. Bonsoir,
    Merci pour ce tuto très clair. J'ai détecté une erreur que je n'arrive pas à corriger. Lorsqu'on clique sur nouveau contact et qu'ensuite on clique sur non lors de la demande de confirmation, un message indique que le contact a été ajouté. J'ai repris pas à pas votre exemple et tout le reste fonctionne comme vous le décrivez
    Merci de votre aide

    RépondreSupprimer
    Réponses
    1. Bonjour

      Modifie le code de la manière suivante...


      If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
      L = Sheets("FICHIER ADRESSES").Range("a65536").End(xlUp).Row + 1
      Range("A" & L).Value = ComboBox1 ......
      ....MsgBox ("Produit inséré dans fichier sélectionné")
      Unload Me
      UserForm1.Show

      Else
      Unload Me
      UserForm1.Show

      End If

      Supprimer
  80. Bonjour,

    Je veux créer un service de location, pour m'aider à cela, j'ai créer un document excel avec la liste de mes outils, les informations clients, et un calendrier pour visualisé les location en cours et à venir.
    J'ai déjà créer mon Formulaire, j'ai programmer mes touches de contrôle "Valider", et "Annuler".
    Mes zones de textes se remplisse dans ma feuille "Infos", mais je n'arrive pas à programmer deux éléments.
    Le premier correspond à ma ComboBox1 qui doit afficher la liste de mes outils disponible dans la Feuille "Outils".
    et la seconde chose que je souhaite faire, et de pouvoir sélectionner une date de sortie et une date de retour. Et qu'une fois le formulaire valider, mon calendrier dans la feuille "Planning" se mette à jours en grisant par exemple les cases correspondant aux dates de location, et de l'outil.
    Je ne trouve pas de cellule permettant de sélectionner une date.

    Pouvez-vous m'aider ?

    RépondreSupprimer
    Réponses
    1. Faites-moi parvenir votre fichier => Mail contact dans onglet contact.

      Supprimer
  81. Bonjour un grand merci pour votre tuto qui permet de bien démarrer dans la création d'un formulaire personnalisé .
    j'ai réalisé un userform qui me permet de consulter completer modifier une feuille onglet excel . je souhaiterai à partir de ce même onglet réaliser un second userform qui n'affiche en pouvant consulter modifier ajouter que certaines collones de onglet excel
    exemple userform 1 affiche nom prénom adresse nom du prof de l'éduc et un second userform qui affiche nom prénom et ensuite par exemple d'autres caractéristiques situé plus long par éxemple colonne IJKL
    comment crérer ce second userforme
    en vous remerciant d'avance pour vos conseils

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Merci pour vos commentaires sur le tuto.
      Pas la peine de créer un autre Userform.... Simplement créer un bouton d'accès sur une feuille qui ouvrira le même formulaire avec des données cachées (Tel que les Labels, TextBox etc.)
      Voici un exemple de code associé à un bouton
      Private Sub CommandButton1_Click()
      UserForm1.TextBox1.Visible = False
      UserForm1.Show
      End Sub

      Si vous n'y parvenez pas, vous pouvez m'écrire via l'onglet contact en me joignant votre fichier

      Supprimer
  82. Bonjour Emilie
    Quel excellent Tuto qui m'a permis enfin de créer un formulaire.
    Petites question : je voudrais créer un bouton "suivant/précédent" car il se peut que dans mon fichier de base j'ai le même nom mais à des adresses différentes.
    Est-il possible d'avoir une feuille de saisie du formulaire vide car dès que j'inscris une lettre, ça me donne les infos d'un client existant.
    D'avance je vous remercie de votre réponse pour paufiner ma macro qui, au demeurant, fonctionne très bien grâce à vous.
    Cdt

    RépondreSupprimer
  83. Merci beaucoup pour le tuto.
    Avec un peu de réflexion,il est très facile de modifier le formulaire grâce aux annotations.

    RépondreSupprimer
  84. Si tu as des questions supp... N'hésites pas car ne je n'ai pas toutes les interrogations pertinentes. Cela me permettra de les développer sur ce blog. Encore Merci

    RépondreSupprimer
  85. Je viens de découvrir votre tuto on ne peut être plus clair merci
    nous
    chilou

    RépondreSupprimer
  86. Merci Emile
    pouvous-vous nous mettre aussi ce fichier en telechargement ?
    ça nous aidera ...
    ben je sais que je demande un service de plus de ce que tu fais déjà,
    encore Merci

    RépondreSupprimer
  87. Bonjour,

    Je suis arrivé à la dernière étape de la partie programmation. Cet article est rudement bien fait pour que je sois arrivé jusque là ! Et ce n'est pas le premier site que je visite...
    J'ai un problème lié au fait que le VBA est pour moi aussi facile à comprendre et à utiliser que l'araméen dialectal !

    Où doit-on insérer le texte suivant :
    "Sub FORMULAIRE() 'ou le nom que vous avez défini pour la macro
    UserForm1.Show vbModeless '(*)
    End Sub"

    Merci pour votre réponse.
    Cordialement.

    PS : vu mon degré de nullité j'ai préféré choisir "anonyme"...

    RépondreSupprimer
    Réponses
    1. Bonjour "Anonyme"
      D'une part il ne faut pas avoir peur de son degré de nullité, on est tous passé par là avec plus ou moins de difficultés tel est mon cas.
      Donc pour réponse à ta question :
      Dans l'environnement Visual Basic, au niveau de la barre de tache sélectionnes Insertion puis cliques sur Module.
      Insère les ligne de programmation :
      Sub FORMULAIRE()
      Userform1.show vbmodeless
      End sub.

      Supprimer
  88. Merci pour cette réponse rapide.
    Le message d’erreur apparaît :
    « Erreur d'exécution "9" :
    L'indice n'appartient pas à la sélection. »
    Quand je lance le débogage, le logiciel choisit de surligner cette ligne dans le petit programme que je viens d’insérer :« UserForm1.Show vbModeless ».
    Que faire ?
    Merci.

    RépondreSupprimer
    Réponses
    1. L'erreur n'est pas du fait du lancement de la macro pour l'ouverture du Formulaire.
      C'est le formulaire en lui-même qui provoque l'erreur.
      Dans le programme VBA sélectionnez votre formulaire et cliquez sur F5. L'erreur devrait se reproduire.
      Si c'est le cas, c'est qu'il ya une erreur lié à la programmation et aux objets intégrés dans votre formulaire.

      Si vous ne parvenez pas à le résoudre, vous pouvez me contacter et me faire parvenir votre fichier via l'onglet CONTACT
      A vous relire

      Supprimer
  89. Bonjour j'ai un problème avec mon programme, je ne vois pas d'ou vient l’erreur

    Quand j’exécute mon programme il s’affiche "ERREUR D’EXÉCUTION '-2147024809 (80070057) Objet introuvable"

    voici mon programme

    ' Les lignes qui débutent par une apostrophe identifient un commentaire c'est-à-dire du texte exploitable par le lecteur et non par le programme VBA
    ' Objectif : documenter le code VBA pour le rendre plus compréhensible.


    'Attention les deux lignes suivantes doivent être impérativement placées en tout début de programme
    Option Explicit 'Activation de la déclaration explicite des variables
    Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm


    'Correspond au programme du bouton QUITTER
    Private Sub QUITTER_Click()
    Unload Me
    'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
    ' Me => Référence à l'objet en cours
    End Sub

    'Correspond au programme du FORULAIRE
    'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
    Private Sub UserForm_Initialize() 'à l'initialisation de l'userform
    ' Déclaration des variables grâce à Dim
    ' 1° Choisir un nom
    ' 2° Choisir un TYPE (= définir la nature du contenu)
    ' --------------------------------------------------------
    Dim J As Long 'déclare la variable J
    Dim I As Integer



    ' Affecter une valeur à une variable (= fixer la valeur de la variable)
    Set Ws = Sheets("Feuil1") 'Attention ce nom doit correspondre au nom de votre ONGLET
    'On stock le nom de la feuille "FICHIER ADRESSES" dans une variable nommée WS

    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 'on lance une boucle de valeur mini 1 et maxi 8
    Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
    Next I
    End Sub

    'Correspond au programme du bouton MODIFIER
    Private Sub MODIFIER_Click()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
    Ligne = Me.ComboBox1.ListIndex + 2
    For I = 1 To 8
    If Me.Controls("TextBox" & I).Visible = True Then
    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
    End If
    Next I
    End If 'fin de la condition

    'Code permettant de modifier le format de la plage de cellule en format nombre
    With Ws.Range("D2:d10")
    .NumberFormat = "0"
    .Value = .Value
    End With
    End Sub

    'Correspond au programme de la LISTE DEROULANTE
    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
    For I = 1 To 8
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
    Next I
    End Sub




    Merci

    RépondreSupprimer
  90. Bonjour,
    tout d'abord, un grand MERCI. C'est vraiment du beau travail.

    J'ai copié et adapté à mon fichier:

    Private Sub CommandButton2_Click()
    Dim L As Integer

    L = Sheets("Base client").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE

    Range("A" & L).Value = TextBox1
    'Insère la donnée de la textbox1 dans la colonne B
    'et à suivre....
    Range("B" & L).Value = TextBox2
    Range("C" & L).Value = TextBox3
    Range("D" & L).Value = TextBox4
    Range("E" & L).Value = TextBox5
    Range("F" & L).Value = TextBox6
    Range("G" & L).Value = TextBox7
    Range("H" & L).Value = TextBox8
    Range("I" & L).Value = TextBox9
    Range("J" & L).Value = TextBox10
    Range("K" & L).Value = TextBox11


    ' Affiche une boîte de message
    MsgBox ("Client inséré dans fichier Base client") 'Vous informant que le présent contact est insérer dans votre tableau Excel.

    Unload Me ' Vide et ferme l'Userform ( formulaire)
    UserForm2.Show 'Affiche le  formulaire

    End Sub

    Le seul problème c'est que j'éxécute ma boite de dialogue de l'onglet vente jour
    et cela me range toutes mes textbox dans cette onglet, alors qu'en début de macro il y a bien sheets Base client.

    Je n'arrive pas à résoudre ce problème.

    Cdt,
    Cris

    RépondreSupprimer
    Réponses
    1. Bonsoir Cris

      Dans le module qui te sert à ouvrir le formulaire ajoutes la ligne suivante
      Sheets("Base client").Activate
      A l'ouverture du formulaire le feuillet "Base clients" sera activé.

      Si tu n'as pas de macro pour ouvrir ton formulaire créez celui-ci du style
      Sub AFFICHER()
      Sheets("Base clients").Activate
      UserForm1.Show vbModeless
      End Sub

      Supprimer
  91. Bonjour à tous, le code "Modifier une fiche" prend 20 secondes pour modifier une ligne de 53 colonnes! Après bien des essais, j'en suis venu à me demander s'il ne prend pas TOUTES les lignes?? Après avoir consulté bien des forums, j'en suis venu à me demander si on ne pourrait pas modifier le code, en incluant toutes les textbox dans une plage et en collant la plage sur une cible destination ?? Je place si après le code avec les commentaires inclus. Je ne sais pas si c'est possible, si ce sera plus rapide et HELAS, je ne saurais pas l'écrire. Qu'en penses-tu?
    'Correspond au programme du bouton MODIFIER une FICHE
    Private Sub CommandButton2_Click()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
    Ligne = Me.ComboBox1.ListIndex + 2

    'Pour m à j les 53 col, il faut 20 secondes pour la modif, même pour une seule TB.
    ' J'ai l'impression que la macro parcourt toutes les lignes??
    ' ?? ne pourrait-on faire :
    ' au lieu de for to next,
    ' dim fichmodif as ???
    'If Me.Controls("TextBox" & I).Visible = True Then
    ' ?? set fichmodif = ((( de Me.Controls("TextBox" & 1) à Me.Controls("TextBox" & 53))))
    ' ?? fichmodif.copy
    ' ?? cible = Ws.Cells(Ligne, I + 1).past(xxxx dont formules)
    ' ou une autre manière pour aller plus vite
    For I = 1 To 53
    If Me.Controls("TextBox" & I).Visible = True Then
    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I).Value
    End If
    Next I
    End If 'fin de la condition
    MsgBox ("FICHE MODIFIEE")
    End Sub

    RépondreSupprimer
    Réponses
    1. Bonjour à tous,
      La réponse à ma question précédente était ultra simple : il faut désactiver le calcul automatique! On a alors une vitesse acceptable.
      Eléments utiles recueillis sur un blog :
      Le mode de calcul d'Excel appartient à l'objet Application. Cependant l'ordre de calcul peut être réduit à tout ou partie des feuilles.

      Application.Calculation = xlCalculationManual
      Peut prendre une des valeurs Le mode de calcul semi-automatique ne calcule pas les tables de données. Il peut être nécessaire de bloquer le calcul lorsqu'on travaille sur des cellules dépendantes pour éviter un recalcul à chaque opération.
      xlCalculationAutomatic
      xlCalculationManual
      xlCalculationSemiautomatic

      Supprimer
    2. Pensez à le remettre à automatique juste avant la fin de la macro :
      Application.Calculation = xlCalculationAutomatic

      Et il est conseillé, pour des vitesse d'éxécution, de désactiver le rafraîchissement de l'écran avec la macro, et réactiver après

      Application.ScreenUpdating = False
      ' ..........proramme de la macro....
      Application.ScreenUpdating = True

      Supprimer
  92. Merci infiniment bien que je suis nul vraiment vous avez bien expliqué si il y'a une lacune c'est a notre niveau

    RépondreSupprimer
  93. BONJOR COMMENT PROGRAMMER 2 BOUTON UN POUR AVANCER DEANS LES FICHE DE L USERFORM ET L ATRE POUR RECULER
    MERCI POUR VOTRE REPONSE

    RépondreSupprimer
    Réponses
    1. Bonjour Philippe
      Tout simple :
      1) Créez deux bouton (CommandButton) que nous nommez "LIGNE SUIVANTE" et "LIGNE PRECEDENTE" et affectez leur le code suivantn

      Pour le bouton LIGNE SUIVANTE :
      Private Sub CommandButton8_Click()'N° de bouton de votre choix
      Dim ligne As Long
      ligne = Me.ComboBox1.ListIndex + 2
      ComboBox1 = Range("A" & ligne + 1)
      End Sub

      Pour le Bouton LIGNE PRECEDENTE :
      Private Sub CommandButton9_Click()
      Dim ligne As Long
      ligne = Me.ComboBox1.ListIndex + 2
      ComboBox1 = Range("A" & ligne - 1)
      End Sub

      Supprimer
  94. Bonjour Emile

    Merci pour le travail !!

    j'aimerais insérer dans "caption" un symbole monétaire en l'occurrence le Naira ₦, j'ai cherché mais rien trouvé

    merci par avance pour votre aide
    Didier

    RépondreSupprimer
    Réponses
    1. Bonjour Didier

      Clic droit sur la cellule, puis Format cellule, puis onglet Nombre, puis dans Catégorie choisir personnalisée.
      Mettre dans le champ "Type" à droite la formule suivante :
      0,00" ₦" pour 2 zéro après la virgule
      # ##0,00" ₦" pour la gestion des milliers avec deux chiffres après la virgule.

      Supprimer
  95. C vraiment magnétique mais j'ai il problème mon tableau Excel à des colonnes avec des valeurs % et dans le formulaire s'affiche en décimale comment résoudre ce problème et merci d'avance.

    RépondreSupprimer
  96. Bonjour
    C vraiment très important et très urgent je veux que tu m'aide pour afficher des pourcentages dans mon userform sachant que dans la feuille Excel les données sont en format pourcentage c vraiment tre urgent et merci d'avance

    RépondreSupprimer
    Réponses
    1. Bonjour
      Je partage mes connaissances mais je ne me mets pas la pression.
      Voici une approche à adapter.
      Pour alimenter la TextBox
      Exemple :
      TextBox1 = Range("A1")
      TextBox1.Value = Format(TextBox1.Value, "0.00%")

      Pour inserer dans la cellule de son choix
      Exemple :
      Range("A1") = TextBox1.Value
      Range("A1").NumberFormat = "0.00, %"

      Pour une réponse plus rapide merci de passer par l'ongle contact et me faire parvenir éventuellement le fichier "source" avec simplement les en-tête de colonne et un ligne partiellement renseigner

      Supprimer
  97. Monsieur Émile je ne sai pas est ce que vous avez reçu mon fichier ou pas c vraiment très important
    Merci



    RépondreSupprimer
  98. Bonjour,
    Je suis en train de réaliser un inventaire de mon service.
    J'ai essayé de suivre ce tuto afin de réaliser un formulaire d'aide à la saisie, mais malheureusement lorsque je sélectionne un nom dans la liste déroulante, ça bug.
    Pouvez-vous m'aider? Je peux envoyer mon fichier si besoin.
    Merci d'avance

    Eric

    RépondreSupprimer
    Réponses
    1. Bonjour
      L'adresse mail est mentionnée dans l'onglet CONTACT

      Supprimer
  99. Bonjour,

    Comment faire pour choisir le lieu d'insertions des données ?
    Là ça s'insert ligne 2.
    Comment faire pour les insérer ligne 15 par exemple ?

    RépondreSupprimer
    Réponses
    1. Bonjour,
      En modifiant la ligne du code c'est-à-dire au lieu de +2
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 15

      Supprimer
  100. Bonjour,

    Voici mon code et j'aimerai que les valeurs de toutes les colonnes (sauf la A) soit des nombres décimaux. Car je dois par la suite faire des calculs avec ces données.

    Private Sub CommandButton3_Click()

    Dim L As Integer

    If MsgBox("Etes-vous certain de vouloir INSERER cette nouvelle recette ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
    L = Sheets("BASE DE DONNEES BIO (2)").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE

    Range("A" & L).Value = ComboBox1 'Insère la donnée de la liste déroulante dans la colonne A
    Range("B" & L).Value = TextBox1.Value 'Insère la donnée de la textbox1 dans la colonne B
    'et à suivre....
    Range("C" & L).Value = TextBox2.Value
    Range("D" & L).Value = TextBox3.Value
    Range("E" & L).Value = TextBox4.Value
    Range("F" & L).Value = TextBox5.Value
    Range("G" & L).Value = TextBox6.Value
    Range("H" & L).Value = TextBox7.Value
    Range("I" & L).Value = TextBox8.Value
    Range("J" & L).Value = TextBox9.Value
    Range("K" & L).Value = TextBox10.Value
    Range("L" & L).Value = TextBox11.Value
    Range("M" & L).Value = TextBox12.Value
    Range("N" & L).Value = TextBox13.Value
    Range("O" & L).Value = TextBox14.Value
    Range("P" & L).Value = TextBox15.Value
    Range("Q" & L).Value = TextBox16.Value
    Range("R" & L).Value = TextBox17.Value
    Range("S" & L).Value = TextBox18.Value
    End If

    ' Affiche une boîte de message
    MsgBox ("Recette insérée dans la Base de données Bio") 'Vous informant que le présent contact est inséré dans votre tableau Excel.

    Unload Me ' Vide et ferme l'Userform ( formulaire)
    UserForm2.Show 'Affiche le formulaire
    End Sub


    J'ai mis .Value à la fin des textbox mais cela n'est pas suffisant car mes cellules sont au format standard.

    Merci d'avance,

    Cordialement,

    RépondreSupprimer
  101. Bonjour,

    Je vous remercie infiniment pour votre tuto bien clair.
    En effet, je suis un nouveau stagiaire, et je dois faire un formulaire automatisé codé en VBA.
    Sauf que je viens de le découvrir.
    Pourriez-vous m'aider à coder SVP ? J'en serrai vraiment reconnaissant .
    Si oui, Veuillez me contacter pour que je puisse vous communiquer l'intitulé du formulaire .
    Merci d'avance pour votre compréhension .

    Bien cordialement,

    RépondreSupprimer
  102. Bonjour, monsieur je me permet de vous soumettre mon fichier je souhaite faire un formulaire pour faire apparaître les données dans mon onglet "Fichier CSE". j'ai tenter de suivre vos explications qui sont on ne peut plus clair, mais je pense que j'ai rajouté trop de variables et je me suis perdu en route . je vous envoie mon fichier excel , en espérant que vous pourrez m'aider.  Merci d’avance de votre réponse. Bien cordialement PS : serait-il possible de faire apparaître dans les listes déroulantes les données de l'onglet "Dossier". Merci

    RépondreSupprimer
  103. Bonjour monsieur
    j'ai reussi finalement à monter mon formulaire mais j'aimerai savoir comment faire pour introduire les valeurs monetaires dans mes cellules svp
    Merci pour votre réponse

    RépondreSupprimer
  104. Bonjour, merci pour ce tuto très instructif, mais j'ai un souci concernant l'affichage des informations dans le textbox, en fait l'info que je voudrais afficher dans les texbox commence à partir de la cellule g10 mais non pas A2, dans ce cas comment modifier les codes SVP

    RépondreSupprimer
  105. Bonjour monsieur Émile, j'ai essayer de reproduire le formulaire de saisie,
    Mais j'ai eu quelques soucis avec le comboBoxe 1, où sa formule ne marche par mais toutes les autres chose sont au point
    Je vois ai envoyer mon fichier source par mail
    Merci de m'apporter des lumiaire

    RépondreSupprimer
    Réponses
    1. Merci, pour tout avec une reprise d'esprit , j'ai repris ligne après ligne pour trouver mon erreur.
      Je recherche à présent, les formules VBA, pour d'un TextBoxe exécute des opérations comme la somme ou le produit ou des conditions si ... Avec d'autres TextBoxe.
      Merci a nouveau

      Supprimer
  106. Bonjour est-il possible SVP, de vous acheter cette appli ? Cordialement.

    RépondreSupprimer
    Réponses
    1. Bonjour, vous pouvez m'envoyer un mail à l'adresse indiquée dans l'onglet contact.

      Supprimer

Pour vous aider à publier votre commentaire, voici la marche à suivre :
1) Ecrivez votre texte dans le formulaire de saisie ci-dessus
2) Si vous avez un compte, vous pouvez vous identifier dans la liste déroulante Commentaire
Sinon, vous pouvez saisir votre nom ou pseudo par Nom/URL
3) Vous pouvez, en cliquant sur le lien S'abonner par e-mail, être assuré d'être avisé en cas d'une réponse
4) Cliquer sur Publier enfin.

Le message sera publié après modération.
Merci