formulaire de saisie, combobox fonctionne pas

jardibot

XLDnaute Junior
Bonjour,

Dans mon formulaire de saisie (il y a 33 textbox, des labels, un combobox, deux frames avec des optionbutton). Je n'ai pas renommé les textbox ni combobox). J'ai un bouton 'Modifier', et "Ajouter contact" et Quitter.


Mon 'combobox1' (le seul que j'ai), ne fonctionne pas.

Pourriez-vous m'aidez à trouver l'erreur?

De plus, lors de la saisie des optionbutton, il y a une erreur aussi… que je ne trouve pas. Merci de m'aidez

Code:
Option Explicit
Dim Ws As Worksheet
Private Sub UserForm1_Initialize()
Dim J As Long
Dim I As Integer

  Set Ws = Sheets("FICHE_INSCRIPTION") '
  With Me.ComboBox1
    For J = 2 To Ws.Range("C" & Rows.Count).End(xlUp).Row
      .AddItem Ws.Range("C" & J)
    Next J
  End With
  For I = 1 To 33
    Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
Next I
End Sub
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
   If Me.ComboBox1.ListIndex = -1 Then Exit Sub
  Ligne = Me.ComboBox1.ListIndex + 2
  For I = 1 To 33
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
  Next I
 End Sub
Private Sub BT_MODIFIER_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
  Ligne = Me.ComboBox1.ListIndex + 2
  For I = 1 To 33
    If Me.Controls("TextBox" & I).Visible = True Then
      Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
    End If
  Next I
    End If
End Sub
Private Sub BT_QUITTER_Click()
Unload UserForm1
End Sub

Private Sub BT_AJOUTER_CONTACT_Click()
Dim L As Integer, lieu_inscription As String, civilite As String

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

'Choix lieu et civilite
For Each bouton_lieu_inscription In Frame_lieu_inscription.Controls
    If bouton_lieu_inscription.Value Then
      lieu_inscription = bouton_lieu_inscription.Caption
    End If
Next
For Each bouton_civilite In Frame_civilite.Controls
    If bouton_civilite.Value Then
      civilite = bouton_civilite.Caption
    End If
Next


Range("A" & L).Value = lieu_inscription
Range("B" & L).Value = civilite
Range("C" & L).Value = ComboBox1
Range("D" & L).Value = TextBox1
Range("E" & L).Value = TextBox2
Range("F" & L).Value = TextBox3
Range("G" & L).Value = TextBox4
Range("H" & L).Value = TextBox5
Range("I" & L).Value = TextBox6
Range("J" & L).Value = TextBox7
Range("K" & L).Value = TextBox8
Range("L" & L).Value = TextBox9
Range("M" & L).Value = TextBox10
Range("N" & L).Value = TextBox11
Range("O" & L).Value = TextBox12
Range("P" & L).Value = TextBox13
Range("Q" & L).Value = TextBox14
Range("R" & L).Value = TextBox15
Range("S" & L).Value = TextBox16
Range("T" & L).Value = TextBox17
Range("U" & L).Value = TextBox18
Range("V" & L).Value = TextBox19
Range("W" & L).Value = TextBox20
Range("X" & L).Value = TextBox21
Range("Y" & L).Value = TextBox22
Range("Z" & L).Value = TextBox23
Range("AA" & L).Value = TextBox24
Range("AB" & L).Value = TextBox25
Range("AC" & L).Value = TextBox26
Range("AD" & L).Value = TextBox27
Range("AF" & L).Value = TextBox28
'Range("AE" & L).Value = TextBox_Description_Traitement
'Range("AG" & L).Value = TextBox_Vaccinations
Range("AH" & L).Value = TextBox29
'Range("AI" & L).Value = TextBox_Allergies
Range("AJ" & L).Value = TextBox30
'Range("AK" & L).Value = TextBox_Regime_Alimentaire
Range("AL" & L).Value = TextBox31
Range("AM" & L).Value = TextBox32
'Range("AN" & L).Value = TextBox_Droit_Image
'Range("AO" & L).Value = TextBox_Droit_Depart
Range("AP" & L).Value = TextBox33
End If

MsgBox ("Produit inséré dans fichier sélectionné") 'Vous informe que le présent contact est insérer dans votre tableau Excel.

Unload Me 'Ferme le formulaire
UserForm1.Show 'Ouvre le formulaire

'Après insertion, on remet les valeurs initiales
OptionButton1.Value = True

End Sub
 

Pièces jointes

  • SUPPORT_003.xlsm
    35 KB · Affichages: 105

Dranreb

XLDnaute Barbatruc
Re : formulaire de saisie, combobox fonctionne pas

Bonsoir.

Private Sub UserForm1_Initialize() n'est pas bon. L'objet qui décrète l'évènement Initialize c'est toujours UserForm. Verifiez dans la liste des objets en haut à gauche au dessus de la fenêtre de code: Vous n'y trouverez pas d'objet UserForm1, mais un Userform tout court.
 

jardibot

XLDnaute Junior
obliger la saisie de données dans 2 combobox & accorder deux combobox entre elles

Bonjour et merci pour hier, le formulaire fonctionne très bien.

Aujourd'hui dans ce même formulaire, je cherche lors de l'Ajout d'un nouveau contact, à obliger l'utilisateur à rentrer obligatoirement un nom dans la 'combobox_NOM_FAMILLE' et un prénom dans la 'combobox_PRENOM'.

Si le nom et le prénom n'est pas rempli, je souhaite qu'il soit possible de poursuivre QUE SI que l'utilisateur rentre un nom de famille et un prénom.

1- Pouvez vous m'aidez?

j'avais pensé à
Code:
Private Sub BT_AJOUTER_CONTACT_Click()
Dim L As Integer

'If IsEmpty(ComboBox_NOM_FAMILLE) And (Combobox_PRENOM) Then MsgBox ("Veuillez saisir un nom de famille et un prenom")
' End If
'Après je ne sais pas comment faire pour obliger la saisie et poursuivre?


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

Range("B" & L).Value = Combobox_CIVILITE
Range("C" & L).Value = Combobox_NOM_FAMILLE
Range("D" & L).Value = Combobox_PRENOM
Range("E" & L).Value = TextBox2
Range("F" & L).Value = TextBox3
Range("G" & L).Value = TextBox4
Range("H" & L).Value = TextBox5
' ect...
Unload Me 'Ferme le formulaire
UserForm1.Show 'Ouvre le formulaire
End Sub


2- Je souhaite faire une recherche via deux Combobox. Ma première recherche commencerait toujours par combobox_NOM_FAMILLE, puis après il suffirait d'affiner la recherche avec le combobox_PRENOM et à partir de ces deux recherches les données du contact apparaissent?

Dans mon code, les deux combobox réagissent mais ne sont pas en accords.
Ex: je recherche une famille via combobox_NOM_FAMILLE, (famille DURAND), quand je déroule le combobox_PRENOM, on trouve les prénoms qui sont dans toute la base et non les prénoms de la famille DURAND)

