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'activation de classeur [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut Problème d'activation de classeur
    Bonjour,

    Ma question va sûrement vous paraître triviale, et pourtant je n'arrive pas à me dépêtrer de ce petit problème.

    Contexte :
    Je crée un classeur temporaire contenant une des feuilles de mon classeur initial, et je l'envoie en pièce jointe en utilisant la fonction SendMail.
    Puis, je souhaite retourner sur mon classeur initial et afficher un message de confirmation de l'envoi.
    Sauf qu'après avoir envoyé le mail, et malgré mes efforts, je n'arrive pas à faire en sorte que le classeur initial s'affiche!
    Ce n'est pas très grave, je peux tjrs cliquer sur l'icône dans la barre des tâches pour revenir dessus, mais j'aimerais bien que ça puisse être fait automatiquement!

    Code (extrait) :
    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
     
    ' Copie de la feuille active du classeur initial dans un nouveau classeur.
    ActiveSheet.Copy
     
    ' Renommage du classeur nouvellement créé (classeur tampon) pour envoi par mail.
    ActiveWorkbook.SaveAs Filename:=NomClasseurTampon
     
    ' Envoi du classeur tampon par mail.
    ActiveWorkbook.SendMail _
    Recipients:="adresseDestinataire", _
    Subject:=NomClasseurTampon
     
    ' Fermeture du classeur tampon, sans sauvegarder.
    ActiveWorkbook.Close SaveChanges:=False
     
    ' Suppression du classeur tampon.
    Kill "C:\Users\PC\Documents\" & NomClasseurTampon & ".xls"
     
    ' Retour au classeur de départ.
    Workbook("Nom du classeur initial.xls").Activate
    ActiveWorkbook.Sheets("blabla").Activate
     
    ' Message de confirmation d'envoi du mail.
    MsgBox "Message bien envoyé."
    Voilà, j'ai essayé plusieurs variantes pour le Workbook("Nom du classeur initial.xls").Activate, mais rien ne marche, le classeur ne s'affiche jamais au premier-plan.

    Si vous avez une idée, je vous remercie d'avance de m'en faire part.

    Merci!

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Je ne comprends pas car si tu ouvres un nouveau classeur puis le fermes, tu retombes automatiquement sur le 1er sans avoir à l'activer.

    Les messages partent-ils bien : je crains que ce soit plutôt cette partie qui arrête la macro.

    Chez moi outlook attend une confirmation d'accès mais si je la donne, le bout de code (une fois corrigées deux erreurs : un s manquant à Workbook et les guillemets entourant la variable destinataire) marche sans problème.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Par défaut
    Essaie cela :


  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Suggestion 1 : je pense en effet que mon classeur initial est actif, mais lorsque je lance la macro, je me retrouve sur mon logiciel de messagerie, et je suis obligé de cliquer sur le classeur en question dans la barre des tâches pour qu'il s'affiche et que la MsgBox apparaisse...
    Oui sinon l'envoi du mail avec le classeur tampon en PJ fonctionne parfaitement. Tu parlais des guillemets autour de l'adresse destinataire : c'est parce qu'en réalité dans mon code, il ne s'agit pas d'une variable, je l'ai codée en dur, d'où les guillemets (j'aurais dû les enlever pour l'exemple, c'est vrai).

    Suggestion 2 : je viens d'essayer, ça ne change rien.

    Merci en tout cas pour vos réponses! J'apprécie!

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    As-tu essayé en pas à pas ou en mettant un point d'arrêt ?

    Cela vient sans doute d'un problème de synchro entre la messagerie et Excel.

    Le message de fin s'affiche t-il ?

    Quelle messagerie utilises-tu ?

    Le message me demandant confirmation d'envoi s'affiche au 1er plan sans que j'aie besoin d'activer la fenêtre messagerie.

    J'ai oublié de préciser que j'ai mis en commentaires les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Workbooks("Nom du classeur initial.xls").Activate
    'ActiveWorkbook.Sheets("blabla").Activate
    car dans mon test elles ne servent pas : je reviens automatiquement à mon classeur initial.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    En fait je ne pense pas qu'il s'agisse d'un problème d'activation du classeur : le classeur initial devient en effet actif à partir du moment où je ferme l'autre... C'est plutôt un souci "d'affichage au premier plan" du classeur. Quelquesoient les autres fenêtres ouvertes sur mon bureau (internet, explorateur etc.), le classeur s'affiche derrière... Grrr

    Il n'y a pas une commande pour forcer l'affichage au premier plan d'un classeur?

    Ok, donc en fait lorsque je lance la macro, un message s'affiche me demandant de confirmer l'envoi, ce que je fais. Donc pas de souci, je reçois bien le mail (le destinataire pour les test, c'est moi, normal )

    Comme messagerie, j'ai Windows Live Mail, mais la plupart du temps, les utilisateurs de la macro auront outlook.

    Quand la macro se termine, je me retrouve sur une autre fenêtre ouverte du le bureau (par exemple internet explorer), et cette fenêtre "clignote" légèrement (comme si elle essayait de se mettre à l'arrière plan mais pas moyen).

    Je suis donc "obligé" (même si ce n'est pas un drame en soi) de recliquer sur mon classeur excel initial dans la barre des tâches pour y retourner, et seulement à ce moment là, la MsgBox de confirmation d'envoi s'affiche.

    Voilà! Je me dis qu'il peut également s'agir du fait que je sois sous Windows 7, avec un Excel 2000... Je sais, pas top, mais je n'ai pas choisi...

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour à tou(te)s

    enregistres une macro automatique pour tester et tu cliques d'un classeur à l'autre, arretes l'enregistrement de ta macro et regardes son code, tu comprendrs qu'il faut passer par "windows......
    j'espère être clair

    Bonne journée

    je vais un peu plus loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Nom du classeur initial.xls").Activate
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Bonjour,

    Oui effectivement j'ai pu voir ça sur une macro que j'ai enregistrée...
    Après essai, c'est pareil.

    Quoiqu'il en soit, ce n'est pas très grave. J'aime bien essayer de faire les choses proprement, mais tant pis, ça restera comme ça...

    Merci pour toutes vos réponses.

    Edit : Oui 78Chris c'est exactement ça. Et non ce n'est pas moi qui ouvre la fenêtre pour vérifier. Mais alors, comment donner le focus Windows à mon classeur Excel? Héhé, that's the question.

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut
    Essai comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Sub autreessai()
    '...
    'Pour afficher la fenetre excel
    ShowWindow Application.hwnd, 5
     
    End Sub
    Je regarde autre chose car il existe une autre api pour mettre en 1er plan.

    [Edit]
    La function que je recherchais etait SetWindowPos, mais ni l'une ni l'autre ne semble être efficace, je me souvient les avoir déjà utilisé sur visual basic, mais l'affichage de application.hwnd ne semble pas lui plaire... désolé
    [/
    edit]
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Par défaut
    Pas de souci...

    Merci d'avoir essayé!

    Merci à tous et à bientôt.

  11. #11
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Re
    En reflechissant un peu je me suis dis que application.hwnd devait retourner le handle de l'application et non pas de la fenetre.
    La méthode est donc la suivante, mais ca ne fonctionne pas très bien

    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
    Declare Function ShowWindow Lib "User32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Declare Function ShowWindowAsync Lib "User32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
    Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Sub autreessai()
    Dim appHandle As Long
    '...
    If Application.Wait(Now + TimeValue("0:00:03")) Then
    'Pour afficher la fenetre excel
    appHandle = FindWindow(vbNullString, Application.Caption)
    ShowWindow appHandle, 5
    End If
     
    End Sub
     
     
    Sub test()
    Dim appHandle As Long
    '...
    If Application.Wait(Now + TimeValue("0:00:03")) Then
    'Pour afficher la fenetre excel (mettre au 1er plan
    appHandle = FindWindow(vbNullString, Application.Caption)
    SetWindowPos appHandle, -1, 0, 0, 0, 0, &H40 + &H1 + &H2
    End If
     
    End Sub
    Note: la tempo est juste la pour permettre d'avoir le temps d'activer une autre fenêtre, ça vaut peut être le coup de la virer et de mettre le code dans ton fichier, histoire d'être sur que la tempo ne pose pas de soucis.
    Je met quand même le code si quelque veux regarder de plus près, je n'ai pas trop le temps ce weekend.
    Il faudrait également remettre la fenêtre en NoTopMost (mais a quel moment )

    Bon courage
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. problème d'activation du diskperf (Compteurs de Perfomances)
    Par zicoP dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 06/10/2006, 14h53
  2. Problème d'activation JavaScript
    Par Souls Destroyer dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2006, 19h42
  3. [Win XP Pro]Problème d'activation
    Par Le Pharaon dans le forum Windows XP
    Réponses: 3
    Dernier message: 07/06/2006, 19h48
  4. [VBA-E] activer un classeur et rendre une page visible
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2006, 14h34
  5. ORA-01190 Problème après Activation BDD Standby
    Par Sergio_free dans le forum Oracle
    Réponses: 2
    Dernier message: 23/10/2005, 00h38

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