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 !

Rechercher des sujets similaires à "optimisation code"