Formulaire vba erreur

nikkox31

XLDnaute Nouveau
Bonjour,

j'ai réalisé pour la première fois un formulaire avec 2 combobox, 17 textbox et 3 commandbutton

je ne comprends pas cela ne fonctionne pas j'ai un message d'erreur d’exécution - objet spécifié introuvable !

pouvez vous m'aider svp ? :eek:

voici mon userform
'Pour le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer

ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
ComboBox2.List() = Array("", "M.", "Mme", "Mlle")
Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
With 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 17
Me.Controls("TextBox" & S).Visible = True
Next I

End Sub

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

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

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

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

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

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

bbb38

XLDnaute Accro
Re : Formulaire vba erreur

Bonjour nikkox31, le forum,
Sans un petit fichier d’exemple, impossible de tester les modifications apportées à ton code.
Option Explicit
'Pour le bouton Nouveau contact
Private Sub CommandButton1_Click()
Dim L As Integer
If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
L = Sheets("Clients").Range("A65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
Range("A" & L).Value = ComboBox1
Range("B" & L).Value = ComboBox2
Range("C" & L).Value = TextBox1
Range("D" & L).Value = TextBox2
Range("E" & L).Value = TextBox3
Range("F" & L).Value = TextBox4
Range("G" & L).Value = TextBox5
Range("H" & L).Value = TextBox6
Range("I" & L).Value = TextBox7
Range("J" & L).Value = TextBox8
Range("K" & L).Value = TextBox9
Range("L" & L).Value = TextBox10
Range("M" & L).Value = TextBox11
Range("N" & L).Value = TextBox12
Range("O" & L).Value = TextBox13
Range("P" & L).Value = TextBox14
Range("Q" & L).Value = TextBox15
Range("R" & L).Value = TextBox16
Range("S" & L).Value = TextBox17
End If
End Sub

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

'Pour le bouton Quitter
Private Sub CommandButton3_Click()
Unload Me
End Sub
Cordialement,
Bernard
 

Chris24

XLDnaute Impliqué
Re : Formulaire vba erreur

Bonjour

Tout d'abord

remplace Me.Controls("TextBox" & S).Visible = True par Me.Controls("TextBox" & I).Visible = True

D'autre part la numérotation des textbox dans ton formulaire commence à 3 jusqu'à 19

Donc
For I = 3 To 19
Me.Controls("TextBox" & I).Visible = True

Bonne journée
 

nikkox31

XLDnaute Nouveau
Re : Formulaire vba erreur

Super merci, cela fonctionne mais j'ai un nouveau probleme aucun de mes commandbutton ne fonctionne ?
et lorsque je met un nouveau client le combobox 1 me propose "code client" est il possible de mettre cette case vide des le demarrage lors de la creation d'un nouveau client ?

merci
 

Pièces jointes

  • fiche ouverture client formulaire.xlsm
    27.3 KB · Affichages: 49
  • fiche ouverture client formulaire.xlsm
    27.3 KB · Affichages: 48

nikkox31

XLDnaute Nouveau
Re : Formulaire vba erreur

Alors tout fonctionne maintenant mais j'ai un nouveau soucis lorsque je sélectionne un code client qui est deja existant j'ai un message erreur d’exécution 424 objet requis !
je ne comprends pas pourquoi lorsque je choisi un code client, sa fiche n'apparait pas dans les cases de mon formulaire !
voici ce qui est surligné en jaune :

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

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

Chris24

XLDnaute Impliqué
Re : Formulaire vba erreur

RE

Remplace ton code par celui-ci

'Pour la liste déroulante Code client
Private Sub ComboBox1_Change()
Dim Ligne As Integer, S As Integer

Set Ws = Sheets("Clients")
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 1
ComboBox2 = Ws.Cells(Ligne, "B")
For S = 1 To 8
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 2)
Next S
For S = 9 To 17
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 3)
Next S
End Sub

Edit: n'aurais tu point oublié un textbox pour le téléphone portable?
 
Dernière modification par un modérateur:

nikkox31

XLDnaute Nouveau
Re : Formulaire vba erreur

