Condition avec boucle

Bonjour à tous,

J'aimerai dans un fichier écrire une condition dans laquelle si la valeur d'une cellule se trouvant dans la colonne "P" est égal à ma TextBox, alors il m'affiche un MsgBox. Pour cela, j'ai écrit ceci :

    For i = 3 To Cells(Rows.Count, "P").End(xlUp).Row
        If Cells(i, "P") = Me.TextBox_Tarif.Value Then
            If MsgBox("Le Tarif HT renseigné existe déjà, continuer la saisie ?", vbYesNo, "Attention") = vbYes Then GoTo SuiteEnr
        Else
            Exit Sub
        End If
    Next i

Mais rien ne se passe, et si je rajoute Else (pour inverser la condition) alors le MsgBox s'affiche tout le temps.

Du coup j'ai essayé autrement :

n = Cells(Rows.Count, "P").End(xlUp).Row

    For Each cellule In Range(Cells(3, "P"), Cells(n, "P")).Value
        If cellule = Me.TextBox_Tarif.Value Then
            If MsgBox("Le Tarif HT renseigné existe déjà, continuer la saisie ?", vbYesNo, "Attention") = vbYes Then GoTo SuiteEnr
        Else
            Exit Sub
        End If
    Next cellule

Mais pas de résultat concluant non plus ...

Un coup de main ?

Merci d'avance ;)

Bonjour SOTIN,

Comme ça rien de problématique, merci de joindre un fichier exemple (comme indiqué dans la charte)
afin que nous puissions mieux comprendre et corriger

A+

Bonjour Bruno M45,

Autant pour moi, 😇 il me semblait que poster le code problématique serait suffisant. Voici le fichier. La partie déconnante se trouve dans le bouton "Valider" de l'userform1.

Pour que ce soit plus facile, je l'ai isolé entre deux lignes de commentaire :

Merci

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'1ère solution
    For i = 3 To Cells(Rows.Count, "P").End(xlUp).Row
        If Cells(i, "P") = Me.TextBox_Tarif.Value Then
            If MsgBox("Le Tarif HT renseigné existe déjà, continuer la saisie ?", vbYesNo, "Attention") = vbYes Then GoTo SuiteEnr
        Else
            Exit Sub
        End If
    Next i

'2ème solution
'n = Cells(Rows.Count, "P").End(xlUp).Row

'    For Each cellule In Range(Cells(3, "P"), Cells(n, "P")).Value
'        If cellule = Me.TextBox_Tarif.Value Then
'            If MsgBox("Le Tarif HT renseigné existe déjà, continuer la saisie ?", vbYesNo, "Attention") = vbYes Then GoTo SuiteEnr
'        Else
'            Exit Sub
'        End If
'    Next cellule
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Re,

Oups, il faut virer le

Else
Exit Sub

Sinon la boucle ne se fait pas

Vous voyez, c'est toujours mieux avec un fichier (mais déjà dis)

Re,

J'ai déjà essayé cette manip et du coup la MsgBox n'apparait jamais, ...

Du coup j'ai essayé en supprimant le "Exit Sub" et en mettant "Else" avant le MsgBox -> Là elle apparait tout le temps

Re,

J'ai oublié de préciser, il faut récupérer la valeur numérique du textbox et non sa valeur texte totu court

 If Cells(i, "P") = CSng(Me.TextBox_Tarif) Then

Pensez toujours au mode débogage (déjà dis)
F9 pour mettre un point d'arrêt sur une ligne ou le code passe, F8 pour exécuter le code en pas à pas ou MAJ+F8

image

On positionne son curseur sur les code et on obtient les valeurs

On s'aperçois alors qu'une valeur numérique est comparée à une valeur texte, c'est donc tout le temps différent

A+

Re,

Cela fonctionne bien, merci.

F9 je m'en sert régulièrement effectivement, mais F8 je ne connaissais pas par contre.

Par ailleurs, j'ai déjà été confronté à ce genre de problème : CDbl(), CDate(), ... Est-ce qu'il existerait sur ce forum ou ailleurs un récap avec leur utilité de tous ces outils ?

Super merci,

Au plaisir ;)

Rechercher des sujets similaires à "condition boucle"