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 :

Boucle ne s'initialisant pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut Boucle ne s'initialisant pas
    Bonsoir,

    J'ai souvent des problèmes avec des boucles toutes betes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For xxx= 1 to 9
    Next xxx
    La variable, parfois, ne s'initalise pas et prend directement la valeur 9 (ce qui vous en convenez est assez embetant!

    Ca m'arrive relativement souvent. Parfois je change le nom de la variable et ça se met à marcher, parfois non... Car je me disais que ça pouvait etre un conflit avec d'autres variables...

    Problème de mémoire?

    J'en sais rien...

    Ca vous arrive jamais?

    Lameth

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    La variable, parfois, ne s'initalise pas et prend directement la valeur 9
    Peux tu préciser dans quel cas car il est difficile de répondre sans plus de détail:
    * Tu réutilises la variable à l'intérieur de la boucle ? (ce qui est peu conseillé).
    * xxx est un argument ByRef dans une fonction récursive ?
    ... etc ...

    http://silkyroad.developpez.com/vba/boucles/



    bonne journée
    michel

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Lameth et le forum
    J'ai souvent des problèmes avec des boucles toutes betes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For xxx= 1 to 9
    Next xxx
    La variable, parfois, ne s'initalise pas et prend directement la valeur 9 (ce qui vous en convenez est assez embetant!
    Je pense que t'as tout faux
    Contrairement à ce que tu peux penser, Excel ne peut pas ne pas exécuter ce que tu lui demandes de faire. Par contre, ce que tu veux qu'il fasse...

    Si le pointeur de probramme passe sur la ligne for, il initialisera ta variable à la valeur demandée => puisque tu sembles avoir le problème qui s'installe parfois, au point d'être obligé de changer le nom de la variable : au lieu de le changer, rajoute une boîte de dialogue, à la ligne juste après le for :
    Msgbox "xxx=" & xxx
    tu verras à chaque passage de la boucle la valeur de ta variable, et tu auras 2 solutions :
    - le message n'apparaît pas => un test en amont fait que le pointeur ne passe pas dessus la ligne
    - le message apparaît, mais il n'y a pas l'action que tu espérais => un test dans la boucle empêche l'action de celle-ci.
    Et ce dans le cas où les causes possibles proposées au poste au-dessus ont déjà été vérifiées. J'ai mis test, mais ce peut être une autre action : changement de feuille, utilisation d'une macro function, sans "volatile" etc...

    Mais avec le code on pourrait sans doute te faire des propositions (honnêtes) sur les causes, ou donner des solutions.

    Te fais aucune illusion : t'es ni le premier, ni le dernier a être sûr que l'erreur de fonctionnement est du à un bug d'excel (et je parle en connaissance de cause=. Mais souvent, pris dans le raisonnement du traitement, on oublie le contexte.
    A+

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut
    Si je souleve ce probleme c'est que en effet je me demande si ca vient de moi (c'est a dire du code), de la machine du du logiciel.

    C'est sur qu'apres 6 heures de codage intensif, on a beau repasser sur la meme ligne erronee, elle parait tout de meme correcte.

    Mon probleme etait au debut de la sub

    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
    17
    18
    Sub Correl()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    NumSS = ThisWorkbook.Sheets("InitBase").Range("D1")
    Path = ThisWorkbook.Sheets("Param").Range("B1")
    Base = ThisWorkbook.Sheets("Param").Range("B2")
    Devise = ThisWorkbook.Sheets("InitBase").Cells(ThisWorkbook.Sheets("InitBase").Range("F1") + 1, 5)
     
    For SSDupli = 1 To 7
        If ThisWorkbook.Sheets("Param").Cells(4 + SSDupli, 4) = True Then
            For SSSelec = 2 To NumSS
                ThisWorkbook.Sheets("Param").Cells(4 + SSDupli, 3 + SSSelec ).Formula = "TRUE"
            Next SSSelec 
        End If
    Next SSDupli
    ...
    ...
    Le prog passait (execute en pas a pas pour verifier tout de meme on est jamais trop prudent) par le premiere boucle et affectait direct le 7 a SSDupli.

    J'ai change le nom de mes variables, ainsi SSDupli est devenu Dupli et SSSelec est devenu SelSS... Et... Ca marche... Je n'ai change que ca...

    Franchement, je ne comprends pas...

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    une petite question
    à quel niveau sont déclaré les variables?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut
    Je n'ai pas l'habitude de declarer mes variables...

  7. #7
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    mauvaise habitude!

  8. #8
    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
    Je confirme, mauvaise habitude

    Il est préférable de toujours déclarer toutes les variables.

    Pour ce faire utilise
    au début de ton code.

    cela peut paraitre fastidieux mais cela évite tout un tas de problèmes, dont peut-être le tien.

Discussions similaires

  1. [Tableaux] Ma boucle While ne va pas !!!
    Par tigzirt dans le forum Langage
    Réponses: 7
    Dernier message: 05/05/2006, 11h47
  2. [FLASH 8] Un SWF tourne en boucle : je ne veux pas !
    Par Olish dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 24/04/2006, 11h36
  3. Réponses: 1
    Dernier message: 28/07/2005, 14h21
  4. Boucle While ne marche pas
    Par soltani.slim dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h41
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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