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 :

rendre Word "invisible" [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut rendre Word "invisible"
    Bonjour,
    je me permets de revenir sur un code que j'avais déjà posté il y a quelques jours. Mon problème était que la boucle for s'arrêtait après la 1ère itération.
    Cela venait du fait que la propriété visible (voir code en gras) de l'application Word était sur false (je n'ai toujours pas compris ce problème...). Dans tous les cas ça marche maintenant, mais c'est très moche visuellement car à chaque itération Word se lance, le publipostage s'exécute, word sauvegarde et quitte, et tout ça de manière visuelle.
    Pour le moment cela rend mon outil inutilisable au sens de l'utilisateur.

    Merci de (re)soumettre vos idées.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub MakeMemos()
    'crée des mémos dans word en utilisant l'automation
        Dim WordApp As Word.Application
       
        
        
    'démarre word et crée un objet
        
        Set WordApp = New Word.Application
        WordApp.Visible = True 'si False la boucle ne boucle pas
        Application.ScreenUpdating = False
        
        
    'information de la feuille de travail
        Set Data = Sheets("Feuil4").Range("A1")
        Message = Sheets("Feuil4").Range("E5")
        
    'boucle sur les lignes de données
        Records = Application.CountA(Sheets("Feuil4").Range("A:A"))
        For i = 1 To Records
        
    'mise à jour barre de progression
            Application.StatusBar = "Processing record" & i
            
    'assigne la valeur courante aux variables
            Region = Data.Offset(i - 1, 0).Value
            SalesAmt = Format(Data.Offset(i - 1, 2).Value, "#,000")
            SalesNum = Data.Offset(i - 1, 1).Value
            
    'détermine le nom du fichier
            SaveAsName = ThisWorkbook.Path & "\" & Region & ".doc"
            
    'envoie des commandes à word
    'On Error Resume Next
               
    
           With WordApp
           .Documents.Add
           
                With .Selection
                    .Font.Size = 14
                    .Font.Bold = True
                    .ParagraphFormat.Alignment = 1
                    .TypeText Text:="C O U C O U"
                    .TypeParagraph
                    .TypeParagraph
                    .Font.Size = 12
                    .ParagraphFormat.Alignment = 0
                    .Font.Bold = False
                    .TypeText Text:="Date:" & vbTab & _
                    Format(Date, "mmmm d, yyyy")
                    .TypeParagraph
                    .TypeText Text:="To:" & vbTab & Region & _
                    "Manager"
                    .TypeParagraph
                    .TypeText Text:="From:" & vbTab & _
                    Application.UserName
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Message
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Text:="Units Sold:" & vbTab & _
                    SalesNum
                    .TypeParagraph
                    .TypeText Text:="Amount:" & vbTab & _
                    Format(SalesAmt, "$#,##0")
                End With
            .ActiveDocument.SaveAs Filename:=SaveAsName
                .ActiveWindow.Close
                End With
            
        Next i
        
        'tue l'objet
        WordApp.Quit
        Set WordApp = Nothing
        
        'reset
        Application.StatusBar = ""
        MsgBox Records & " memos ont été créés et sauvegardés dans " & _
        ThisWorkbook.Path
    End Sub
    Je rappelle que ce code est, à la base, tiré d'un livre Excel 2000

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    A tester en déclarant ta variable application word en type object

    En faisant cela plus besoin de declarer la référence Word

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim appWord As Object
     
    Set appWord = CreateObject("Word.Application")
     
    Set WordApp = New Word.Application
    dans mon cas, mettre visible a false fonctionne

  3. #3
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut
    tu veux dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim WordApp As Object
     
    Set WordApp = CreateObject("Word.Application")
     
    Set WordApp = New Word.Application
    ???

    je vais tester, merci.

  4. #4
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut
    Nop, le résultat est le même...je vois Word apparaître, rapidement certes (je n'ai que trois lignes) mais quand j'aurais une centaine de lignes à traiter, ce ne sera plus acceptable.
    Merci quand même.

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    je vois Word apparaître,
    N'as tu pas oublié de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.Visible = False

  6. #6
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut
    en effet ça allait pas se faire tout seul...

    Et bien non...j'obtiens la même erreur qu'avant (en gras dans le code).
    Je ne sais que faire...
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Sub MakeMemos()
    'crée des mémos dans word en utilisant l'automation
       
        Dim WordApp As Object
        Set WordApp = CreateObject("Word.Application")
        Set WordApp = New Word.Application
     
        
    'démarre word et crée un objet
        
        
        WordApp.Visible = False
        Application.ScreenUpdating = False
        
        
    'information de la feuille de travail
        Set Data = Sheets("Feuil4").Range("A1")
        Message = Sheets("Feuil4").Range("E5")
        
    'boucle sur les lignes de données
        Records = Application.CountA(Sheets("Feuil4").Range("A:A"))
        For i = 1 To Records
        
    'mise à jour barre de progression
            Application.StatusBar = "Processing record" & i
            
    'assigne la valeur courante aux variables
            Region = Data.Offset(i - 1, 0).Value
            SalesAmt = Format(Data.Offset(i - 1, 2).Value, "#,000")
            SalesNum = Data.Offset(i - 1, 1).Value
            
    'détermine le nom du fichier
            SaveAsName = ThisWorkbook.Path & "\" & Region & ".doc"
            
    'envoie des commandes à word
    'On Error Resume Next
               
    
           With WordApp
           .Documents.Add
           
                With .Selection
                    .Font.Size = 14
                    .Font.Bold = True
                    .ParagraphFormat.Alignment = 1
                    .TypeText Text:="C O U C O U"
                    .TypeParagraph
                    .TypeParagraph
                    .Font.Size = 12
                    .ParagraphFormat.Alignment = 0
                    .Font.Bold = False
                    .TypeText Text:="Date:" & vbTab & _
                    Format(Date, "mmmm d, yyyy")
                    .TypeParagraph
                    .TypeText Text:="To:" & vbTab & Region & _
                    "Manager"
                    .TypeParagraph
                    .TypeText Text:="From:" & vbTab & _
                    Application.UserName
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Message
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Text:="Units Sold:" & vbTab & _
                    SalesNum
                    .TypeParagraph
                    .TypeText Text:="Amount:" & vbTab & _
                    Format(SalesAmt, "$#,##0")
                End With
            .ActiveDocument.SaveAs Filename:=SaveAsName
                .ActiveWindow.Close
                End With
            
        Next i
        
        'tue l'objet
        WordApp.Quit
        Set WordApp = Nothing
        
        'reset
        Application.StatusBar = ""
        MsgBox Records & " memos ont été créés et sauvegardés dans " & _
        ThisWorkbook.Path
    End Sub
    je précise l'erreur
    Erreur d'Automation
    Echec de l'appel de procédure distante
    Kézako ???

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Sort de la boucle la ligne

    Car elle ferme Word

  8. #8
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut
    ça ne change rien ça ne fait que fermer la derniere fenêtre active mais visuellement c'est IDEM, en fait cette ligne ne sert même à rien car à la sortie de ma boucle je fais :
    ce qui tue l'application Windows.
    Le problème serait de savoir comment pouvoir écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WordApp.Visible = False
    sans que cela me produise l'erreur d'automation...
    Merci de ton soutien.

  9. #9
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    j'ai repris ton code en mettant en commentaire les lignes excel (pas utile pour le test de Word)

    Ce code fonctionne sans probleme sur mon poste et sans afficher Word

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    'crée des mémos dans word en utilisant l'automation
     
        Dim WordApp As Object
        Set WordApp = CreateObject("Word.Application")
     
     
     
    'démarre word et crée un objet
     
     
        WordApp.Visible = False
        Application.ScreenUpdating = False
     
     
    'information de la feuille de travail
    '    Set Data = Sheets("Feuil4").Range("A1")
    '    Message = Sheets("Feuil4").Range("E5")
    '
    ''boucle sur les lignes de données
    '    Records = Application.CountA(Sheets("Feuil4").Range("A:A"))
    '    For i = 1 To Records
    '
    ''mise à jour barre de progression
    '        Application.StatusBar = "Processing record" & i
    '
    ''assigne la valeur courante aux variables
    '        Region = Data.Offset(i - 1, 0).Value
    '        SalesAmt = Format(Data.Offset(i - 1, 2).Value, "#,000")
    '        SalesNum = Data.Offset(i - 1, 1).Value
    '
    ''détermine le nom du fichier
    '        SaveAsName = ThisWorkbook.Path & "\" & Region & ".doc"
     
    'envoie des commandes à word
    'On Error Resume Next
     
        For i = 1 To 2
     
     
           With WordApp
           .Documents.Add
     
                With .Selection
                    .Font.Size = 14
                    .Font.Bold = True
                    .ParagraphFormat.Alignment = 1
                    .TypeText Text:="C O U C O U"
                    .TypeParagraph
                    .TypeParagraph
                    .Font.Size = 12
                    .ParagraphFormat.Alignment = 0
                    .Font.Bold = False
                    .TypeText Text:="Date:" & vbTab & _
                    Format(Date, "mmmm d, yyyy")
                    .TypeParagraph
                    .TypeText Text:="To:" & vbTab & Region & _
                    "Manager"
                    .TypeParagraph
                    .TypeText Text:="From:" & vbTab & _
                    Application.UserName
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText "coucou"
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Text:="Units Sold:" & vbTab & _
                    SalesNum
                    .TypeParagraph
                    .TypeText Text:="Amount:" & vbTab & _
                    Format(SalesAmt, "$#,##0")
                End With
            .ActiveDocument.SaveAs Filename:="c:\test" & i & ".doc"
     
                End With
     
        Next i
     
        'tue l'objet
    '    WordApp.Quit
        Set WordApp = Nothing
     
        'reset
        Application.StatusBar = ""
        MsgBox Records & " memos ont été créés et sauvegardés dans " & _
        ThisWorkbook.Path

  10. #10
    Membre éclairé
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Par défaut
    Merci pour ta patience et ta compétence.
    Le code suivant est (enfin) fonctionnel:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    Sub MakeMemos()
    'crée des mémos dans word en utilisant l'automation
        Dim i As Integer
        Dim WordApp As Object
        Set WordApp = CreateObject("Word.Application")
        Set WordApp = New Word.Application
     
     
    'démarre word et crée un objet
        WordApp.Visible = False
        Application.ScreenUpdating = False
     
     
    'information de la feuille de travail
        Set Data = Sheets("Feuil4").Range("A1")
        Message = Sheets("Feuil4").Range("E5")
     
    'boucle sur les lignes de données
        Records = Application.CountA(Sheets("Feuil4").Range("A:A"))
        For i = 1 To Records
     
    'mise à jour barre de progression
            Application.StatusBar = "Processing record" & i
     
    'assigne la valeur courante aux variables
            Region = Data.Offset(i - 1, 0).Value
            SalesAmt = Format(Data.Offset(i - 1, 2).Value, "#,000")
            SalesNum = Data.Offset(i - 1, 1).Value
     
    'détermine le nom du fichier
            SaveAsName = ThisWorkbook.Path & "\" & Region & ".doc"
     
    'envoie des commandes à word
    'On Error Resume Next
            With WordApp
           .Documents.Add
                With .Selection
                    .Font.Size = 14
                    .Font.Bold = True
                    .ParagraphFormat.Alignment = 1
                    .TypeText Text:="C O U C O U"
                    .TypeParagraph
                    .TypeParagraph
                    .Font.Size = 12
                    .ParagraphFormat.Alignment = 0
                    .Font.Bold = False
                    .TypeText Text:="Date:" & vbTab & _
                    Format(Date, "mmmm d, yyyy")
                    .TypeParagraph
                    .TypeText Text:="To:" & vbTab & Region & _
                    "Manager"
                    .TypeParagraph
                    .TypeText Text:="From:" & vbTab & _
                    Application.UserName
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Message
                    .TypeParagraph
                    .TypeParagraph
                    .TypeText Text:="Units Sold:" & vbTab & _
                    SalesNum
                    .TypeParagraph
                    .TypeText Text:="Amount:" & vbTab & _
                    Format(SalesAmt, "$#,##0")
                End With
            .ActiveDocument.SaveAs Filename:=SaveAsName
                End With
        Next i
     
        'WordApp.ActiveWindow.Close
        'tue l'objet
        WordApp.Quit
     
        Set WordApp = Nothing
     
        'reset
        Application.StatusBar = ""
        MsgBox Records & " memos ont été créés et sauvegardés dans " & _
        ThisWorkbook.Path
     
    End Sub
    Donc word est bien invisible sauf que c'est illusoire car après exécution de ma procédure, Winword.exe reste actif dans mon gestionnaire de tâches....

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    vérifie que ce n'est pas une vieille instance car avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WordApp.Quit
    Set WordApp = Nothing
    il n'y a pas de raison qu'elle reste active

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 13h25

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