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 :

Utilisation de While Wend avec DoEvents


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Utilisation de While Wend avec DoEvents
    Bonjour,
    Je tourne en rond avec ce problème

    Code :

    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
    Sub   Blabla()
     
     Code blablabla
     
    Feuille_Source = ""
    Nom2 = Dir(nom1)       ' Nom1 contient le chemin + le nom du fichier
    Workbooks(nom2).activate
    While Feuille_Source = ""
    DoEvents
     Feuille_Source = ActiveWorkbook.ActiveSheet.Name
    Wend
     
     
    Code blablabla
     
    end sub
    Le but est :
    __ Ouvrir un classeur et l'activer . Cela est fait avant le While et fonctionne
    __ Sélectionner une feuille et quitter la boucle lorsque je clique sur l'onglet de la feuille

    Avec toutes les combinaisons que j'ai faites , cela se passe comme s'il n'y avait pas le DoEvents.
    J'ai évidemment dans Feuille_Source le nom de la feuille active à l'ouverture du classeur.
    Mais je voudrais la choisir
    Merci de votre aide

  2. #2
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Je cherche encore sur ce problème mais je perds espoir.
    Je vais certainement réorganiser mon programme pour atteindre mon objectif.
    C'est bizarre quand même qu'on ne puisse pas avoir une fonction qui permette de sélectionner une feuille sur le fichier ouvert dans une macro.
    La macro ne devant pas se poursuivre tant que la feuille n'est pas choisie
    Je vous remercie de votre aide

  3. #3
    Inactif  

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

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

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

    Le plus simple, c'est probablement de séparer la macro en deux. La première partie se rend au choix de la feuille.

    Ensuite, tu utilises un événement du classeur, dans le code du ThisWorkbook, (tu peux en essayer quelques uns et choisir celui qui convient le mieux), pour lancer la seconde macro.

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonsoir
    Voila ce que je veux faire :

    L'objectif est de copier une plage source vers une plage cible à partir d'un classeur source (classeur source et cible)
    - J'ouvre mon classeur Excel cible (avec un raccourci sur la bureau)
    - je lance une macro avec un bouton créé par le formulaire
    - Je sélectionne le classeur source. Là tout se passe bien.

    Mais je ne peux pas sélectionner la feuille que je veux traiter (il y en a dix)
    Le While DoEvents Wend ne semble pas approprié pour cette opération
    Merci pour vos réponses

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Bonjour ours-blond

    Il y a plusieurs possibilités, suivant la méthode d'appel de la feuille :
    Utiliser un test sur le nom de la feuille du classeur du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim wbk As Workbook
    Set wbk = Application.Worbooks![xxx.ext]                                           ' xxx.ext est le nom du classeur (y compris éventuellement don adresse
     
    For i = 1 to Sheets.count
        If wbk.Worksheets(Sheets.i).Name = "yyyy" then                    ' yyy est le nom de la feuille à ouvrir ou son numéro s'il est connu.
    ....                                                                                                    ' traitement
    Exit For 
     
    Next i
    ou un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Feuille As Worksheet
     
    For Each Feuille in wbk.Worksheets
        Test                                                                                    ' Test du nom et traitement
    Next
    Prévoir aussi un traitement des erreurs ou en sortie de boucle si la feuille est non trouvée.

    Si le nom de la feuille est fixe ou connu, faire un appel direct sur la feuille : wbk.Worksheets![yyy].Activate

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Byte                                                                                     'pour moins de 256 feuilles
    Do While wbk.Worksheets(Sheets.i).Name <> "yyy"                              'On suppose le classeur actif.
        i = i + 1
    Loop
    Pour ma part, j'utilise l'instruction suivante pour me positionner sur la dernière feuille d'un classeur à son ouverture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(Sheets.Count).Activate
    dans le module ThisWorkbook.

    Il est aussi possible de choisir la feuille dans une liste en utilisant Sheets.count.

    Amicalement.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour
    est ce que tu comprends au moins ce que tu fait avec ton code??? de cela rien est moins sur
    Feuille_Source = rien avant la boucle
    forcement des que tu va selectionner un sheets ta boucle va s'arreter puisque Feuille_Source contiendra un nom meme si c'est pas le bon sheets selectionné



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub   Blabla()
     
     Code blablabla
     
    Feuille_Source = ""
    Nom2 = Dir(nom1)       ' Nom1 contient le chemin + le nom du fichier
    Workbooks(nom2).activate
    While Feuille_Source = ""
    DoEvents
     Feuille_Source = ActiveWorkbook.ActiveSheet.Name
    Wend
    tu veux faire quoi exactement c'est pas bien clair ton truc ?

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    sans boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim pl As Range
        Set pl = Application.InputBox("Sélectionner une cellule de la feuille source", , , , , , , 8)
        MsgBox pl.Parent.Name
    eric

  8. #8
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,
    Je vous remercie de bien avoir voulu étudié mon problème.
    Je sais que l'exemple que j'ai joint ne fonctionne pas.
    Je vais essayer d'être plus clair sur le but de la procédure.

    1 j'ouvre un classeur et active celui-ci ' dans le blablabla cela fonctionne
    Note : C'est un classeur parmi beaucoup d'autres
    2 je voudrais sélectionner une feuille dans ce classeur pour traitement
    Les feuilles de ces classeurs sont différentes et évolueront au fil du temps (en fait ce sont des compositions de portefeuilles boursiers dont les feuilles contiennent les historiques des actions).
    3 le classeur alors actif, je voudrais sélectionner une feuille et capter son nom pour le traitement des données de cette feuille

    C'est pourquoi j'interrompt la macro pour choisir cette feuille et que la variable Feuille_Source ="" puisque cela doit être la condition pour sortir de la boucle lorsqu'elle est différente de "".
    J'espérais que le DoEvents dans la boucle While me permettait ce choix mais ça ne marche pas .
    Le DoEvents est complètement ignoré et ne donne pas la main au système tel que décrit dans l'aide en ligne. J'aurais alors accès au classeur pour un choix manuel (clic de souris sur l'onglet feuille).
    Je n'ai pas compris la véritable mission de DoEvents certainement.

    Bien sûr dans mon exemple, je sors de la boucle While car Feuille-Source prend le nom de la feuille active du classeur puisque DOEvents ne me permet pas de choisir celle-ci.

    En espérant avoir été plus clair je vous remercie de vos réponses

  9. #9
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bon, on va voir si j'ai bien compris.
    Vous voudriez à l'ouverture du classeur, choisir une feuille particulière, mais qui n'est peut-être pas forcément la même. Vu que le choix est inclus au milieu d'un code, je pense que le mieux serait au moment du choix, un UF avec une liste qui chargerait les noms de toutes les feuilles grace à une boucle, à l'initialisation du UF. Y a plus qu'a choisir, ce qui activera la feuille, et fermer Le UF. Et le Blablabla continue.
    Cordialement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub   Blabla()
     
     Code blablabla
     
    Feuille_Source = ""
    Nom2 = Dir(nom1)       ' Nom1 contient le chemin + le nom du fichier
    Workbooks(nom2).activate
    Userform1.show
    Worksheets("????").activate 
     
     
    Code blablabla
     
    end sub

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Re,

    et ma proposition du post #7 ?
    eric

  11. #11
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    J'ai fais une petite pose "Hors VBA " ce week end avec des amis et je découvre vos réponses aujourd'hui.
    Il y a de nouvelles pistes que je vais étudier ce soir et vous dirai juste après les résultats.
    A ce soir et merci de vos réponses

  12. #12
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    bonjour,
    Bon bein je n'ai pas pû attendre pour au moins tester une solution.
    J'ai mis en œuvre la proposition d'ERIIC.
    Cela fonctionne d'ors et déjà pour me permettre de mettre au point la suite de mon code.
    Bon pour le moment, je suis obligé de sélectionner une cellule sans cela j'une erreur sur la ligne (pointée en jaune)
    Alors je sélectionne la feuille puis la cellule et cela me retourne le Nom de la feuille sélectionnée.
    C'est mon objectif.

    Je vais tester la solution de Transitoire ce soir . L'approche m'intéresse car à terme je devrai passer par une UserForme pour accéder à plus d'action.
    Mais je veux avancer doucement car ne maitrisant pas le language je valide chaque étape et construit l'architecture de l'appli en fonction de tout ça.
    J'ai bien une structure globale mais elle est parfois bousculée par les obligations du language.
    Et puis il y a des fois où je ne sais pas choisir si je dois passer par macro, ou mettre des fonctions standards directement dans les cellules.
    Du coup la solution ne correspondra plus au titre du post initial.

    Merci à vous et au site qui a des intervenants compétents et des tutos excellents

  13. #13
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,
    Alors plutôt que faire mon jardin, j'ai exploité la solution de Eriic.
    Super j'ai pû continué à mettre au point le code derrière qui était en dormance car il était sans variables.
    Merci Eriic (si j'ai pas de patates nouvelles ce sera de ta faute )
    Alors là bon après midi (pour moi) , mon application je vous en dirai un mot car y a de la suite et mes connaissances en VBA je les apprends avec vous et vos tutos.


    Bein oui je vais aborder le sujet des UF.


    Ca c'est la solution Transitoire . Je vais y venir obligatoirement. Mais c'est l'organisation d'une UF qui me chagrine car elle est censée contenir beaucoup de choses.
    Elle doit être ergonomique et intuitive.
    Mais je vais y passer .
    Bien le merci à tous et je vais considérer le post comme résolu

  14. #14
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonsoir, les User Form c'est un monde nouveau qui s'ouvre pour vous.
    J'ai créé un programme de facturation/Devis/Comptabilité/Gestion.

    Zone de dialogue qui se modifie dans les formes suivant les choix
    Nom : Capture d’écran 2018-03-26 à 21.47.38.png
Affichages : 715
Taille : 21,6 Ko Nom : Capture d’écran 2018-03-26 à 21.47.52.png
Affichages : 737
Taille : 29,7 Ko
    Nom : Capture d’écran 2018-03-26 à 21.48.04.png
Affichages : 709
Taille : 46,2 Ko

    Zones de dialogue qui se succèdent
    Nom : Capture d’écran 2018-03-26 à 21.48.32.png
Affichages : 695
Taille : 89,6 Ko
    Nom : Capture d’écran 2018-03-26 à 21.48.49.png
Affichages : 710
Taille : 31,9 Ko Nom : Capture d’écran 2018-03-26 à 21.49.40.png
Affichages : 672
Taille : 27,7 Ko

    C'est fabuleusement pratique et joli, ça fait professionnel.
    Bon travail! Comme disait le vieux laboureur à ses enfants, "C'est le fond qui manque le moins"

  15. #15
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Oui c'est sûr que les UF rendent ergonomique une application.
    Mais je dois pour le moment donner un certain niveau à mon application.
    Son objet est globalement de simuler des portefeuilles boursiers avec application des indicateurs d'analyse technique.
    Ceci avec les historiques de n'importe quelle valeur de l'Euronext Paris.
    Ensuite faire une synthèse des résultats et faire un nouvel indicateur issu de la synthèse.
    Alors j'ai du boulot surtout que je dois surveiller un portefeuille réel

    En gros mais c'est à réfléchir
    Mon UF (ou plusieurs) devra comporter :
    - Accès classeur pilote
    - Accès classeurs portefeuille
    - Accès classeur Paramètres
    - Accès classeurs Historiques
    - Accès aux autres UF par une barre menu
    - etc

    Mais j'ouvrirai un nouveau post sur le sujet quand je serai dans ce niveau et je pense de nouveaux problèmes apparaitrons.
    Je vais quand même essayer ta proposition d'ouvrir une UF que j'appellerai dynamique car cela peut se substituer avantageusement à un MsgBox

    Vous êtes une mine d'or sur ce site et pourvu qu'on s'intéresse un peu à tous les posts il y a une mine d'information.
    Je ne participe pas encore aux réponses mais cela viendra un jour j'espère.
    Pour le moment je préfère apprendre et ne pas être un mauvais professeur

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

Discussions similaires

  1. While et foreach : utilisation foreach sans while et avec while
    Par tonton.odilon dans le forum Langage
    Réponses: 10
    Dernier message: 06/10/2015, 21h24
  2. [XL-2007] Boucle While Wend avec pour condition le contenu d'une cellule d'un autre classeur
    Par Feldenn dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/10/2015, 15h21
  3. Ecrire les mois avec while . . . wend
    Par fapinem dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/06/2014, 22h03
  4. Problème boucle WHILE/WEnd avec plusieurs conditions
    Par Romanaxx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/12/2013, 15h00
  5. erreur 91 sur boucle WHILE WEND avec recordset
    Par forzaxelah dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/02/2012, 21h54

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