merci beaucoup car j'etais vraiment perdu, par contre je ne sais pas quoi modifier car le code client 1 est sur la ligne 2 et lorsque je le mets voici ce qu'il affiche : test.formaulaire.jpg

pour le textbox portable j'y es pensé trop tard et je ne sais pas comment y introduire le code sans tout chambouler... :(

en tout cas un grand merci encore
 

Chris24

XLDnaute Impliqué
Re : Formulaire vba erreur

Private Sub ComboBox1_Change()
Dim Ligne As Integer, S As Integer

Set Ws = Sheets("Clients")
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "B")
For S = 1 To 8
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 2)
Next S
For S = 9 To 17
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 3)
Next S
End Sub

Pour le tel portable je regarde mais pas maintenant(ce n'est pas compliqué) :rolleyes:
 

Lone-wolf

XLDnaute Barbatruc
Re : Formulaire vba erreur

Bonjour à toutes et à tous :)

@nikkox. Personnellement, je serait parti avec TextBox3 et dans la propriété Tag j'aurait mis 3 qui correspond à la colonne C. TextBox4 > Tag=4 qui est la D, TextBox5 > Tag = 5 qui correspond à la colonne E etc. Ensuite, en exemple.


Code:
Private Sub UserForm_Initialize()
Dim x As Integer
ComboBox1.Clear

With Sheets("Base")
For x = 2 To .Range("a65536").End(xlUp).Row
        ComboBox1 = .Range("a" & x)
         'Combobox sans doublons
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("a" & x)
    Next x
    ComboBox1.Text = ""
End With
End Sub

Private Sub UserForm_Activate()
ComboBox1.Text = ""
TextBox3.SetFocus
End Sub


Private Sub CommandButton1_Click() 'Bouton Enregistrements
Dim col As Integer, derlig As Integer, x As Integer
Dim ctrl As Control, cel As Range, i As Long

With Sheets("Base")
derlig = .Range("a65536").End(xlUp).Row + 1

For Each ctrl In Me.Controls
If TypeName(ctrl) <> "TextBox" then Exit For
col = Val(ctrl.Tag)
If col > 0 Then
If Not IsNumeric(ctrl) Then
.Cells(derlig, col) = ctrl
Else
.Cells(derlig, col) = CDbl(ctrl)   'format numérique simple ex: 3124
End If
End If
Next ctrl
'.Range("G2:H65000").NumberFormat = "000 000 00 00"   'Numéro téléphone et fax
'.Range("A:J").Columns.AutoFit
'.Range("A2:J65000").Sort [A2], xlAscending
End With

For i = 3 To 19
Me.Controls("TextBox" & i).Text = ""
Next
TextBox3.SetFocus
End Sub

En faisant comme ceci, il y a moins de risque de se tromper, surtout avec autant de TextBox's.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Formulaire vba erreur

Re nikkox,

L' erreur "Objet introuvable" venait du nom de la variable S à la place de I et dans la macro tu partait avec TextBox3 au lieu de TextBox1. Ensuite tu met Ws.Range("Axxx") sans déclarer la variable et l'initialiser dans combo et commandbutton; Ligne = Me.ComboBox1.ListIndex + 3 pas +2, puisque un index commence à 0.

Code:
Public Ws As Worksheet
'Pour le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
 Dim S As Integer

Set Ws = Sheets("Clients")

ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
ComboBox2.List() = Array("", "Mr", "Mme", "Mlle")
 
 With ComboBox1
 For J = 3 To Ws.Range("A" & Rows.Count).End(xlUp).Row
 .AddItem Ws.Range("A" & J)
 Next J
 End With
 For S = 1 To 17
 Me.Controls("TextBox" & S).Visible = True
 Next S

End Sub

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

Set Ws = Sheets("Clients")

 If Me.ComboBox1.ListIndex = -1 Then Exit Sub
 Ligne = Me.ComboBox1.ListIndex + 3
 ComboBox2 = Ws.Cells(Ligne, "B")
 For S = 1 To 17
 Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 2)
 Next S
End Sub

