Optimisation Code
Bonjour à tous,
Voici un extrait de mon code actuel :
Option Base 1
Sub ExcelVersWord ()
Dim appWord As Word.Application
Dim docWord As Word.Document
Dim k As Integer
Dim L As Integer 'Variable ligne
Dim C As Integer 'Variable colonne
L=5
C=2
Dim signet(20) As String
Dim SignetActuel As String
signet(1)="PremierSignet"
'Liste de signets ici
signet(20)="DernierSignet"
Set appWord = CreateObject("word.application")
appWord.Visible = True
Set docWord = appWord.Documents.Open("CheminVersMonDocumentIci\NomDeMonDocumentIci", ReadOnly:=False)
For k=1 to k=20
SignetActuel = signet(k)
Cells(L, C).Copy
appWord.Selection.Goto What:=wdGoToBookmark, Name:=SignetActuel
On Error Resume Next
appWord.Selection.PasteSpecial 'On colle le contenu des cellules à l'emplacement du signet
Next
End sub
et je voudrais écrire pour la boucle For ... Next quelque chose du type :
For k = 1 to 20
SignetActuel = signet(k)
docWord.Bookmarks(SignetActuel).Range.Text = Workbooks("MonFichierExcel.xlsm").Worksheets("Page2").Cells(L, C).Value
Next
Ce genre d'instruction m'évite de Copier/coller intempestivement, ce qui ralentit le programme, sauf que j'ai une incompatibilité de type (Range.Texte <> Cells(L,C).Value).
Quelqu'un aurait une proposition ?
Merci d'avance !
Bonjour,
Je verrai plutôt ça de cette manière :
Sub ExcelVersWord()
Dim AppWord As Object ' Word.Application
Dim Doc As Object ' Word.Document
Dim Signet(20) As String
Dim I As Integer
Dim L As Integer 'Variable ligne
Dim C As Integer 'Variable colonne
L = 5
C = 2
Signet(1) = "PremierSignet"
'Liste de signets ici
Signet(20) = "DernierSignet"
Set AppWord = CreateObject("Word.Application")
With AppWord
.Visible = True
Set Doc = .Documents.Open("CheminVersMonDocumentIci\NomDeMonDocumentIci")
With Doc
For I = 1 To 20
'***** ---> faire le choix :
'remplace les signets par les textes des cellules
.Bookmarks(Signet(I)).Range.Text = Cells(L, C).Value
'insère le texte après les signets
.Bookmarks(Signet(I)).Range.InsertAfter Cells(L, C).Value
'incrémenter ici L et C !
Next I
End With
End With
End Sub
Il te faut faire le choix entre remplacer les signets par les valeurs des cellules ou insérer les valeurs après les signets !
Je n'ai pas testé avec le tableau (pas trop envie de construire un document et insérer les 20 signets mais testes et reviens)
Salut @Theze,
merci pour ta réponse ! Je me suis inspiré de ton code.
Par contre j'avais toujours une incompatibilité de type, même avec le "InsertAfter", ce qui était un peu bizarre.
Mais j'ai réussi a contourner l'erreur en mettant
[...].Range.Text = [...].Cells(L,C).Text
A priori cela ne pose pas de problèmes.
J'ai aussi essayé
[...].Range.Value = [...].Cells(L,C).Value
mais ça ne fonctionne pas.
En tout cas merci
Re;
Je viens de construire un fichier .docx avec 10 signets et j'ai pus sans problème inséré des valeurs juste après ces derniers avec l'instruction "InsertAfter" avec la ligne déjà donnée ci-dessous :
.Bookmarks(Signet(I)).Range.InsertAfter Cells(L, C).Value
donc, bizarre que tu ai eu un soucis !