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 avec les keys dans un petit programme [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #21
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    Et de bon matin :
    La seule observation de ce qui se passe lorsque, entré dans une cellule, on commence à y frapper du texte t'aurait permis, sans aucun test, de comprendre ce qui se passe alors (et ce : que ce soit en mode création ou en mode exécution) --->>
    Regarde tout simplement ce qui se passe dans ton ruban
    passe ensuite à une autre cellule (sans rien frapper) et observe à nouveau les onglets de ton ruban.
    Et tu comprendras ce que fait le "patron" Excel (il bloque tout ce qui le gênerait).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  2. #22
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    merci pour ces éléments de réponses un peu subtils effectivement, et sur lesquels on ne trouve à vrai dire pas beaucoup de documentation en ligne

    cela dit cela ne résoud pas vraiment le problème


    par exemple j'ai essayé les deux portions de code suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
       deb = Timer
       Range("A1") = "début"
       While Timer - deb < 5
          DoEvents
       Wend
       MsgBox "fini"
       Range("A1") = "fini"
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test2()
       deb = Timer
       Range("A1") = "début"
       While Timer - deb < 5
          DoEvents
       Wend
       Range("A1") = "fini"
       MsgBox "fini"
    End Sub

    NB : la seule différence est que j'ai inversé les deux dernières lignes
    par ailleurs je préfère éviter les macros évenementielles

    ce que j'ai constaté c'est que dans le premier exemple j'ai bien la msgbox qui s'affiche par contre la cellule A1 reste sur début et n'affichera jamais fin...
    ensuite dans le deuxième exemple, les instructions concernant la cellule A1 ou la msgbox ne sont pas executées

    donc déjà la première question que je me pose, c'est est ce que ça fait ça chez vous, et pourquoi VBA ne reprend pas la main définitivement, c'est à dire qu'il va cesser d'executer un certain nombre d'instructions, et pas certaines autres... cela induit évidemment un comportement éminement erratique des programmes et je trouve ça évidemment super dangereux - l'absence de bug vba peut laisser à penser que le programme s'est bien executé proprement, d'autant plus que, selon l'architecture du programme, certaines instructions peuvent s'executer et d'autres non...

    si le programme était vraiment suspendu ça m'irait très bien mais ce n'est pas ce qui se passe. La boucle wend continue de tourner alors que je suis "entré" dans la cellule, la msgbox vient bien signaler la sortie de boucle, sauf quand une instruction affectant Excel se situe avant (cf mon exemple2) . Idem avec une boucle for, il suffit de mettre un debug.print pour s'en rendre compte.. évidemment cela est facilité par le doevents, sans lequel VBA rechignerait à donner la main

    du coup de ce que je comprends il n'y a rien à faire, sauf avoir à l'esprit cette anomalie de Excel/VBA. Peut être avec un sendkeys Echap afin de forcer la sortie de cellule ?

    Gorzyne

  3. #23
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    sauf avoir à l'esprit cette anomalie de Excel/VBA
    Il ne s'agit pas d'une "anomalie" du tout, mais d'une nécessité.
    Et une autre fois : un tableur est un tableur
    Il te faut comprendre ceci :
    1) Excel gère ses calculs dans un fil distinct de celui de VBA
    2) VBA peut passer toutes les instructions qu'il veut à Exce. Excel ne les "recevra" et "exécutera" que s'il en est à l'écoute et peut les accepter. Et si tel n'est pas le cas, il les ignore royalement. Et comme il est dans son fil et que VBA n'y est pas, VBA ignore ce qu'a décidé Excel.
    Ne pas confondre agir sur constat (ce que fait VBA) et avoir la maîtrise de ce qui est fait ailleurs
    Bref ...
    Quant à ton problème de départ -->> je te l'ai déjà dit --->> utilise donc application.Onkey.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #24
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    désolé mais je partage pas ton point de vue

    un programme qui n'execute pas ce pour quoi il est conçu, sans informer l'utilisateur que l'execution n'a pas eu lieu correctement, c'est un problème

    de plus, si une simple touche clavier suffit à interrompre le programme, c'est suffisament anodin comme action et grave comme conséquence

    pour la question de application.onkey, j'ai bien noté mais ce n'est pas le sujet, le programme s'interrompt qu'on soit à l'écoute ou non des frappes claviers, c'est anecdotique maintenant

    Gorz

  5. #25
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    Rhooooo ...
    1) VBA n'est pas l'application Excel
    Et l'appui sur une touche alors que l'on est dans une cellule n'interrompt nullement Excel.
    2) je perds là vraiment mon temps (et toi avec)
    3) si tu as des réclamations que tu estimes justifiées --->> Microsoft
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #26
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    je n'ai pas dit que l'appui sur une touche interrompait Excel mais interrompait le programme VBA, définitivement.
    J'ai mis le bout de code
    si ça marche bien jusqu'au bout chez toi, alors ça vient de mon poste, sinon il faut admettre qu'il y a un problème

    quant aux réclamations auprès de Microsoft, ce n'est pas les seules anomalies, par exemple on peut penser au collage simple/collage spécial qui se comporte différement en cas de données filtrées: collage simple va affecter uniquement les lignes visibles, par contre collage spécial va affecter les lignes cachées également, tu dois le savoir... et bon pour quelqu'un qui est pas au courant, bah en général on le découvre de la mauvaise manière c'est à dire une fois que les données ont été pourries... après une fois que tu le sais tu en tiens compte, un peu comme le problème que j'ai soulevé et que je me borne à t'expliquer.

    après des flaws il y en a d'autres, c'est pas le sujet...

    J'apprécie que tu prennes du temps pour m'aider à avancer sur le sujet surtout que tu es le seul à fournir un éclairage construit, tu m'as permis de mieux me formaliser le problème. Pour moi le sujet est à peu près résolu dans la mesure où j'ai compris que VBA ne s'interrompait pas forcément quand on entrait dans une cellule, et allait se mettre à faire n'importe quoi du fait que les instructions d'automation ne pouvaient s'executer, et la première instruction d'automation rencontrée fait purement et simplement stopper VBA je dis bien stopper pas mettre en pause, je crois qu'on est pas d'accord sur ce dernier point que je t'invite dès lors à vérifier. Je considérerai le sujet comme résolu une fois que nous nous serons mis d'accord sur ce point.




    Gorz

  7. #27
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    Je considérerai le sujet comme résolu une fois que nous nous serons mis d'accord sur ce point.
    Ne m'attends pas. J'ai en ce qui me concerne tout dit et n'ai rien à y ajouter.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #28
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    est ce que tu as testé les deux exemples que je t'ai suggéré déjà ? j'en ai pas l'impression

    car ou
    - effectivement tu as le même problème que moi auquel cas j'avais raison

    - ou bien le programme s'execute jusqu'à la fin auquel cas il s'agit d'un autre problème (poste, version, etc...) sur lequel rien n'a été dit jusqu'à présent


    come je te disais j'apprécie le fait que tu participes mais si c'est pour me troller bêtement je vois pas l'intérêt, je viens ici avec un réel problème, tu as dit des choses intéressantes certes mais si ça ne colle pas à 100%, alors bah il y a matière à creuser, alors peut être tu te complais dans des solutions inexactes mais ce n'est pas mon genre

  9. #29
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    alors peut être tu te complais dans des solutions inexactes mais ce n'est pas mon genre
    De quelles "solutions" parles-tu ?
    Te complairais-tu dans des termes inexacts ?
    Il me semble que tu te complais surtout dans ce qui n'a pas de nom (ou que je préfère ne pas nommer).
    Une autre fois : frappe donc à la porte de Microsoft et attends sa réponse, pour autant que le récit de ton "expérience" te paraisse mériter une réponse.
    Bye

    EDIT : il ne viendrait pas à l'idée de ton immense cerveau que lorsque tu entres, sur ta feuille de calcul, sur ce qui te parait être une cellule, tu n'es encore que sur un emplacement géographique ****** et que lorsque tu appuies alors sur une touche, tu entres dans un "tremplin" modal de saisie réelle ?
    Tu n'as pas remarqué ce qui aurait pourtant du mettre la puce à l'oreille de ton admirable cerveau, à savoir que l'évènement Change n'intervient pas sur ta cellule avant validation de ta cellule, contrairement, par exemple, à ce qui se passerait dans une textbox ?
    Entre autres, car d'autres observations t'échappent par ailleurs également.
    ****** raison pour laquelle il ne te sera pas permis non plus, dès commencement de la saisie, de modifier la fenêtre de calcul (zoom, position, etc ...)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #30
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    'tain mais il est horripilant ce type en fait il te lit de travers et puis te fais des speechs d'une prétention

    écoute mon gars moi j'essaie juste d'avancer, j'ai de la bouteille, je sais ce que c'est que cogiter sur un problème et je me la pète pas dès que j'ai un brin d'avance sur quelqu'un d'autres

    d'après ce que j'ai vu, tu cherches l'embrouille sur pas mal de topics et hésite pas à entrer en conflit gratuitement, alors je sais pas si t'es vraiment né en 1941 auquel cas je te dois le respect c'est sûr mais rien d'autre, parce que sérieusement tu me gonfle à dire que je lis pas tes explications alors que t'as manifestement toujours pas compris ce qu'il me posait problème

    maintenant stp lache moi et va pourrir un autre topic

    problème résolu

  11. #31
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 565
    Points : 12 697
    Points
    12 697
    Par défaut
    maintenant stp lache moi et va pourrir un autre topic
    Je ne suis pas à tes ordres et te rappelle que c'est toi, qui insistais pour recevoir mon avis sur tes "tests".
    Et tu devrais apprendre à lire/relire ce que j'ai écrit et répété. Dès que tu entres dans une cellule et commences à y frapper, Excel ne gère pas encore la cellule, mais une zone tremplin d'édition
    Pour ton code 1 --->> Remplace donc ainsi ce que tu veux afficher (à la place de ton "fini")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    deb = Timer
       Range("A1") = "début"
       While Timer - deb < 5
          DoEvents
       Wend
       MsgBox Range("A1").Value '---->> ce que tu frappes, bien qu' "affiché" à la bonne place sur ta feuille,  n'est pas encore dans la cellule
       Range("A1") = "fini"
    et ... je te laisse constater --->>
    pour ton code 2 --->> me relire (plus haut) : la zone tremplin d'édition est modale
    Pour ton info : merci de douter de mon âge (cela me rassure d'une certaine manière )


    EDIT : Et si tu veux savoir quels réflexes on peut encore avoir à un âge très avancé (cela te rassurera), en voilà un (avec ton code 2) --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    deb = Timer
       Range("A1") = "début"
       While Timer - deb < 5
          DoEvents
       Wend
       On Error Resume Next
       Range("A1").Value = "fini"
       MsgBox "fini"
    tu le vois, le résultat de ce On error resume next ? Il change tout et en dit assez long, hein ... il parle mille fois plus que les momies du Museo del Oro de LIMA.

    Et si tu écris ce qu'il faut pour connaître cette erreur, la voilà :
    1004
    Erreur définie par l'application ou par l'objet
    J'ignore la raison pour laquelle l'équipe Office de Microsoft a estimé qu'il n'était pas indispensable de sortir alors en mode debug. Il ne lui est peut-être tout simplement pas venu à l'esprit que de telles instructions seraient lancées un jour en plein cours de saisie.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème avec les apostrophes dans le sql en VBA
    Par cyrilboulan dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 14/03/2017, 11h11
  2. Réponses: 3
    Dernier message: 26/09/2014, 16h32
  3. Problème avec les espaces dans un tableau !
    Par remixtech dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/07/2006, 20h30
  4. Réponses: 4
    Dernier message: 01/05/2006, 23h53
  5. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 16h31

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