Utiliser sur une ListBox qui varie en fonction de la source
Bonjour forum,
J'ai un userform, qui contient une ListBox, dont le contenu varie en fonction de la source.
L'objectif de mon formulaire est d'envoyer des courriers aux clients sélectionnés à partir de la ListBox, pour ceci j'ai écrit ce code mais il marche pas:
Private Sub Cmd_injecter_Click()
Dim WordApp As Object
Dim i As Integer, nomDossier As String, cheminDos As String, doss As String, ligne_grille As Integer
Dim Fichier As String, Spec As String, DLV As Long
DLV = Sheets("P9A").Cells(Rows.Count, 1).End(xlUp).Row - 1
If NoSlct Then
MsgBox "Vous devez sélectionner au moins une ligne", vbOKOnly, "Contrôle de saisie"
Else
If MsgBox("Confirmez-vous la redaction du courrier de l'amiante", vbYesNo, "Courrier de l'amiante") = vbNo Then Exit Sub
'// création application Word
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
'// injection lignes dans document Word
With Me.Lbx_grille
For i = 0 To Me.Lbx_grille.ListCount - 1
If .Selected(i) Then
'ligne_grille = tb_lignes_grille(i)
cheminDos = CreateObject("Wscript.Shell").SpecialFolders("Desktop")
Fichier = .List(i, 0)
Spec = .List(i, 1)
doss = "Client" & Fichier & "-" & Spec
CreationRepertoire cheminDos, doss
Call AmianteWord(WordApp, i)
envoyerCour (i)
.Selected(i) = False
End If
Next i
End With
'// fermeture application Word
WordApp.Quit
'// Message de fin
MsgBox "le courrier de l'amiante a été généré", vbInformation, "Confirmation"
Unload Me
End If
End Sub
Qqn a une idée?
En PJ, un fichier simplifié pour mieux comprendre.
Merci pour votre aide :)
Bonjour Menal,
1) Problème de déclaration de variable
I est un integer, ne peut donc pas comprendre les valeurs au dessus de 32.767
Voir le cours ICI
2) problème de tableau structuré qui comporte 1.048.575 lignes
Un tableau structuré est fait entre autre pour s'agrandir tout seul quand on arrive au bout, il ne faut donc pas le créer pour toutes les lignes
A+
Merci pour ton aide le code est marché.
Cependant j'utilise dans le code la fonction qui m'a donner pour injecter des valeurs d'Excel dans Word et j'ai une erreur au niveau de cette ligne:
Set cell = Usf.Lbx_grille.List(i, 0).Find(Nom, LookAt:=xlWhole)
voici le code complet de la fonction: ( c'est ton code ;)
Sub AmianteWord(WordApp As Object, i As Integer)
Dim WordDoc As Object, champ As Object
Dim Nom As String, nom_fichier As String
Dim cell As Range, référence As String
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\Courrier amiante\Courrier initial amiante (DTA).docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
If Err <> 0 Then MsgBox "Erreur ouverture document modèle -- " & Err.Description: Exit Sub
'// initialisation champs de fusion
WordDoc.Fields.Update
'// remplissage champs de fusion
For Each champ In WordDoc.Fields
'Si champ de fusion ...............................
If champ.Type = 59 Then
'suppression guillemets champ de fusion
Nom = Replace(champ.Result, Chr(171), ""): Nom = Replace(Nom, Chr(187), "")
'remplissage champ de fusion à partir de la valeur de la colonne à laquelle le nom fait référence
Set cell = Usf.Lbx_grille.List(i, 0).Find(Nom, LookAt:=xlWhole)
If Not cell Is Nothing Then champ.Result.Text = cell.Offset(i - 1)
End If
Next champ
'// sauvegarde et fermeture document
Dim Dossier As String, Fichier As String, chemin As String, Spec As String, doss As String
Fichier = Usf.Lbx_grille.List(i, 0)
Spec = Usf.Lbx_grille.List(i, 1)
doss = "Client" & Fichier & "-" & Spec
chemin = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\" & doss
'Word
WordDoc.SaveAs Filename:=chemin & "\Courrier de DTA" & ".docx"
'PDF
WordDoc.ExportAsFixedFormat OutputFileName:= _
chemin & "\Courrier de DTA" & ".pdf", ExportFormat:= _
17, 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.SaveChanges = False
WordDoc.Close
End Sub
Tu sais pourquoi cette erreur?
Merci d'avance.