'Pour le bouton Nouveau contact
Private Sub CommandButton1_Click()
Dim L As Integer

Set Ws = Sheets("Clients")

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

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
 Dim Ligne As Long
 Dim S As Integer

Set Ws = Sheets("Clients")

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

'Pour le bouton Quitter
Private Sub CommandButton3_Click()
Unload Me
End Sub
End Sub
 
Dernière édition:

nikkox31

XLDnaute Nouveau
Re : Formulaire vba erreur

Bonjour Lone-wolf , merci pour tes reponses pour l'objet introuvable c'etait deja réglé hier par Chris24 et très honnetement je débute alors je ne suis pas encore assez calé pour faire des choses trop compliqué.
En tout cas merci beaucoup.:)
 

nikkox31

XLDnaute Nouveau
Re : Formulaire vba erreur

Private Sub ComboBox1_Change()
Dim Ligne As Integer, S As Integer

Set Ws = Sheets("Clients")
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "B")
For S = 1 To 8
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 2)
Next S
For S = 9 To 17
Me.Controls("TextBox" & S) = Ws.Cells(Ligne, S + 3)
Next S
End Sub

Pour le tel portable je regarde mais pas maintenant(ce n'est pas compliqué) :rolleyes:


tout fonctionne a merveille ! merci beaucoup chris24, j'attends donc de tes nouvelles pour l'ajout du textbox ( tel portable ) je vais regarder ca tout seul en attendant.
 

Lone-wolf

XLDnaute Barbatruc
Re : Formulaire vba erreur

Bonjour à toutes et à tous :)

@nikkox

Ton fichier en retour avec l'ajout du téléphone portable et modification du code d'enregistrement. J'ai fait les tests et chez moi pas de problèmes. Double-clique sur la feuille pour afficher le formulaire. Et Me.ComboBox1.ListIndex + 2 c'est faux, il fallait mettre + 3.
La valeur ListIndex est égale à 0 pour la 1ère ligne , 1 pour la 2ème ligne ...etc...
 

Pièces jointes

  • fiche ouverture client formulaire.xlsm
    627.4 KB · Affichages: 57
  • fiche ouverture client formulaire.xlsm
    627.4 KB · Affichages: 50
Dernière édition:

Chris24

XLDnaute Impliqué
Re : Formulaire vba erreur

Bonjour nikkox31, Loup solitaire

Le travail est fait, c'est parfait :eek:

Pour Me.ComboBox1.ListIndex + 2, effectivement, j'étais sur le fichier et j'avais supprimé la première ligne vide.

Je me suis permis d'apporter quelques modifications pour le bouton nouveau contact:
Incrémentation automatique du Code client et effacement des contrôles après enregistrement pour nouvelle saisie.

'Pour le bouton Nouveau contact
Private Sub CommandButton1_Click()
Dim L As Integer, col As Long
Dim ctrl As Control

If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
Set Ws = Sheets("Clients")

With Ws
L = .Range("A65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
'Incrémentation automatique du Code client
If Not IsNumeric(Cells(L - 1, 1)) Then 'Premier code client
Cells(L, 1) = "0000" & 1
Else
.Cells(L, 1) = "0000" & Cells(L - 1, 1) + 1
End If
.Cells(L, 2) = ComboBox2
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
col = Val(ctrl.Tag)
If col > 0 Then
If Not IsNumeric(ctrl) Then
.Cells(L, col) = ctrl
Else
.Cells(L, col) = CDbl(ctrl) 'format numérique simple ex: 3124
End If
End If
End If
Next ctrl
.Range("j3:k65000").NumberFormat = "000 000 00 00" 'Numéro téléphone et portable
End With
End If
'Efface les controles pour nouvelle saisie
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
ctrl = ""
End If
Next
Me.ComboBox2.ListIndex = -1
L = Ws.Range("A65536").End(xlUp).Row
Me.ComboBox1.RowSource = "Clients!A3:A" & L
Me.ComboBox1.ListIndex = -1
End Sub



Je pense que pour trouver un client tu devrais faire la recherche par Nom et non par code
 

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib