Problème correspondance formulaire vba excel

Résolu
coraliie.c Messages postés 22 Statut Membre -  
Zoul67 Messages postés 2001 Statut Membre -
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

2 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. coraliie.c Messages postés 22 Statut Membre
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. coraliie.c Messages postés 22 Statut Membre
       
      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
  2. coraliie.c Messages postés 22 Statut Membre
     
    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
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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