VBA Excel 2010 (formulaire personnalisé)

Résolu
Berouma Messages postés 11 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    0
    1. Berouma Messages postés 11 Statut Membre
       
      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
      0
    2. Berouma Messages postés 11 Statut Membre
       
      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
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Content que cela fonctionne.
      A une prochaine fois peut-être?

      Le Pivert
      0