Erreur d'exécution '9
Bonjour à Tous,
J'ai besoin d'aide sur un code VBA dont je n'arrive pas à trouver la cause de l'erreur d'exécution '9'. J'ai passé des heures à chercher, mais je ne suis pas assez performant en VBA. Mon codage est le suivant (voir fichier Excel joint):
Option Explicit
Dim Ws As Worksheet
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
D'avance merci pour votre aide et à charge de revanche.
Bien cordialement,
Mickael,
Bonjour,
Je ne sais pas où tu as pris l'idée de mettre des espaces entres les mots et les guillemets.
Au lieu de Sheets(" Clients ")
Ce doit être Sheets("Clients")
Ou encore
Au lieu de Ws.Range(" A " & Rows.Count).End(xlUp).Row
Ce doit être Ws.Range("A" & Rows.Count).End(xlUp).Row
Et encore
Remplacer : .AddItem Ws.Range(" A " & J)
Par : .AddItem Ws.Range("A" & J)
Quand tu avances dans ton code, utilise le mode pas-à-pas ( touche F8 ) pour défiler le code ligne par ligne. Ça aide la trouver les erreurs.
ric
Bonjour RIC
Merci pour ta réponse. Je débute en VBA.
Quand je code, certains espaces se générent automatiquement. Je vais essayer de faire du nettoyage à l'aide de F8.
Il semble que j'ai une erreur sur la ligne 28:
Me.Controls("TextBox" & I).Visible = True
Pour ce fichier j'ai récupéré le code sur internet; je n'ai pas encore le niveau pour concevoir un code aussi complexe. Je souhaite utiliser ce programme pour mon boulot.
Bonjour,
Après avoir nettoyé le code du formulaire et corrigé l'ordre des colonnes dans le code ... l'utilisation du Userform pour l'ajout ou la modification semble fonctionner correctement.
Voir si ça convient.
ric
Bonjour
un peux de nettoyage
A+
Maurice
Option Explicit
Dim Ws As Worksheet
Private Sub UserForm_Initialize()
Dim J As Long
'Dim I As Integer
Set Ws = Feuil1 'Correspond au CodeName 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
ComboBox2.List() = Array(" ", "M.", "Mme", "Mlle")
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.Value = Ws.Cells(Ligne, 2)
For I = 1 To 7
Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I
End Sub#RIC et #Maurice
Merci pour votre aide précieuse. Oui tout semble fonctionner.
Je vais essayer de décortiquer le code pour le comprendre. (pour le moment je suis en train de suivre le cours VBA du Forum).
Un GRAND merci à vous 2!
Mickaël,
bonsoir
la suite
'Pour le bouton Nouveau contact
Private Sub CommandButton1_Click()
Dim L&, I&
If MsgBox(" Confirmez-vous l?insertion de ce nouveau contact ? ", vbYesNo, " Demande de confirmation d?ajout ") = vbYes Then
With Ws
L = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range(" A " & L).Value = ComboBox1 ' a revoir
.Range(" B " & L).Value = ComboBox2
For I = 1 To 7
.Cells(L, I + 2) = Controls("TextBox" & I)
Next I
End With
End If
End Subtu veux quoi pour les Références
A+
Maurice