Bonjour à tous,
Je suis nouveau sur le forum. Je n'ai pas l'habitude de demander de l'aide, j'essaie de me débrouiller tout seul, mais là, je sèche...
Je me suis mis au VBA, il y a 1 semaine. C'est donc tout récent.
J'ai récupéré un code (auquel j'ai tenté de faire des modifications pour rajouter des champs) pour faire un userform qui m'aidera pour mon activité professionnel. Je souhaite, en effet faire un base de donnée avec excel qui me permettra de faire remplir des doc Word, par publipostage par la suite.
Je mets le code de mon userform en fin de message. (Il y a certainement des incohérences... Mais pardonnez mon ignorance... je suis novice dans le domaine). J'ai mis des infos au début du code pour montrer où ça coince.
Le problème : Tout se synchronise bien, sauf pour les TextBox 11, 12, 13 qui me prenne les valeurs des Combox 3, 4, 5. A n'y rien comprendre...
Je vous remercie de votre aide.
Le code :
Option Explicit
Dim Ws As Worksheet
'Pour information, voici la correspondance avec les TextBox et le nom des colonnes du tableau Excel :
'TextBox 1 = Nom >>> la correspondance se fait, donc en principe ok
'TextBox 2 = Prénom >>> la correspondance se fait, donc en principe ok
'TextBox 3 = Adresse >>> la correspondance se fait, donc en principe ok
'TextBox 4 = CP >>> la correspondance se fait, donc en principe ok
'TextBox 5 = Ville >>> la correspondance se fait, donc en principe ok
'TextBox 6 = Téléphone >>> la correspondance se fait, donc en principe ok
'TextBox 7 = Email >>> la correspondance se fait, donc en principe ok
'TextBox 8 = Descriptif Travaux >>> la correspondance se fait, donc en principe ok
'TextBox 9 = Corps de métier >>> la correspondance se fait, donc en principe ok
'TextBox 10 = Adresse Chantier >>> la correspondance se fait, donc en principe ok
'TextBox 11 = Budget >>> Problème de correspondance. Cela me met la valeur de la ComboBox 3
'TextBox 12 = Délai Obtention Solution >>> Problème de correspondance. Cela me met la valeur de la ComboBox 4
'TextBox 13 = Date de début des travaux >>> Problème de correspondance. Cela me met la valeur de la ComboBox 5
'Pour les ComboBox, les correspondances sont dans le code, plus bas.
' Please !!! Aidez-moi, c'est à n'y rien comprendre !!!
'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", "M. & Mme")
ComboBox3.ColumnCount = 1 'Pour la liste déroulante Type de résidence
ComboBox3.List() = Array("", "Principale", "Locative / Second.", "Secondaire", "Lieu de travail")
ComboBox4.ColumnCount = 1 'Pour la liste déroulante Type de Local
ComboBox4.List() = Array("", "Pavillon", "Appartement", "Local commercial")
ComboBox5.ColumnCount = 1 'Pour la liste déroulante Statut du client
ComboBox5.List() = Array("", "Propriétaire", "Locataire")
ComboBox6.ColumnCount = 1 'Pour la liste déroulante Déclaration de travaux
ComboBox6.List() = Array("", "Oui", "Non")
ComboBox7.ColumnCount = 1 'Pour la liste déroulante Permis de construire
ComboBox7.List() = Array("", "Oui", "Non")
ComboBox8.ColumnCount = 1 'Pour la liste déroulante Maitre d'oeuvre
ComboBox8.List() = Array("", "Oui", "Non")
ComboBox9.ColumnCount = 1 'Pour la liste déroulante Financement
ComboBox9.List() = Array("", "Oui", "Non")
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 13
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")
ComboBox3 = Ws.Cells(Ligne, "M")
ComboBox4 = Ws.Cells(Ligne, "N")
ComboBox5 = Ws.Cells(Ligne, "O")
ComboBox6 = Ws.Cells(Ligne, "Q")
ComboBox7 = Ws.Cells(Ligne, "R")
ComboBox8 = Ws.Cells(Ligne, "U")
ComboBox9 = Ws.Cells(Ligne, "V")
For I = 1 To 13
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
With Worksheets("Clients")
.Range("A" & L).Value = ComboBox1
.Range("B" & L).Value = ComboBox2
.Range("M" & L).Value = ComboBox3
.Range("N" & L).Value = ComboBox4
.Range("O" & L).Value = ComboBox5
.Range("Q" & L).Value = ComboBox6
.Range("R" & L).Value = ComboBox7
.Range("U" & L).Value = ComboBox8
.Range("V" & L).Value = ComboBox9
.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
.Range("J" & L).Value = TextBox8
.Range("K" & L).Value = TextBox9
.Range("L" & L).Value = TextBox10
.Range("P" & L).Value = TextBox11
.Range("S" & L).Value = TextBox12
.Range("T" & L).Value = TextBox13
End With
End If
Unload Me
Userform1.Show
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, "A") = ComboBox1
Ws.Cells(Ligne, "B") = ComboBox2
Ws.Cells(Ligne, "M") = ComboBox3
Ws.Cells(Ligne, "N") = ComboBox4
Ws.Cells(Ligne, "O") = ComboBox5
Ws.Cells(Ligne, "Q") = ComboBox6
Ws.Cells(Ligne, "R") = ComboBox7
Ws.Cells(Ligne, "U") = ComboBox8
Ws.Cells(Ligne, "V") = ComboBox9
For I = 1 To 13
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
Unload Me
Userform1.Show
End Sub
'Pour le bouton supprimer
Private Sub CommandButton4_Click()
Sheets("Clients").Select
If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
Rows([A2:A65536].Find(ComboBox1.Value).Row).EntireRow.Delete
Sheets("Menu").Select
Unload Me
Userform1.Show
End If
End Sub
'Pour le bouton Quitter
Private Sub CommandButton3_Click()
Unload Me
End Sub
'Bouton Mandat client
Private Sub CommandButton6_Click()
Dim wordApp As Object
Set wordApp = CreateObject("word.Application")
wordApp.Visible = True
wordApp.Documents.Open "C:\Users\Famille Voillot\Google Drive\AC_TRAVAUX\ADMINISTRATIF\Contrat_Mandat_Client_lien_avec_bdd_client_macro.docm"
End Sub
'Bouton sauvegarder
Private Sub CommandButton7_Click()
ThisWorkbook.Save
End Sub
'Bouton Afficher BDD
Private Sub CommandButton8_Click()
Sheets("Clients").Select
End Sub
'Bouton Masquer BDD
Private Sub CommandButton9_Click()
Sheets("Menu").Select
End Sub
Je suis nouveau sur le forum. Je n'ai pas l'habitude de demander de l'aide, j'essaie de me débrouiller tout seul, mais là, je sèche...
Je me suis mis au VBA, il y a 1 semaine. C'est donc tout récent.
J'ai récupéré un code (auquel j'ai tenté de faire des modifications pour rajouter des champs) pour faire un userform qui m'aidera pour mon activité professionnel. Je souhaite, en effet faire un base de donnée avec excel qui me permettra de faire remplir des doc Word, par publipostage par la suite.
Je mets le code de mon userform en fin de message. (Il y a certainement des incohérences... Mais pardonnez mon ignorance... je suis novice dans le domaine). J'ai mis des infos au début du code pour montrer où ça coince.
Le problème : Tout se synchronise bien, sauf pour les TextBox 11, 12, 13 qui me prenne les valeurs des Combox 3, 4, 5. A n'y rien comprendre...
Je vous remercie de votre aide.
Le code :
Option Explicit
Dim Ws As Worksheet
'Pour information, voici la correspondance avec les TextBox et le nom des colonnes du tableau Excel :
'TextBox 1 = Nom >>> la correspondance se fait, donc en principe ok
'TextBox 2 = Prénom >>> la correspondance se fait, donc en principe ok
'TextBox 3 = Adresse >>> la correspondance se fait, donc en principe ok
'TextBox 4 = CP >>> la correspondance se fait, donc en principe ok
'TextBox 5 = Ville >>> la correspondance se fait, donc en principe ok
'TextBox 6 = Téléphone >>> la correspondance se fait, donc en principe ok
'TextBox 7 = Email >>> la correspondance se fait, donc en principe ok
'TextBox 8 = Descriptif Travaux >>> la correspondance se fait, donc en principe ok
'TextBox 9 = Corps de métier >>> la correspondance se fait, donc en principe ok
'TextBox 10 = Adresse Chantier >>> la correspondance se fait, donc en principe ok
'TextBox 11 = Budget >>> Problème de correspondance. Cela me met la valeur de la ComboBox 3
'TextBox 12 = Délai Obtention Solution >>> Problème de correspondance. Cela me met la valeur de la ComboBox 4
'TextBox 13 = Date de début des travaux >>> Problème de correspondance. Cela me met la valeur de la ComboBox 5
'Pour les ComboBox, les correspondances sont dans le code, plus bas.
' Please !!! Aidez-moi, c'est à n'y rien comprendre !!!
'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", "M. & Mme")
ComboBox3.ColumnCount = 1 'Pour la liste déroulante Type de résidence
ComboBox3.List() = Array("", "Principale", "Locative / Second.", "Secondaire", "Lieu de travail")
ComboBox4.ColumnCount = 1 'Pour la liste déroulante Type de Local
ComboBox4.List() = Array("", "Pavillon", "Appartement", "Local commercial")
ComboBox5.ColumnCount = 1 'Pour la liste déroulante Statut du client
ComboBox5.List() = Array("", "Propriétaire", "Locataire")
ComboBox6.ColumnCount = 1 'Pour la liste déroulante Déclaration de travaux
ComboBox6.List() = Array("", "Oui", "Non")
ComboBox7.ColumnCount = 1 'Pour la liste déroulante Permis de construire
ComboBox7.List() = Array("", "Oui", "Non")
ComboBox8.ColumnCount = 1 'Pour la liste déroulante Maitre d'oeuvre
ComboBox8.List() = Array("", "Oui", "Non")
ComboBox9.ColumnCount = 1 'Pour la liste déroulante Financement
ComboBox9.List() = Array("", "Oui", "Non")
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 13
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")
ComboBox3 = Ws.Cells(Ligne, "M")
ComboBox4 = Ws.Cells(Ligne, "N")
ComboBox5 = Ws.Cells(Ligne, "O")
ComboBox6 = Ws.Cells(Ligne, "Q")
ComboBox7 = Ws.Cells(Ligne, "R")
ComboBox8 = Ws.Cells(Ligne, "U")
ComboBox9 = Ws.Cells(Ligne, "V")
For I = 1 To 13
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
With Worksheets("Clients")
.Range("A" & L).Value = ComboBox1
.Range("B" & L).Value = ComboBox2
.Range("M" & L).Value = ComboBox3
.Range("N" & L).Value = ComboBox4
.Range("O" & L).Value = ComboBox5
.Range("Q" & L).Value = ComboBox6
.Range("R" & L).Value = ComboBox7
.Range("U" & L).Value = ComboBox8
.Range("V" & L).Value = ComboBox9
.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
.Range("J" & L).Value = TextBox8
.Range("K" & L).Value = TextBox9
.Range("L" & L).Value = TextBox10
.Range("P" & L).Value = TextBox11
.Range("S" & L).Value = TextBox12
.Range("T" & L).Value = TextBox13
End With
End If
Unload Me
Userform1.Show
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, "A") = ComboBox1
Ws.Cells(Ligne, "B") = ComboBox2
Ws.Cells(Ligne, "M") = ComboBox3
Ws.Cells(Ligne, "N") = ComboBox4
Ws.Cells(Ligne, "O") = ComboBox5
Ws.Cells(Ligne, "Q") = ComboBox6
Ws.Cells(Ligne, "R") = ComboBox7
Ws.Cells(Ligne, "U") = ComboBox8
Ws.Cells(Ligne, "V") = ComboBox9
For I = 1 To 13
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
Unload Me
Userform1.Show
End Sub
'Pour le bouton supprimer
Private Sub CommandButton4_Click()
Sheets("Clients").Select
If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
Rows([A2:A65536].Find(ComboBox1.Value).Row).EntireRow.Delete
Sheets("Menu").Select
Unload Me
Userform1.Show
End If
End Sub
'Pour le bouton Quitter
Private Sub CommandButton3_Click()
Unload Me
End Sub
'Bouton Mandat client
Private Sub CommandButton6_Click()
Dim wordApp As Object
Set wordApp = CreateObject("word.Application")
wordApp.Visible = True
wordApp.Documents.Open "C:\Users\Famille Voillot\Google Drive\AC_TRAVAUX\ADMINISTRATIF\Contrat_Mandat_Client_lien_avec_bdd_client_macro.docm"
End Sub
'Bouton sauvegarder
Private Sub CommandButton7_Click()
ThisWorkbook.Save
End Sub
'Bouton Afficher BDD
Private Sub CommandButton8_Click()
Sheets("Clients").Select
End Sub
'Bouton Masquer BDD
Private Sub CommandButton9_Click()
Sheets("Menu").Select
End Sub