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 :

Problème d'exécution de macro à partir d'un bouton personnalisé d'un ruban personnalisé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Problème d'exécution de macro à partir d'un bouton personnalisé d'un ruban personnalisé
    Voici mon problème: j'ai créé deux macros dans Excel 2010, une qui va exporter dans des fichiers Word les commentaires du classeur Excel ouvert, une autre qui les réimporte par la suite. Les deux macros fonctionnent très bien quand je les appelle depuis la fenêtre Macros, ou encore directement dans VBE.

    Là où ça casse, c'est depuis qu'il m'a pris l'idée extravagante de créer un onglet personnalisé, et des boutons personnalisés, le tout dans un complément Excel. Avec Custom UI Editor, pas de problème, j'ai pu faire tout ça sans souci, et j'ai bien mon nouvel onglet à l'ouverture d'Excel, avec les boutons que j'ai créés, et cliquer dessus lance bien mes macros. Sauf que: elles ne font plus ce qu'elles sont censé faire.

    Pour l'instant, j'ai vu cela avec la deuxième macro (celle qui réimporte les commentaires), je n'ai pas testé la première dans ces conditions. Mais le fait est là: la moitié des instructions de la macro sont purement et simplement ignorées. 90% des commentaires à importer ne le sont pas, sans aucune explication pourquoi certains le sont, j'ai fait des tests en ajoutant des boucles de "freinage", elles sont ignorées, tout comme les sleeps, j'ai mis en place un log, il n'est pas enregistré... Et si je lance la macro directement, pas de souci, tout se passe normalement.

    Donc ma question: quelle est donc la différence fondamentale entre un appel de macro direct (par la fenêtre Macros ou VBE) et par un bouton personnalisé dans un complément, qui fait qu'une macro fonctionne dans le premier cas, et pas dans l'autre? Surtout que je n'ai aucun message d'erreur, rien, juste ma macro qui fait rien ou presque...

    A tout hasard, je mets mon code ci-dessous, mais je ne pense pas que le problème soit là, je pencherais plutôt sur un paramètre qui m'échappe.

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Sub ImportCommentsFromWord(control As IRibbonControl)
     
    Dim xComment As Comment
    Dim xSheet As Worksheet
    Dim wApp As Object
     
    'Opens Word if not already open
    On Error Resume Next
    Set wApp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
    Err.Clear
    Set wApp = CreateObject("Word.Application")
    End If
     
    wApp.Visible = False
     
    For Each xSheet In ActiveWorkbook.Worksheets
     
        'Activates each sheet one after another
        xSheet.Activate
        sName = xSheet.Name
        expname = Application.ActiveWorkbook.Path + "\" + sName + ".docx"
     
        'Checks if there are comments in active sheet
        For Each xComment In xSheet.Comments
            CommsInSheet = 1
        Next
     
        If CommsInSheet = 1 Then
     
            'Opens the translated document to import comments into the sheet
            wApp.Documents.Open (expname)
            wApp.Selection.ClearFormatting
            wApp.Selection.Find.MatchWildcards = False
            wApp.Selection.WholeStory
            wApp.Selection.MoveLeft
            FileEnd = 0
            logcoms = logcoms + expname + Chr(10)
     
            'Imports comments until end of file is reached
            While FileEnd = 0
     
                'Locates the next cell number
                wApp.Selection.ExtendMode = True
                wApp.Selection.MoveRight
                With wApp.Selection.Find
                    .Text = "^l"
                End With
                wApp.Selection.Find.Execute
                DestCell = Mid(wApp.Selection.Text, 2, Len(wApp.Selection.Text) - 2)
     
                'Locates the corresponding comment
                wApp.Selection.ExtendMode = False
                wApp.Selection.MoveRight
                wApp.Selection.ExtendMode = True
                With wApp.Selection.Find
                    .Text = "^l"
                End With
                wApp.Selection.Find.Execute
                wApp.Selection.ExtendMode = False
                DestComm = Left(wApp.Selection.Text, Len(wApp.Selection.Text) - 1)
     
                'Cleans the formatting of the comment
                wApp.Selection.MoveRight
                wApp.Selection.MoveLeft
                wApp.Documents.Add DocumentType:=0
                wApp.Selection.Text = DestComm
                With wApp.Selection.Find
                    .Text = "^p"
                    .Replacement.Text = Chr(10)
                End With
                wApp.Selection.Find.Execute Replace:=wdReplaceAll
                wApp.Selection.WholeStory
                DestComm = Left(wApp.Selection.Text, Len(wApp.Selection.Text) - 1)
                wApp.ActiveDocument.Close savechanges:=False
     
                'Tests if it was the last comment
                If Right(DestComm, 11) = "END_OF_FILE" Then
                    DestComm = Left(DestComm, Len(DestComm) - 11)
                    FileEnd = 1
                End If
     
                'Imports the comment
                xSheet.Range(DestCell).Comment.Text Text:=DestComm
                logcoms = logcoms + DestCell + Chr(10) + DestComm + Chr(10)
            Wend
     
            'Closes the Word document
            wApp.ActiveDocument.Close savechanges:=False
     
        End If
     
        CommsInSheet = 0
     
    Next
     
    wApp.Documents.Add
    wApp.Selection = logcoms
    wApp.ActiveDocument.SaveAs Filename:=Application.ActiveWorkbook.Path + ".txt", Format:=wdFormatText
    wApp.Visible = True
    Set wApp = Nothing
     
    End Sub
    --------
    Edit: modifié le titre pour être plus clair

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Est-ce que tu peux mettre un bouton des contrôles ActiveX sur une feuille ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je ne suis pas certain de comprendre ce que tu demandes, mais au cas où il s'agirait du code xml pour l'ajout de l'onglet perso et des boutons persos, le voici:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    	<ribbon>
    		<tabs>
    			<tab id="customTab" label="MONONGLET">
    				<group id="customGroup" label="Mon groupe">
    					<button id="customButton1" label="ExportCommentsToWord" size="large" onAction="Macros.xlam!ExportCommentsToWord" image="excel2word" />
    					<button id="customButton2" label="ImportCommentsFromWord" size="large" onAction="Macros.xlam!ExportCommentsToWord" image="word2excel" />
    					<button id="customButton3" label="ImportIMGFromWord" size="large" onAction="Macros.xlam!ImportIMGFromWord.ImportIMGFromWord" image="img2excel" />
    				</group>
    			</tab>
    		</tabs>
    	</ribbon>
    </customUI>

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Non, ma question est toute simple. Sur une feuille, onglet Développeur, Insérer, Contrôles ActiveX, choix bouton (ou autre). Est-ce que tu peux le faire ou est-ce que tu as un message d'erreur ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Ah ok! Oui, aucun problème à ce niveau, ça s'insère direct, sans message d'erreur.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Et si tu mets un point d'arrêt en face de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ImportCommentsFromWord(control As IRibbonControl)
    et que tu exécutes ligne à ligne, tu ne vois pas ce qui se passe ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    C'est l'un des soucis: quand je lance la macro depuis le bouton, il ignore aussi les points d'arrêt, donc pas moyen d'exécuter pas à pas pour voir ce qui fonctionne mal.

    Le comportement normal de la macro, c'est:
    - scanner les feuilles une à une pour voir si elles ont des commentaires
    - si la feuille en cours en a, ouvrir au même emplacement le fichier docx du même nom que la feuille
    - scanner le docx pour chaque commentaire modifié qu'il contient, et pour chaque commentaire, créer un doc temporaire pour nettoyer le format, avant de le réimporter dans Excel
    - une fois tous les commentaires du docx importés, le fermer, et passer à la feuille suivante
    - une fois terminé, créer un log de tout ce qui a été importé et où dans Word

    Quand je lance la macro directement, c'est bien ce qui se passe. Par contre, quand je lance depuis le bouton, ça donne plutôt (de ce que je peux voir):
    - scanner les feuilles une à une pour voir si elles ont des commentaires
    - aucun doc n'est ouvert
    - aucun doc n'est scanné, puisqu'aucun n'est ouvert, mais des docs temporaires sont quand même créés, et bien entendu, rien n'est importé dans Excel
    - ça passe bien à la feuille suivante
    - aucun log n'est créé

    Je viens de faire un essai, avec une petite ligne de code avant l'ouverture du doc, pour afficher une msgbox avec le nom du fichier qui va s'ouvrir dans Word: là encore, c'est bien ce qui se produit en lançant la macro directement, mais depuis le bouton, aucune msgbox ne s'affiche.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je suis loin d'être un pro des macros dans le ruban. Tu devrais ouvrir une nouvelle discussion en spécifiant dans le sujet qu'il s'agit d'une macro du ruban.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bon, au final, désolé de t'avoir fait perdre ton temps, le problème venait du code xml pour le ruban personnalisé: le bouton appelait la mauvaise macro, donc forcément, ça marchait pas...

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

Discussions similaires

  1. [XL-2010] Problème d'exécution de macro sous 2010 et 2013
    Par asimonnet dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2013, 15h26
  2. [XL-2010] Problème d'exécution de macros
    Par controle-cm dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/12/2012, 07h11
  3. [OL-2003] Exécuter une macro à partir d'un script
    Par Dailyplanet dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 25/09/2009, 15h14
  4. Problème d'exécution de macro
    Par faruedde dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2008, 22h24
  5. Réponses: 3
    Dernier message: 21/07/2008, 16h15

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