Se connecter avec
S'enregistrer | Connectez-vous

Problème clic => gros bug !

Dernière réponse : dans Programmation

Bonjour,

J'ai un petit soucis avec des calculs que je fais tourner sous excel à l'aide de macros.

La procédure est assez simple : les calculs sont longs, donc j'ouvre un Userform (non modal) pour dire "patientez svp".
Si effectivement l'utilisateur patiente, pas de problème, tout roule.

Mais s'il fait juste un clic dans la feuille ou sur l'userform, tout s'emballe et mes calculs ne se font plus correctement (pourtant ce sont de simple boucles for ou while)
J'ai essayé de supprimer l'Userform, des fois que, mais j'ai le même problème si je clique dans la feuille.

Je ne comprends vraiment pas pourquoi.

Quelqu'un a-t-il déjà eu ce problème et/ou peut m'aider ?

Merci d'avance !

Autres pages sur : probleme clic gros bug

Lassé par la pub ? Créez un compte

  1. Sub MinFehlerQuadrate()
  2.  
  3. Dim i17 As Integer, r1 As Integer, r2 As Integer, r3 As Integer, c45 As String, coeff1 As Integer
  4. Dim Fra As Single, Fr As Single, Fr0 As Single, FrEnd As Single
  5.  
  6. Fr0 = Sheets("Auswertung").Range("K44").Value
  7. FrEnd = 0
  8.  
  9. While Fr0 <> FrEnd
  10. ' Récupération de la valeur avant itérations
  11. Fr0 = Sheets("Auswertung").Range("K44").Value
  12. For i17 = 0 To 100
  13. ' Récupération de la valeur de l'erreur quadratique avant les modifications
  14. Fr = Sheets("Auswertung").Range("K44").Value
  15. ' Selection d'un coefficient au hasard
  16. Randomize
  17. r1 = Int(Rnd() * 7) + 41
  18. c45 = "D" & r1
  19. ' Récupération de la valeur de la cellule
  20. coeff1 = Sheets("Auswertung").Range(c45).Value
  21. ' Random sur r3 pour savoir combien on ajoute ou on enlève
  22. Randomize
  23. r3 = Int(Rnd() * 3) + 1
  24. ' Soit on fait +r3, soit on fait -r3
  25. Randomize
  26. r2 = Int(Rnd() * 2) + 1
  27. If r2 = 1 Then
  28. coeff1 = coeff1 + r3
  29. Sheets("Auswertung").Range(c45).Formula = coeff1
  30. Fra = Sheets("Auswertung").Range("K44").Value
  31. ' Si l'erreur quadratique est plus importante qu'avant, on annule ce qu'on vient de faire
  32. If Fra > Fr Then
  33. coeff1 = coeff1 - r3
  34. Sheets("Auswertung").Range(c45).Formula = coeff1
  35. End If
  36. ElseIf r2 = 2 Then
  37. coeff1 = coeff1 - r3
  38. ' Il ne faut pas oublier de contrôler que k1 reste positif
  39. If coeff1 < 0 Then
  40. coeff1 = coeff1 + r3
  41. End If
  42. Sheets("Auswertung").Range(c45).Formula = coeff1
  43. Fra = Sheets("Auswertung").Range("K44").Value
  44. If Fra > Fr Then
  45. coeff1 = coeff1 + r3
  46. Sheets("Auswertung").Range(c45).Formula = coeff1
  47. End If
  48. End If
  49. Next i17
  50. FrEnd = Sheets("Auswertung").Range("K44").Value
  51. Wend
  52. MaxImBereich
  53. End Sub


yop! Bon, y'a qu'un while et un for quoi... à moins que ce soit randomize qui pose problème ?
Expert Programmation

Avant de te donner une réponse par rapport à tes questions (euh, je cherche encore pourquoi), accepte ces critiques :

Sheets, c'est la collection des onglets. Utilise Worksheets qui en est un sous-ensemble, puisque c'est la collection des onglets de type feuille de calcul.

Pour ce qui est de Randomize, dixit l'aide : Initialise le générateur de nombres aléatoires.
Bref, une initialisation, ça n'a besoin d'être fait qu'une seule fois. Idéalement, une fois au début du programme (je ne parle pas que de la macro). C'est inutile de l'appeler plus d'une fois dans un même programme, alors au milieu d'un For au milieu d'un While au milieu d'une macro, ça frise le ridicule. N'empêche que ce n'est pas ça qui perturbe ton programme.
Expert Programmation

Bon, je n'ai pas d'explication. :/ 

Par contre, j'ai une solution ! Tu veux voir ça ?
Crée un UserForm que tu appelles FortschrittForm :D  par exemple.

Mets-y un label et une barre de progression, et surtout, tu fait un show modal :
  1. FortschrittForm.Show 1


Dans la méthode Activate de ton userform, appelle ton code MinFehlerQuadrate que tu adaptes un peu pour faire bouger ta barre de progression de 1 à 100 dans ton For. Dans le label, incrémente les passes du While.

Ok merci ! et bravo pour l'allemand ;p

Et merci du conseil pour randomize, j'avais juste copié collé la ligne de code donnée dans l'aide (en allemand, que je ne comprends qu'à moitié)... je ne suis pas une pro ! ^^

J'ai testé : ça pose encore problème ! Quand je clique dans la feuille, ça n'exécute plus les macros comme il faut. Pourtant j'ai bien mis mon userform en modal, et j'ai bien demandé l'exécution au niveau du activate de l'userform !
Lassé par la pub ? Créez un compte