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 !
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
Sub MinFehlerQuadrate()
Dim i17 As Integer, r1 As Integer, r2 As Integer, r3 As Integer, c45 As String, coeff1 As Integer
Dim Fra As Single, Fr As Single, Fr0 As Single, FrEnd As Single
Fr0 = Sheets("Auswertung").Range("K44").Value
FrEnd = 0
While Fr0 <> FrEnd
' Récupération de la valeur avant itérations
Fr0 = Sheets("Auswertung").Range("K44").Value
For i17 = 0 To 100
' Récupération de la valeur de l'erreur quadratique avant les modifications
Fr = Sheets("Auswertung").Range("K44").Value
' Selection d'un coefficient au hasard
Randomize
r1 = Int(Rnd() * 7) + 41
c45 = "D" & r1
' Récupération de la valeur de la cellule
coeff1 = Sheets("Auswertung").Range(c45).Value
' Random sur r3 pour savoir combien on ajoute ou on enlève
Randomize
r3 = Int(Rnd() * 3) + 1
' Soit on fait +r3, soit on fait -r3
Randomize
r2 = Int(Rnd() * 2) + 1
If r2 = 1 Then
coeff1 = coeff1 + r3
Sheets("Auswertung").Range(c45).Formula = coeff1
Fra = Sheets("Auswertung").Range("K44").Value
' Si l'erreur quadratique est plus importante qu'avant, on annule ce qu'on vient de faire
If Fra > Fr Then
coeff1 = coeff1 - r3
Sheets("Auswertung").Range(c45).Formula = coeff1
End If
ElseIf r2 = 2 Then
coeff1 = coeff1 - r3
' Il ne faut pas oublier de contrôler que k1 reste positif
If coeff1 < 0 Then
coeff1 = coeff1 + r3
End If
Sheets("Auswertung").Range(c45).Formula = coeff1
Fra = Sheets("Auswertung").Range("K44").Value
If Fra > Fr Then
coeff1 = coeff1 + r3
Sheets("Auswertung").Range(c45).Formula = coeff1
End If
End If
Next i17
FrEnd = Sheets("Auswertung").Range("K44").Value
Wend
MaxImBereich
End Sub
yop! Bon, y'a qu'un while et un for quoi... à moins que ce soit randomize qui pose problème ?
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.
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.
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
par exemple.
Mets-y un label et une barre de progression, et surtout, tu fait un show modal :
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.
Par contre, j'ai une solution ! Tu veux voir ça ?
Crée un UserForm que tu appelles FortschrittForm
par exemple.Mets-y un label et une barre de progression, et surtout, tu fait un show modal :
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 !
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
- Contenus similaires :