VBA pour application word 2
Bonjour la famille
il y a quelque peu, j'avais posté dans le forum un besoin d'aide un sujet semblable et j'avais trouvé solution.
Cependant, J'ai un formulaire Word contenant des "zones de texte" (Contrôle ActiveX) et "un contrôle du contenu de zone de liste déroulante" alimenté à partir d'un fichier excel. Puis-je avoir de l'aide sur comment faire pour remplir automatiquement tous ces TextBox en fonction de ma sélection du contrôle de contenu de liste déroulante dans ?
Je vous propose ainsi
- Un classeur Excel nommé "Classeur1" qui contient un tableau avec cinq colonnes. J'y ai défini une plage dynamique nommée "l_Noms" pour les données de la colonne des noms (première colonne).
- Un fichier Word nommé "Doc1" contenant un "contrôle du contenu de zone de liste déroulante" nommé "ListeNoms" et une "zones de texte" (de type Contrôle ActiveX) nommés RESPECTIVEMENT "txtMatricules", txtdate, txtlieu, txtpere.
NB: j'ai réussi à coder pour alimenter le contrôle du contenu de zone de liste déroulante
je veux que à chaque séléction dans mon contrôle du contenu de zone de liste déroulante, tous les textBox se mettent à jour :
***la zone de texte "txtMatricules", prend la valeur de la deuxième colonne du même tableau excel
***la zone de texte "txtdate" prend la valeur de la troisième colonne du même tableau excel
***la zone de texte "txtlieu" prend la valeur de la quatrième colonne du même tableau excel
***la zone de texte "txtpere" prend la valeur de la quatrième colonne du même tableau excel
dans l'attente d'une suite favorable
Bonsoir,
Votre fichier doc ne contient pas toutes les zones de texte, mais on fait comme si elles y étaient.
Donc, pour le principe, vous sélectionnez un nom avec la liste déroulante et les zones de textes doivent afficher les informations liées à ce nom.
Ceci devrait aller (pas vérifié):
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
' Vérifie si le contrôle qui a perdu le focus est la liste déroulante "ListeNoms"
If ContentControl.Tag = "ListeNoms" Then
Dim selectedValue As String
Dim associatedValue As String
Dim xlApp As Object
Dim ExcelWorkbook As Object
Dim ExcelRange As Object
Dim L As Long
Dim Nombre_lignes As Long
Dim Fichier_Excel As String
' Récupère la valeur sélectionnée dans la liste déroulante
selectedValue = ContentControl.Range.Text
' Emplacement du fichier Excel
Fichier_Excel = "D:\Classeur1.xlsm"
' Crée ou récupère l'instance de l'application Excel
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
' Ouvre le classeur Excel
Set ExcelWorkbook = xlApp.Workbooks.Open(Fichier_Excel)
' Récupère la plage "l_Noms" dans la feuille "Feuil1"
Set ExcelRange = ExcelWorkbook.Sheets("Feuil1").Range("l_Noms")
' Compte le nombre de lignes dans la plage
Nombre_lignes = ExcelRange.Rows.Count
'***************************************************************************************************************
' Parcourt chaque ligne de la plage pour trouver la valeur associée
For i = 2 To Nombre_lignes
If ExcelRange.Cells(i, 1).Value = ExcelRange Then 'si le nom est celui de l'adhérent sélectionné alors,
' Récupère la valeur de la colonne associée (par exemple, la 2e colonne)
Me.txtMatricules.Text = ExcelRange.Cells(i, 2).Value
Me.txtdate.Text = ExcelRange.Cells(i, 3).Value
Me.txtlieu.Text = ExcelRange.Cells(i, 4).Value
Me.txtpere.Text = ExcelRange.Cells(i, 5).Value
End If
Next i
'***************************************************************************************************************
' Ferme le classeur Excel sans enregistrer
ExcelWorkbook.Close SaveChanges:=False
Set xlApp = Nothing
Set ExcelWorkbook = Nothing
Set ExcelRange = Nothing
End If
End SubCdlt
Je vous remercie pour cette brillante intervention.