VBA Excel 2010 (formulaire personnalisé) [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
mercredi 28 janvier 2015
Statut
Membre
Dernière intervention
17 mars 2015
-
Messages postés
6949
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
-
Bonjour tout le monde, au fait c'est ma première fois d'utiliser ce forum.
Mon message est que j'ai crée un formulaire personnalisé avec le code VBA, et quand j'exécute le code un message d'erreur s'affiche: Erreur d'exécution 9 lindice n'appartient pas à la selection si quelqu'un pourra m'aidé à résoudre ce problème ça me ferai énormément plaisir.
Je suis assistant dans un organisme Internationnal je veux me rassuer que ces codes là peuvent être validés sans cette erreur d'exécution 9 qui me donne du pain sur la planche voici ces codes ci-dessousOption Explicit
Dim Ws As Worksheet

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

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

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

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

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

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

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

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

1 réponse

Messages postés
6949
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
554
Bonjour,

Voilà:

Option Explicit
Dim Ws As Worksheet
Private Sub ComboBox1_Change()
Dim Ligne As Long
 Dim I 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 I = 1 To 7
 Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
 Next I
End Sub
Private Sub CommandButton1_Click()
Dim L As Integer
 If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
 L = Sheets("Clients").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
 Range("A" & L).Value = ComboBox1
 Range("B" & L).Value = ComboBox2
 Range("C" & L).Value = TextBox1
 Range("D" & L).Value = TextBox2
 Range("E" & L).Value = TextBox3
 Range("F" & L).Value = TextBox4
 Range("G" & L).Value = TextBox5
 Range("H" & L).Value = TextBox6
 Range("I" & L).Value = TextBox7
 End If
End Sub
Private Sub CommandButton2_Click()
Dim Ligne As Long
 Dim I 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 + 2
 Ws.Cells(Ligne, "B") = ComboBox2
 For I = 1 To 7
 If Me.Controls("TextBox" & I).Visible = True Then
 Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
 End If
 Next I
 End If
End Sub
Private Sub UserForm_Initialize()
Dim J As Long
 Dim I As Integer
ComboBox2.ColumnCount = 1 'Pour la liste d?roulante Civilit?
 ComboBox2.List() = Array("", "M.", "Mme", "Mlle")
 Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
 With Me.ComboBox1
 For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
 .AddItem Ws.Range("A" & J)
 Next J
 End With
 For I = 1 To 7
 Me.Controls("TextBox" & I).Visible = True
 Next I
End Sub


L' erreur venait des déclarations de variable et de nomination de la feuille.

Dim Ws As Worksheet
Set Ws = Sheets("Clients")


Mettre toujours Option Explicit, cela oblige a déclarer ses variable
Messages postés
10
Date d'inscription
mercredi 28 janvier 2015
Statut
Membre
Dernière intervention
17 mars 2015

Merci M. Pivert, je ne sais pas comment vous remercier je vais tenté avec ces codes et je vous donnerai la suite je vous souhaite une exellente journée merci infiniment
Messages postés
10
Date d'inscription
mercredi 28 janvier 2015
Statut
Membre
Dernière intervention
17 mars 2015

Les codes que vous m'avez donné sont bel et bien fonctionnel je dois maintenant les adapter au besoin de mon service merci encore un fois à bientôt
Messages postés
6949
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
554
Content que cela fonctionne.
A une prochaine fois peut-être?

Le Pivert