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 concernant l'appel d'une procédure contenant "If"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut Problème concernant l'appel d'une procédure contenant "If"
    Bonjour à tous,

    J'ai bien cherché pendant quelques heures mais je n'ai trouvé aucun réponse à ce sujet. Mon problème est simple :

    J'ai une macro principale qui fait appel à d'autre macros dans le même module, 6 pour etre exact. Elles me servent à fractionner ma procédure, à mieux l'organiser, et à rendre les étapes plus compréhensibles. Sur ces 6 procédures, 4 contiennent des "If" du style :
    Si la valeur de cette cellule est égale à ca alors la valeur de celle ci est égale à ca, sinon blablabla.

    Je n'ai aucun problème pour apeller ces 6 procédures (Avec "Call") mais seules les 2 qui ne contiennent aucun "If" fonctionnent correctement et font le travail demandé. Pour les 4 autres, j'ai regardé en pas à pas ce qui bloquait, et il s'avère que la macro saute directement à la prochaine étape lorsqu'elle rencontre un "If" quelque soit ce qu'il y a aprés (si la sous procédure commence par "If", qu'elle fasse 2 lignes ou 50, c'est pareil la suite est automatiquement sautée).

    De plus toutes les variables utilisées sont déclarés en Public donc pas de problèmes à ce niveau la normalement surtout qu'elles sont bien prises en compte pour les 2 sous procédures ne commencant pas par "If"

    Pour être plus concret, voici un partie de mon code :

    Le bout de mon code principal en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Do Until i = linecount
     
    Call Process1
    Call Process2
     
        i = i + 1
        j = j + 1
     
    Loop
    Process1 marche trés bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Process1 ()
     
            For x = 1 To 9
            Workbooks(XLBook1).Worksheets("Template AMF").Cells(j, ColumnAMFColl(x)).Value = _
            Workbooks(XLBook2).Worksheets("Trades").Cells(i, ColumnBOColl(x)).Value
            Next x
     
    End Sub
    Process2 qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Process2 ()
            If Workbooks(XLBook2).Worksheets("Trades").Cells(i, ColumnBOColl(10)).Value = "SGLB" Or "SGAS" Then _
            Workbooks(XLBook1).Worksheets("Template AMF").Cells(j, ColumnAMFColl(10)).Value = "90120"
     
    End Sub
    Process1 marche donc correctement alors que Process 2 est executé mais rien ne se passe, quand la macro rentre dedans et s'attaque au "If", elle revient immédiatement au code principale en executant la suite à savoir i = i + 1 ...

    Auriez vous une idée pour résoudre ce problème ? Merci beaucoup par avance !

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    je pense que c'est un problème de portée de variables.

    XLBook2, entre autres, n'est à mon avis par connu de ta sous-procédure.


  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Bonjour,

    Tout d'abord merci de votre réponse. Je ne pense pas que cela vienne de la car d'une part le Process 1 contient cette variable et marche parfaitement bien, et d'autre part, vba m'aurait généré une erreur si le problème venait de la. Ce qui m'embête c'est que mon code tourne sans aucune erreur, il y a simplement les procédures avec "If" qui ne font pas ce que je leur demande, mais aucune erreur n'apparait à l'execution du code... Donc je ne comprends pas bien le pourquoi du comment...

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Et pourtant.... tu devrais laisser tomber tes présomptions... et clairement regarder tes If et les variables que tu y testes.

    Car un If qui ne fait pas ce que l'on veut, il n'y a que 2 causes possibles :

    1) test mal codé ou mal pensé
    2) variable dont la valeur ne correspond pas à ce qu'on croit/souhaite.

    Le i par exemple, je ne serais pas étonné qu'il vaille .... 0

  5. #5
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Si tu "sautes les if" c'est peut-être aussi que le test renvoie faux.
    A ce sujet tu as un pb avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Workbooks(XLBook2).Worksheets("Trades").Cells(i, ColumnBOColl(10)).Value = "SGLB" Or "SGAS"
    qui doit s'écrire autrement, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Workbooks(XLBook2).Worksheets("Trades").Cells(i, ColumnBOColl(10)).Value = "SGLB")  Or (Workbooks(XLBook2).Worksheets("Trades").Cells(i, ColumnBOColl(10)).Value = "SGAS")
    Cordialement,

    PGZ

  6. #6
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    @Godzestla : Je comprends bien mais j'étais pratiquement certain que le probleme ne venait pas de mes variables car j'ai fais une execution en pas à pas pour les tester chacune. Ce qui ne laisse place qu'a l'hypothese du test mal codé... et qui se confirme avec l'intervention de Pgz.

    @Pgz : Tu viens de mettre le doigt dessus ! J'ai fais quelques test et ca semble bien fonctionner ! Encore une erreur de formulation... Damn it !

    Merci énormement pour votre contribution à tous les deux en tout cas !

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

Discussions similaires

  1. Appel d'une procédure contenant un update dynamique
    Par ckermorgant dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 28/04/2011, 23h41
  2. Réponses: 7
    Dernier message: 05/06/2008, 14h37
  3. [VB6] problème a l'appel d'une procédure
    Par trigone dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/04/2008, 17h37
  4. Problème lors de l'appel d'une procédure stockée
    Par ToxiZz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/05/2006, 23h42

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