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 :

Différence de résultat en exécution ou en mode débogage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    école d'ingénieur
    Inscrit en
    Novembre 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : école d'ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2023
    Messages : 11
    Par défaut Différence de résultat en exécution ou en mode débogage
    Bonjour, je vais tenter d'être concis.

    J'ai créé une macro qui fonctionne très bien lorsque j'utilise le mode débogage. Néanmoins, impossible d'avoir le bon résultat lors d'une exécution normale.
    J'ai d'abord pensé à un problème de "timing" que j'ai essayé de résoudre en imposant des attentes, ce ne fut pas fructueux... Je suis à court d'idée. Merci d'avance !

    Je ne peux malheureusement pas vous joindre mon fichier.

    Private Sub CommandButton1_Click()

    Dim nAc As Integer
    nAc = Range("PlgMaintenance").Rows.Count

    Dim a, b, c, d, check, e

    With Sheets("Maintenance logbook")

    For i = 2 To nAc
    If Range("A" & i).Value = AcRegistration Then
    b = Range("B" & i).Value
    d = Range("C" & i).Value
    e = DateDiff("m", Range("C" & i), Date)
    Else
    End If
    Next i

    If b = 50 Then
    check = 100
    Else
    check = 400
    End If

    .Range("A" & nAc + 1) = AcRegistration
    .Range("B" & nAc + 1) = check
    .Range("C" & nAc + 1) = Date
    .Range("D" & nAc + 1) = Engineer
    .Range("E" & nAc + 1) = "Started"
    .Range("A1:E" & nAc + 1).Name = "PlgMaintenance"
    End With

    Unload MaintenanceTask
    MaintenanceTask.Hide

    MsgBox ("This aircraft is on check " & check)

    LifeLimit.Show

    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, à priori je ne vois pas d'erreur dans le code, et juste en disant que tu n'as pas le bon résultat je ne vois pas comment aider.
    Insère des debug.print dans ton code pour vérifier le contenu des variables en mode pas à pas et si à un moment ta variable n'a pas le contenu voulu c'est là qu'il faut creuser.

  3. #3
    Membre habitué
    Homme Profil pro
    école d'ingénieur
    Inscrit en
    Novembre 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : école d'ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2023
    Messages : 11
    Par défaut
    Effectivement, désolé pour ce manque de précision. Le programme me renvoie toujours check=400 quoiqu'il arrive en mode d'exécution normal.

    Je vais essayer cela pour voir ce qu'il se passe.

  4. #4
    Membre habitué
    Homme Profil pro
    école d'ingénieur
    Inscrit en
    Novembre 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : école d'ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2023
    Messages : 11
    Par défaut
    En vérifiant les variables en mode débogage, les valeurs sont correctes, et donc le résultat final correct.

    En exécution "normale", à la suite de ma première boucle FOR, b ne contient aucune valeur, la variable est vide pour une raison qui m'échappe.

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Quelque chose m'échappe dans la logique du code. A la sortie de ta boucle for i = 2 to nAc, b aura toujours la valeur de la dernière ligne testée et qui est affectée ensuite à check dans le test if qui suit la boucle. Pourquoi faire une boucle pour tester toutes les lignes alors ?

  6. #6
    Membre habitué
    Homme Profil pro
    école d'ingénieur
    Inscrit en
    Novembre 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : école d'ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2023
    Messages : 11
    Par défaut
    Parce que je veux la dernière valeur, la ligne de la dernière entrée. Il peut y avoir une première ligne avec 50 et une deuxième plus récente avec 100.

    Je pourrais peut être envisager un compteur qui commence la recherche "par le bas" ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/11/2019, 13h18
  2. Nagios nrpe : différence des résultats selon exécution script locale/distante
    Par KarimOuldamar dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 25/09/2018, 04h07
  3. Différence de résultats d'une requête entre OpenQuery et ADO
    Par hellbilly dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/04/2006, 18h29
  4. Différences de temps d'exécution d'une même requête
    Par hellbilly dans le forum Access
    Réponses: 3
    Dernier message: 16/12/2005, 20h56
  5. [Rave] Différence de langue entre exécution et design
    Par RamDevTeam dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/11/2005, 11h49

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