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 :

Exécution d'une macro seulement lorsque la page est fini d'être affichée


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut Exécution d'une macro seulement lorsque la page est fini d'être affichée
    Bonjour, j'ai un script dans une page web qui ouvre un objet Excel
    Puits ajoute dans une cellule une valeur.
    A ce moment la il y a une macro (Workbook_SheetChange) dans le Excel qui complète sertin champ an fonction de cette cellule.
    Jusqu’a présent je remplissais (dans Workbook_Open()) dans une listebox en fonction d'une valeur charger précédemment (depui une bdd)

    sa sa marche très bien, mais le problème arrive quand je veut sélectionné une valeur par défaut de ma listebox, j'ai fais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
      While (SQLResult.EOF <> True)
            temp = temp + 1
                Sheets(1).Shapes("Drop Down 51").ControlFormat.AddItem RTrim(SQLResult.Fields("projet_code")) + " - " + RTrim(SQLResult.Fields("projet_intitule"))
                            'capture l'index du numéro de projet
                            If (RTrim(SQLResult.Fields("projet_code")) =Sheets(1).Cells(9, 1) ) Then
                                indexItemASelectionner = temp
                            End If
                SQLResult.MoveNext
            Wend
     
            ' défini l'index de la listebox
             Sheets(1).Shapes("Drop Down 51").ControlFormat.Value = (indexItemASelectionner - 1)
    ...
    sauf que a la première exécution de ma macro le Workbook_Open() ce lance bien, mais Sheets(1).Cells(9, 1) n'est pas encore renseigné donc null ( le classeur n'est pas encore ouvert)

    Par contre, une foi le classeur ouvert, ci je lance manuellement ma macro, sa marche impeccable !
    Comment je peu faire, avez vous une idée?

  2. #2
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 392
    Points : 395
    Points
    395
    Par défaut
    N'as-tu pas la possibilité d'indiquer au fichier excel que ta page est chargée ?
    Le plus simple serait peut-être de lancer ta macro jusqu'à ce qu'elle trouve la valeur (je sais c'est radical mais bon, je vois pas trop autre chose là tout de suite).

    Exemple :

    1 - Tu lances ta page web.
    2 - Ton script lance la macro
    3 - Tu vérifie dans ton script (si c'est possible) si la cellule de ton fichier <toto> est à "ok"
    4 - Tant qu'elle n'est pas ok, tu lances ta macro
    5 - Quand ta macro s'execute correctement, elle écrit "ok" dans la cellule <toto>

    C'est une trâme qui demande certainement de l'optimisation.
    Je ne vois pas trop comment tu pourrais t'en sortir autrement...

  3. #3
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut ce que j'ai fai
    Bonjour, j'ai réussi, ce que j'ai trouvé comme solution, c'est qu’à la fin du chargement du document (et donc que tout les camps sont remplit) je lance une seconde macro, celle ci va déplacer la cellule sélectionné, cette événement ce produit uniquement quand le document est fini d'aitre afficher. Donc à ce moment la je lance ma macro qui sélectionne l'item dans la listebox qui est cette foi fini d’aitre remplit et est afficher.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/05/2014, 17h00
  2. [XL-2010] Exécuter une macro seulement dans les feuilles nommées par des nombres.
    Par baptou42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2014, 16h40
  3. Réponses: 1
    Dernier message: 26/08/2007, 20h07
  4. [SQL] Éxécuter une requête seulement lorsque le tableau est clické
    Par tyarak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/07/2006, 23h15
  5. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 19h29

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