[Form] Boucle combinant TextBox et ComboBox

Bonjour à tous,

Après avoir consulté un nombre incalculable de sujets sur Excel Pratique et trouvé milles et une solution ici, c'est à mon tour de poster mon premier sujet.

Pour vous donner le contexte, je suis actuellement en train de créer un outil me permettant, à mes collaborateurs et moi-même, de :

  • Enregistrer des données dans un onglet "Data" d'un classeur Excel grâce à un UserForm (combinant TextBox et ComboBox)
  • Rechercher/Modifier une ligne de données deja existante
  • Exporter et mettre en forme cette ligne dans un fichier modèle Word puis ensuite exporté en format PDF
  • Envoyer automatiquement ce fichier PDF par mail

Etant encore novice en langage VBA, je bloque au niveau de l'export en Word puis PDF. Mon code actuel fonctionne mais il n'est pas très intelligent selon moi et j'aimerais replacer le copier/coller de chaque ligne par une boucle pouvant combiner les numéros des TextBox et des ComboBox. Vous trouverez mon code ci-dessous, avec en commentaire des tentatives boule pour épurer le code.

Je ne peux malheureusement pas envoyer de fichier, si même en faire une version simplifié car le code depend du UserForm, qui est confidentiel.

Dim LastRow As Long

Private Sub GenPdf_Click()
'CommandButtonAdd_Click
FilePath = "C:\Blablabla" & Me.ComboBox1 & "_" & Me.TextBox2 & "-" & Me.TextBox3 & ".pdf" 'PDF export file
On Error Resume Next
Kill FilePath

DocFile = "J:\Blablabla.docx" 'Template file

Dim WordApp As Word.Application
Dim WordDoc As Word.Document

Set WordApp = New Word.Application
Set WordDoc = WordApp.Documents.Open(DocFile, False)

Word.Application.Visible = True

'For DataCol = 1 To 24
'    With WordDoc.Content.Find
'        .Text = "#" & Me("Label" & DataCol).Caption & "#"
'        .Replacement.Text = Me("TextBox" & DataCol).Value
'        .Execute Replace:=wdReplaceAll
'    End With
'Next DataCol

WordDoc.Bookmarks("BM1").Range.Text = Me("TextBox1").Value
WordDoc.Bookmarks("BM2").Range.Text = Me("TextBox2").Value
WordDoc.Bookmarks("BM3").Range.Text = Me("TextBox3").Value
WordDoc.Bookmarks("BM4").Range.Text = Me("ComboBox1").Value
WordDoc.Bookmarks("BM5").Range.Text = Me("TextBox4").Value
WordDoc.Bookmarks("BM6").Range.Text = Me("TextBox5").Value
WordDoc.Bookmarks("BM7").Range.Text = Me("TextBox6").Value
WordDoc.Bookmarks("BM8").Range.Text = Me("TextBox7").Value
WordDoc.Bookmarks("BM9").Range.Text = Me("ComboBox2").Value
WordDoc.Bookmarks("BM10").Range.Text = Me("ComboBox3").Value
WordDoc.Bookmarks("BM11").Range.Text = Me("TextBox8").Value
WordDoc.Bookmarks("BM12").Range.Text = Me("ComboBox4").Value
WordDoc.Bookmarks("BM13").Range.Text = Me("TextBox9").Value
WordDoc.Bookmarks("BM14").Range.Text = Me("ComboBox5").Value
WordDoc.Bookmarks("BM15").Range.Text = Me("ComboBox6").Value
WordDoc.Bookmarks("BM16").Range.Text = Me("TextBox10").Value
WordDoc.Bookmarks("BM17").Range.Text = Me("TextBox11").Value
WordDoc.Bookmarks("BM18").Range.Text = Me("ComboBox7").Value
WordDoc.Bookmarks("BM19").Range.Text = Me("ComboBox8").Value
WordDoc.Bookmarks("BM20").Range.Text = Me("TextBox12").Value
WordDoc.Bookmarks("BM21").Range.Text = Me("TextBox13").Value
WordDoc.Bookmarks("BM22").Range.Text = Me("ComboBox9").Value
WordDoc.Bookmarks("BM23").Range.Text = Me("TextBox14").Value
WordDoc.Bookmarks("BM24").Range.Text = Me("TextBox15").Value

WordDoc.ExportAsFixedFormat _
        OutputFileName:=FilePath, _
        ExportFormat:=wdExportFormatPDF, _
        OpenAfterExport:=False, OptimizeFor:= _
        0, Range:=0, From:=1, To:=1, _
        Item:=0, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=0, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False

'WordDoc.ExportAsFixedFormat OutputFileName:=FilePath, ExportFormat:=wdExportFormatPDF 'Export in PDF
WordDoc.Close saveChanges:=False
Set WordApp = Nothing
Set WordDoc = Nothing

Sheet3.Range("Y" & LastRow) = FilePath
Me.WebBrowser1.Navigate (FilePath)
End Sub

J'ai deja réussi à faire une boucle fonctionnant à peu prêt mais pour cette problématique, elle ne fonctionne pas.

Private Sub CommandButtonAdd_Click()

'Vérifier que tous les champs sont renseignés
Const TextNum = "1,2,3,4,7,8,9,10,11,12,13,14,15"
Const ComboNum = "1,2,3,4,5,6,7,8,9"
Dim c As Control, nok As Boolean

  For Each c In UserFormQEC.Controls
    If c.Name Like "TextBox*" Then
      If InStr("," & TextNum & ",", "," & Replace(c.Name, "TextBox", "") & ",") > 0 Then
        If Len(c.Value) = 0 Then
          c.Enabled = True
          c.BackColor = RGB(255, 0, 0)
          nok = True
        Else
          c.BackColor = RGB(255, 255, 255)
        End If
      End If
    ElseIf c.Name Like "ComboBox*" Then
      If InStr("," & ComboNum & ",", "," & Replace(c.Name, "ComboBox", "") & ",") > 0 Then
        If Len(c.Value) = 0 Then
          c.Enabled = True
          c.BackColor = RGB(255, 0, 0)
          nok = True
        Else
          c.BackColor = RGB(255, 255, 255)
        End If
      End If
    End If
  Next c

Bonjour,

Il serait plus simple que vos signets portent le même nom que vos contrôles. Il vous suffirait ensuite de faire une boucle For Next sur la collection Bookmarks.

Bonjour,

Merci pour votre réponse. A vrai dire, ce n'est pas vraiment les bookmarks qui me gênent mais plutôt la combinaison de TextBox/Combox box, je n'arrive pas à faire une boucle qui différencie les deux...

???

WordDoc.Bookmarks("TextBox1").Range.Text = Me("TextBox1").Value
Rechercher des sujets similaires à "form boucle combinant textbox combobox"