IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme boucle sur Signet


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Probleme boucle sur Signet
    Bonsoir
    J
    Je suis débutant dans le vba j'ai réussi à faire la macro ci dessous qui fonctionne mais je souhaite insérer une boucle afin incrémenter automatiquement le numéro du signet du word associé à la ligne suivante d'excel 1. Signet1 =A1 ; Signet2=A2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub Macro2()
    '
    ' Macro2 Macro
    '
    'Dim wordApp As Word.Application
    'Dim wordDoc As Word.Document
     
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim i As Byte
     
    Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
    Set WordDoc = WordApp.Documents.Open("C:\Users\G38055\Desktop\test.docx") 'ouvre document Word
    WordApp.Visible = False 'word masqué pendant l'operation
     
    'dans le document word, il faut avoir placé des signets aux endroits qu'on veut remplir
    'à l'endroit de chaque signet qui se trouve dans le fichier word on va inscrire le contenu des cellules
    WordDoc.Bookmarks("Signet1").Range.Text = Cells(1, 1)
    'WordDoc.Bookmarks("nom du second signet").Range.Text = Cells(numéro de ligne, numéro de colonne)
     
     
    WordApp.Visible = True 'affiche le document Word
    'WordDoc.PrintOut 'si on veut imprimer
     
    'WordDoc.Close True 'si on veut fermer le document word en sauvegardant les données
    'WordApp.Quit 'ferme la session Word
    End Sub

    J'ai fait l'essai avec ce code mais je ça bloaque ici WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub Macro2()
    '
    ' Macro2 Macro
    '
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim i As Byte
     
    Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
    Set WordDoc = WordApp.Documents.Open("C:\Users\G38055\Desktop\test.docx") 'ouvre document Word
    WordApp.Visible = False 'word masqué pendant l'operation
     
    'dans le document word, il faut avoir placé des signets aux endroits qu'on veut remplir
    'à l'endroit de chaque signet qui se trouve dans le fichier word on va inscrire le contenu des cellules
    For i = 1 To 3
            'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
            WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)
        Next i
    'WordDoc.Bookmarks("nom du second signet").Range.Text = Cells(numéro de ligne, numéro de colonne)
     
     
    WordApp.Visible = True 'affiche le document Word
    'WordDoc.PrintOut 'si on veut imprimer
     
    'WordDoc.Close True 'si on veut fermer le document word en sauvegardant les données
    'WordApp.Quit 'ferme la session Word
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Si c'est toujours le même document, tu peux t'éviter de te compliquer la vie. Tu te crées un modèle de document avec tes signets. Tu emplis ton document-modèle, puis tu enregistres sous un nouveau nom et tu n'enregistres pas tom modèle. Tes signets seront toujours là.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guicad Voir le message
    J'ai fait l'essai avec ce code mais je ça bloque ici WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)
    Bonjour,

    Dans votre code, Word ne sait pas à quoi fait référence Cells(i,1).

    Essayez ce code qui fonctionne chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub MettreAJourLesSignets()
     
    Dim OngletDesDonnees As Worksheet
     
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim i As Byte
     
        Set OngletDesDonnees = ActiveSheet
        Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
        Set WordDoc = WordApp.Documents.Open("C:\Users\G38055\Desktop\test.docx") 'ouvre document Word
     
        WordApp.Visible = False 'word masqué pendant l'operation
     
        With OngletDesDonnees
             For i = 1 To 3
                 WordDoc.Bookmarks("Signet" & i).Range.Text = .Cells(i, 1)
             Next i
        End With
     
     
        WordApp.Visible = True 'affiche le document Word
        'WordDoc.PrintOut 'si on veut imprimer
     
        'WordDoc.Close True 'si on veut fermer le document word en sauvegardant les données
        'WordApp.Quit 'ferme la session Word
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
        Set OngletDesDonnees = Nothing
     
    End Sub

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Chez moi, les deux fonctionnent tel quel ou presque. (Office 2016)

    À par la modification du nom de fichier et du chemin d'accès.

    Et j'ai mis .value au bout du cells()

    As-tu remis ton signet dans ton document entre tes "deux macros" ? Parce que la première macro s effacé le premier signet chez-moi. Et la deuxième a probablement effacé les trois signets.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guicad Voir le message
    Dans mon précédent code, je n'avais pas été jusqu'à la sauvegarde et je n'avais pas fait attention que le document conservait toutes les valeurs précédentes.
    Dans le document exemple que j'ai généré, les signets n'englobaient pas de texte, c'étaient juste des points d'insertion. Ce qui fait qu'à chaque mise à jour, la valeur du fichier Excel était bien récupérée mais le texte existant n'était pas remplacé.

    j'ai donc modifié le code pour que la sélection soit étendue après le point d'insertion. Le soucis c'est qu'en liaison tardive, les paramètres wdWord ou wdSaveChanges sont considérés comme des variables et le code ne fonctionne pas et je n'ai réussi à trouver une déclaration de substitution. J'ai donc référencé la DLL Microsoft Word et déclaré des variables Word (Application, Document, Selection) et là je n'ai pas eu de problème.

    Code modifié est le suivant : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Option Explicit
     
    ' Référencer la DLL Microsoft Word
     
    Sub MettreAJourLesSignets()
     
    Dim OngletDesDonnees As Worksheet
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim MaSelection As Word.Selection
     
    'Dim WordApp As Object
    'Dim WordDoc As Object
    'Dim MaSelection As Object
     
    Dim i As Byte
     
        Set OngletDesDonnees = ActiveSheet
        Set WordApp = CreateObject("word.application") 'ouvre session word et le fichier voulu
        WordApp.Visible = False 'word masqué pendant l'operation
        Set WordDoc = WordApp.Documents.Open("C:\Users\G38055\Desktop\test.docx") 'ouvre document Word
     
        With OngletDesDonnees
             For i = 1 To 3
                Set MaSelection = WordApp.Selection
                WordDoc.Bookmarks("Signet" & i).Select
                With MaSelection
                    .Expand unit:=wdWord  'Si wdWord ne correspond pas à la sélection essayer unit:=Sentence ou unit:=Paragraph
                    .Range.Text = OngletDesDonnees.Cells(i, 1).Value
                End With
                Set MaSelection = Nothing
             Next i
        End With
     
        WordApp.Visible = True 'affiche le document Word
        'WordDoc.PrintOut 'si on veut imprimer
     
        WordDoc.Close savechanges:=wdSaveChanges 'si on veut fermer le document word en sauvegardant les données
        WordApp.Quit 'ferme la session Word
        Set MaSelection = Nothing
        Set WordDoc = Nothing
        Set WordApp = Nothing
        Set OngletDesDonnees = Nothing
     
    End Sub

    Selon la chaîne injectée dans le document, il est possible que la sélection du texte existant dans chaque signet ne soit que partielle. Dans ce cas, il faudra remplacer wdWord, par wdSentence ou wdParagraph.

    A noter également que si les signets englobaient une zone de texte, il n'y aurait pas cette difficulté de sélection.

Discussions similaires

  1. Réponses: 14
    Dernier message: 24/11/2014, 10h02
  2. probleme boucle sur SDcard
    Par ulquiorra dans le forum Android
    Réponses: 7
    Dernier message: 27/04/2010, 15h03
  3. Réponses: 12
    Dernier message: 02/07/2009, 18h07
  4. Probleme de boucles sur dégradé
    Par greg_du_nord dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 14/06/2009, 18h49
  5. Probleme de boucle sur checkbox
    Par nuFox dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/12/2008, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo