Problème de boucle

Résolu
planchaa Messages postés 5 Statut Membre -  
 planchaa -
Bonjour à tous,

Nous avons dû créer un projet sur visual basic en groupe et devons le rendre pour le 30 décembre. Je précise que c'est la première fois que nous utilisons ce programme.
Nous avons fait un bowling et tout marchait très bien or maintenant quand j'ouvre ma page excel avec le jeu le bouton start qui permet de faire bouger la boule de droite à gauche ne marche pas systématiquement. Il y a quelques heures quand j'ai ouvert mon programme il marchait et maintenant il ne marche plus alors que mes autres boutons fonctionnent parfaitement.
Ceci avec des contrôle de formulaires donc affectés des macros.

Nous avions tout fait avec des contrôles activeX mais à chaque ouverture du programme, les boutons changeait de noms (si quelqu'un peut m'expliquer pourquoi) donc j'ai tout refait avec des macros (contrôles de formulaire) et là juste le bouton start qui fait des caprices.
Ce bouton permet aussi de replacer les quilles et la boule ( avec leurs coordonnées) et ceci fonctionne mais la boule ne bouge pas! Donc j'en ai conclut qu'il y a un problème avec la boucle, mais puisqu'elle marche parfois je ne comprend pas.

J'ai tenté de le faire en userform, mais toujours le même problème ! Le bouton start qui marche 1 fois sur 2 !

Je ne comprend vraiment pas car notre code me semble bon...
S'il vous plait, si quelqu'un peut m'aider ce serait vraiment génial car je suis complètement perdu là!

Je vous envoie la boucle du bouton qui semble poser problème :

Public score As Integer
Public bonj As Integer


Sub start  ()
  
'là il y a normalement tout le code pour placer les quilles et la boule  


 bonj = 0           'utile pour sortir de la boucle
            secondes = 0.002           'vitesse de la boule
        
       
   For ii = 1 To 3             'répéter l'action 3 fois
        
            For i = 1 To 443 Step 3
                Timer_avant = Timer
                
                     Do While (Timer < Timer_avant + secondes) And bonj = 0
                         DoEvents
                     Loop
                
              Sheets("Feuil1").Shapes("BOULE").Left = 443 - i
                'la boule se déplace a vitesse constante vers sa position finale
         
           Next

 
            For i = 1 To 443 Step 3
                Timer_avant = Timer
                
                      Do While (Timer < Timer_avant + secondes) And bonj = 0
                          DoEvents
                      Loop
    
           Sheets("Feuil1").Shapes("BOULE").Left = 0 + i
                      'la boule revient de la meme facon à sa position de départ


          Next
    Next

'CommandButton1.Visible = False
'je ne sais pas comment rendre des boutons issuent de contrôles de formulaire invisibles..

End Sub

11 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    peut-^tre:

    Il y a actuellement une mise à jour "foireuse" de Microsoft sur les contrôles activeX installés sur une feuille de calcul
    voir
    https://forums.commentcamarche.net/forum/affich-31191567-bouton-macro-bloque
    avec un lien intéressant vers un autre forum;

    tu peux spprimmer tous les .exd
    mais les numéros des boutons commencent alors par 21 !

    Bon courage

    Michel
    0
  2. planchaa Messages postés 5 Statut Membre
     
    Bonjour et merci michel_m pour ton aide, j'ai essayé de supprimer et même de renommer cette mise à jour mais cela ne change rien, mes boutons activeX sont inutilisables. Et même si j'y arrivait, en l'envoyant à mon enseignant, est ce qu'il ne faudrait pas qu'il supprime cette mise à jour également ?

    J'abandonne l'idée des boutons activeX, comme j'ai aussi tout refait avec des contrôles de formulaires je n'aurais plus que le problème de ma boucle...
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    en l'envoyant à mon enseignant, est ce qu'il ne faudrait pas qu'il supprime cette mise à jour également ? --

    Effectivement! mais le mieux serait peut-^tre de lui signaler le problème avant l'envoi en lui copiant-collant les url des discussions sur CCM et DVP
    0
  4. planchaa Messages postés 5 Statut Membre
     
    Oui c'est une solution, merci michel_m, si jamais je n'arrive vraiment pas à résoudre mon problème de boucle c'est ce que je ferai.

    Si quelqu'un peut m'aider ce serait génial, s'il vous plait!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    excuses moi, je m'étais braquer sur l 'activeX

    j'ai retrouvé cette tvieille bidouille VBA (xl2000) dans mon grenier

    ActiveSheet.Shapes("Picture 3").IncrementLeft 200 

    mais je n'ai jamais compris pourquoi "left" déplacait vers la droite... :-\
    0
  7. planchaa Messages postés 5 Statut Membre
     
    Merci mais cela ne change rien, j'utilise toujours la même boucle...je ne sais vraiment plus quoi faire :(

    Left permet de deplacer horizontalement; c'est plus ou moins à gauche en fait je crois
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Chez moi ca se déplace en incrémentant et non par modification de la position left
    https://www.cjoint.com/?3LCsgK3qiFV

    XL2007 VBA et non Vb comme tu l'indiques

    Michel
    0
  9. planchaa Messages postés 5 Statut Membre
     
    Génial, merci beaucoup michel_m!! J'ai repris ton code et cela m'a effectivement l'air de marcher, j'espère qu'il marchera encore demain!

    Quelle est la différence entre VBA et Vb ?

    Et sais tu comment on fait pour rendre invisible ou inutilisable des boutons issuent de contrôles de formulaire ? Avec activeX il suffit d'utiliser leurs propriétés (Enabled, Visible) mais avec les contrôles de formulaire il n'y a pas de propriétés donc je ne vois pas comment faire..
    0
  10. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,
    comment on fait pour rendre invisible ou in...

    Non, je ne vois pas
    Mais une fois viré les ".edx", tu peux réinsérer un activeX et le renommer Btn_start par ex (c'est mieux que commandbutton21 et généralement apprécié pour faciliter la la compréhension pour la maintenance)

    VBA est une variante spécialisée de Vb utilisable que sur MSOFFICE
    VB est éxécutable, VBA non
    Vb travaille à partir d'un formulaire, VBa à partir du logiciel utilisé (excel, access), etc.

    Maintenant, si ca marche un jour et pas un autre, c'est un autre problème lié à excel ---> réparation avec le Cd, sécurité... si il n'y a pas eu un oubli de sauvegarde (ca, je sais bien faire)
    Michel
    0
  11. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Pour rendre visible ou invisible un bouton formulaire, faire l'essai avec 3 boutons:

    Option Explicit
    Dim myDocument
    Sub Bouton1_Clic()
    Set myDocument = Worksheets(1)
    myDocument.Shapes(3).Visible = False
    End Sub
    Sub Bouton2_Clic()
    Set myDocument = Worksheets(1)
    myDocument.Shapes(3).Visible = True
    End Sub
    Sub Bouton3_Clic()
    test
    End Sub
    Sub test()
        Dim img As Object
            For Each img In Worksheets(1).Shapes
         MsgBox img.Name
        Next
    End Sub
     


    ensuite supprimer cette mise à jour pour récupérer les boutons formulaire:

    Security Update for Microsoft Office 2007 suites (KB2596927)


    anneau de configuration-Programmes-Programmes et fonctionnalités-Mises à jour installées
    Clic droit sur la mise à jour: Désinstaller

    N'oubliez pas de désactiver les mises à jour automatique, sinon rebelote
    0
  12. planchaa
     
    Bonjour,

    Merci michel_m et cs_Le Pivert, j'ai maintenant rendu mon projet, à la place de rendre invisible les boutons j'ai simplement fait s'afficher un message et stoppé l'action du bouton en créant des variables,...
    Je n'avais pas vu vos réponses à temps.
    Merci beaucoup en tout cas.
    0