Boucle while

Bonjour, j'ai un petit soucis avec une boucle while pour gérer une erreur de doublon dans ma table (erreur 3022). Pour éviter cette erreur j'ai voulu faire une boucle while qui incrémente ma clé primaire de 1 jusqu'à ce qu'elle trouve un numéro qui n'est pas encore utilisé dans ma table. Le problème c'est que mon code ne fonctionne pas, la valeur s’incrémente mais la boucle ne s'arrêt jamais. Savez-vous comment je peux faire ?

While (Err.Number = 3022)

Dim i2 As Integer
i2 = 0

On Error GoTo Err_Valider_Click

If IsNull(Me.Texte1.Value) Then
    MsgBox "Saisir champ"
    Exit Sub
Else
    DoCmd.RunCommand acCmdSaveRecord
End If

Wend

Err_Valider_Click:
If (Err.Number = 3022) Then
    Texte1.Value = "1" + i2
    i2 = i2 + 1
End If

Personne ne sait comment je peux procéder ?

Bonjour,

Peut être en essayant de mettre une sortie

While (Err.Number = 3022)

Dim i2 As Integer
i2 = 0

On Error GoTo Err_Valider_Click

If IsNull(Me.Texte1.Value) Then
    MsgBox "Saisir champ"
    Exit Sub
Else
    DoCmd.RunCommand acCmdSaveRecord
End If

Wend

If (Err.Number = 3022) Then
    Texte1.Value = "1" + i2
    i2 = i2 + 1
   End If

Err_Valider_Click:
  '  MsgBox "...!"  ' voir peut être de mettre la description de l'erreur '  MsgBox Err.Description
   Exit Sub

Merci pour la réponse.

L'erreur est dû à une valeur en double (doublon dans ma table) et je ne peux pas mettre de exit sub car je dois chercher une valeur (pour mon texte1.value) qui n'existe pas déjà dans ma table et sortie de la boucle while à ce moment là.

Bonjour,

sur base du code que tu veux bien nous montrer,

pour que la boucle s'exécute tu dois avoir reçu l'erreur 3022 avant de rentrer dans la boucle.

tu dis que i2 s'incrémente bien, mais à chaque passage dans la boucle tu remets i2 à 0

si le traitement d'erreur est enclenché, la macro devrait s'arrêter (pas d'instruction resume ...)

bref pour moi info insuffisante pour pouvoir expliquer quoi que ce soit ...

Pour que l'erreur s’enclenche, la macro doit arriver à DoCmd.RunCommand acCmdSaveRecord ou là il ne peut pas car il y aura un doublon si enregistrement mais je ne sais pas comment rentrer dans la boucle car mettre juste While (Err.Number = 3022) ne me permet pas de rentrer dans la boucle.

Merci

bonjour,

comment peux-tu avoir une boucle qui ne s'arrête jamais, si tu ne rentres jamais dans la boucle ?

j'arrête cette discussion, car le bout de code que tu nous as mis ne permet pas de faire le diagnostic sans boule de cristal.

Pourtant j'ai mis tout le code ...

Mais j'ai réussi à faire ce que je voulais.

Rechercher des sujets similaires à "boucle while"