Pouvez-vous me dire comment faire? je vous joints le fichier en pièce jointe.

Un grand merci
 

Pièces jointes

  • SUPPORT_005.xlsm
    44 KB · Affichages: 82
Dernière édition:

Paf

XLDnaute Barbatruc
Re : formulaire de saisie, combobox fonctionne pas

Bonjour à tous,

Pour le 1

Code:
If ComboBox_NOM_FAMILLE = "" Or Combobox_PRENOM = "" Then
   MsgBox ("Veuillez saisir un nom de famille et un prenom")
   ComboBox_NOM_FAMILLE.SetFocus  ' renvoie le curseur sur Nom de Famille
   Exit Sub  ' on sort de la procédure
End If

Pour le 2 Voir le site de J. Boisgontier

Bonne suite
 

jardibot

XLDnaute Junior
Re : formulaire de saisie, combobox fonctionne pas

Merci Paf pour cette réponse à la question 1. C'est tout à fait ça :)

J'ai consulté le site en lien, j'ai beaucoup de lecture à faire..(intéressant)


Cela dit,si vous avez une idée pour a question 2 :) je suis preneur aussi!!!

Dans mon problème, la liste de la combobox_NOM_FAMILLE déroule tout les noms de famille connus (ça est ok),
Dans ces noms de famille ex: DURAND il y a plusieurs prénoms Franck et erranwe etc..

