Problème correspondance formulaire vba excel

Résolu/Fermé
coraliie.c Messages postés 22 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 9 décembre 2014 - 28 nov. 2014 à 10:34
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 28 nov. 2014 à 11:51
Bonjour,

J'ai créée un formulaire vba mais étant débutante en vba (c'est mon premier formulaire vba!) je rencontre un problème.

Je n'arrive pas à faire correspondre les champs de mon formulaire au bonne colonne de mon tableau excel.

Je vous joint une image de ce que je voudrais :

https://www.cjoint.com/?3KCkMNwY0Sk

Et voici mon code vba :

'Pour le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer
ComboBox1.ColumnCount = 1 'Pour la liste déroulante Code
Set Ws = Sheets("Habilitation Agent") '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 23
Me.Controls("TextBox" & I).Visible = True
Next I
End Sub

'Pour la liste déroulante Code
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 23
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I
End Sub


C'est assez urgent.

En tout cas merci par avance pour votre aide !

Coralie

A voir également:

2 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié par f894009 le 28/11/2014 à 10:45
Bonjour,

Si vous donnees etaient dans des cellules consecutives, ceci marcherait

For I = 1 To 23
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I


mais vos donnees sont dispersees ex: B,D,G,AE ..... il faut donc autant de lignes de code
ex:
Me.Controls("TextBox1")=Ws.Cells(Ligne,"B")
Me.Controls("TextBox1")=Ws.Cells(Ligne,"C")


que vous avez de textboxs ou vous ne nous dites pas tout !!!!
1
coraliie.c Messages postés 22 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 9 décembre 2014
28 nov. 2014 à 10:48
Merci pour votre réponse.
Je vais essayer ça !
Il me semblait bien qu'il que je renseigne les colonne quelque part mais je ne savais pas ou et comment !
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié par f894009 le 28/11/2014 à 10:51
Re,

Il me semblait bien qu'il que je renseigne les colonne quelque part mais je ne savais pas ou et comment ! Plait-il ??????? Z'etes sur que ca veut dire quelque chose
0
coraliie.c Messages postés 22 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 9 décembre 2014
28 nov. 2014 à 10:57
Pardon j'ai oublié un mot ! Je voulais dire :
Il me semblait bien qu'il fallait que je renseigne les colonnes quelque part mais je ne savais pas ou et comment.

Du coup, j'imagine qu'il faut aussi que je modifie les lignes en gras de ce code :

'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, "A") = ComboBox1
For I = 1 To 23
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

Par contre je ne sais pas quoi modifier exactement...
0
coraliie.c Messages postés 22 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 9 décembre 2014
28 nov. 2014 à 11:11
J'ai bien modifié et rentré autant de ligne de code que j'avais de TextBox mais maintenant j'ai ce message d'erreur qui apparait :

Erreur de compilation - Variable non définie

et ça me surligne "Ligne" --> Me.Controls("TextBox1")=Ws.Cells(Ligne,"B")

Que faire ?

Voici ma modif :
'Pour le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer
ComboBox1.ColumnCount = 1 'Pour la liste déroulante Code
Set Ws = Sheets("Habilitation Agent") '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 23
Me.Controls("TextBox1") = Ws.Cells(Ligne, "B")
Me.Controls("TextBox2") = Ws.Cells(Ligne, "C")
Me.Controls("TextBox3") = Ws.Cells(Ligne, "D")
Me.Controls("TextBox4") = Ws.Cells(Ligne, "L")
Me.Controls("TextBox5") = Ws.Cells(Ligne, "T")
Me.Controls("TextBox6") = Ws.Cells(Ligne, "AB")
Me.Controls("TextBox7") = Ws.Cells(Ligne, "AJ")
Me.Controls("TextBox8") = Ws.Cells(Ligne, "AR")
Me.Controls("TextBox9") = Ws.Cells(Ligne, "AZ")
Me.Controls("TextBox10") = Ws.Cells(Ligne, "G")
Me.Controls("TextBox11") = Ws.Cells(Ligne, "O")
Me.Controls("TextBox12") = Ws.Cells(Ligne, "W")
Me.Controls("TextBox13") = Ws.Cells(Ligne, "AE")
Me.Controls("TextBox14") = Ws.Cells(Ligne, "AM")
Me.Controls("TextBox15") = Ws.Cells(Ligne, "AU")
Me.Controls("TextBox16") = Ws.Cells(Ligne, "BC")
Me.Controls("TextBox17") = Ws.Cells(Ligne, "H")
Me.Controls("TextBox18") = Ws.Cells(Ligne, "P")
Me.Controls("TextBox19") = Ws.Cells(Ligne, "X")
Me.Controls("TextBox20") = Ws.Cells(Ligne, "AF")
Me.Controls("TextBox21") = Ws.Cells(Ligne, "AN")
Me.Controls("TextBox22") = Ws.Cells(Ligne, "AV")
Me.Controls("TextBox23") = Ws.Cells(Ligne, "BD")
Next I
End Sub

'Pour la liste déroulante Code
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 23
Me.Controls("TextBox1") = Ws.Cells(Ligne, "B")
Me.Controls("TextBox2") = Ws.Cells(Ligne, "C")
Me.Controls("TextBox3") = Ws.Cells(Ligne, "D")
Me.Controls("TextBox4") = Ws.Cells(Ligne, "L")
Me.Controls("TextBox5") = Ws.Cells(Ligne, "T")
Me.Controls("TextBox6") = Ws.Cells(Ligne, "AB")
Me.Controls("TextBox7") = Ws.Cells(Ligne, "AJ")
Me.Controls("TextBox8") = Ws.Cells(Ligne, "AR")
Me.Controls("TextBox9") = Ws.Cells(Ligne, "AZ")
Me.Controls("TextBox10") = Ws.Cells(Ligne, "G")
Me.Controls("TextBox11") = Ws.Cells(Ligne, "O")
Me.Controls("TextBox12") = Ws.Cells(Ligne, "W")
Me.Controls("TextBox13") = Ws.Cells(Ligne, "AE")
Me.Controls("TextBox14") = Ws.Cells(Ligne, "AM")
Me.Controls("TextBox15") = Ws.Cells(Ligne, "AU")
Me.Controls("TextBox16") = Ws.Cells(Ligne, "BC")
Me.Controls("TextBox17") = Ws.Cells(Ligne, "H")
Me.Controls("TextBox18") = Ws.Cells(Ligne, "P")
Me.Controls("TextBox19") = Ws.Cells(Ligne, "X")
Me.Controls("TextBox20") = Ws.Cells(Ligne, "AF")
Me.Controls("TextBox21") = Ws.Cells(Ligne, "AN")
Me.Controls("TextBox22") = Ws.Cells(Ligne, "AV")
Me.Controls("TextBox23") = Ws.Cells(Ligne, "BD")
Next I
End Sub
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
28 nov. 2014 à 11:51
Bonjour,

Comme I n'est plus utilisé, il faut supprimer la boucle For I=...
Ensuite dans UserForm_Initialize (donc à l'ouverture du formulaire) Ligne n'est effectivement pas définie dans ton code. Pourquoi le serait-il d'ailleurs ? Dans cette procédure, je ne pense pas qu'il faille initialiser les TextBox.

A+
0