ce que j'aimerais
- c'est que le Combobox_PRENOM soit vide si aucun nom de famille a été sélectionné via le combobox_NOM_FAMILLE
- par contre si un nom de famille est sélectionné dans le combobox_NOM_FAMILLE alors la liste des prénoms de cette famille soit accessible dans le combobox_PRENOM
- puis si je sélectionne un des prénoms de cette famille via le combobox_PRENOM alors les données s'affiche dans toutes mes textbox et le combobox_CIVILITE


Merci beaucoup
 

Pièces jointes

  • SUPPORT_006.xlsm
    45.2 KB · Affichages: 92
Dernière édition:

jardibot

XLDnaute Junior
Re : formulaire de saisie, combobox fonctionne pas

Re Bjr PAF

Je lis l'envoi de votre lien. Oui en effet c'est ce que je cherche faire.

J'essaye de reproduire le même exemple que celui du lien: Combobox en cascade sans doublons
Par contre pouvez vous me dire quelles sont les variables qu'il faut déclarer 'Combobox en cascade sans doublons'
Doit-on mettre Dim f As worksheet? puis doit-on déclarer le "c" et "Mondico" est-ce des variables aussi? si oui en quoi doit-on les déclarer?
Merci
 

Paf

XLDnaute Barbatruc
Re : formulaire de saisie, combobox fonctionne pas

Re

les variables utilisées: Dim f as Worksheet, c as Range, Mondico

On ne doit pas les déclarer. Ce n'est pas une obligation ( la preuve elles ne sont pas déclarées sur le site) .

A+
 

laetitia90

XLDnaute Barbatruc
Re : formulaire de saisie, combobox fonctionne pas

bonjour tous :)

On ne doit pas les déclarer. Ce n'est pas une obligation ( la preuve elles ne sont pas déclarées sur le site)

il est fortement conseillé de declarer les variables
transparence du code si bogue
rapidite d'execution dans certains cas

si pas de declarations.... considere comme du variant plus d'occupation memoire

enfin!!!! c'est mon avis :)
 

jardibot

XLDnaute Junior
Re : formulaire de saisie, combobox fonctionne pas

Re

Voilà en mettant ces deux variables Dim f As Worksheet et Dim c As range,

il y a message d'erreur variable non définie "MonDico "

De plus si je la déclare, MonDico As variant

il y a message d'erreur un composant activeX ne peut pas créer d'objet…


Pouvez-vous m'aidez?

Code:
Option Explicit
Dim f As Worksheet

Private Sub UserForm_Initialize()
  
 Dim c As Range
 Set f = Sheets("base")
  Set MonDico = CreateObject("Scripting.Dictionary")

  For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row) ' on explore la colonne de niveau 1
     MonDico(c.Value) = "" ' on ajoute l'élément de la famille au dictionnaire
  Next c
  Me.ComboBox_NOM_FAMILLE.List = MonDico.keys
End Sub

Private Sub Combobox_NOM_FAMILLE_click()
  Dim c As Range
  Me.ComboBox_PRENOM.Clear
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row) ' on explore la colonne de niveau 1
     If c = Me.ComboBox_NOM_FAMILLE Then MonDico(c.Offset(, 1).Value) = "" ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
  Next c
  Me.ComboBox_PRENOM.List = MonDico.keys
End Sub

Private Sub Combobox_PRENOM_click()
Dim c As Range
  For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row) ' on explore la colonne de niveau 1
    If c = Me.ComboBox_NOM_FAMILLE And c.Offset(, 1) = Me.ComboBox_PRENOM Then Me.TextBox1 = c.Offset(, -1) ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
  Next c
End Sub
 

Pièces jointes

  • combo en cascade.xlsm
    41.9 KB · Affichages: 95

Paf

XLDnaute Barbatruc
Re : formulaire de saisie, combobox fonctionne pas

Re et bonjour laetitia90

avec
Option Explicit
Code:
Dim f As Worksheet, Mondico As Object
ou
Code:
Option Explicit
Dim f As Worksheet
Dim Mondico As Object

Pas de soucis avec XL 2003

A+
 

Statistiques des forums

Discussions
312 182
Messages
2 086 003
Membres
103 084
dernier inscrit
Hervé30120