Test valeur entrée non numérique
Bonjour
Je vous livre le code suivant :
Option Explicit
Public Reponse As Integer, Ligne_concernee As Integer, Numero_Colonne As Integer
Sub Depart()
Reponse = InputBox("Quel est le numéro recherche ?")
On Error Resume Next
Ligne_concernee = 0 ' Autrement il semble que la variable Ligne_concernee garde sa dernière valeur qui peut être superieur a ˆ 0
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("B:B"), 0)
Numero_Colonne = 2
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("F:F"), 0)
Numero_Colonne = 6
End If
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("J:J"), 0)
Numero_Colonne = 10
End If
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("N:N"), 0)
Numero_Colonne = 14
End If
If Ligne_concernee = 0 Then
MsgBox ("Ce numero n'existe pas !")
Exit Sub
End If
With Sheets("Les territoires")
If .Cells(Ligne_concernee, Numero_Colonne + 1) = "" Or .Cells(Ligne_concernee, Numero_Colonne + 2) = "" Then
MsgBox ("Il manque l'indication du titre et/ou du genre !")
End If
End With
Recherche.Show
End Sub
Je sais que je devrais poster un fichier, mais là je ne pense pas que cela soit nécessaire, car voici ma question :
Dans le code With on test s'il y a une valeur dans un tableau (ce test fonctionne correctement). Mais je voudrais faire un autre test lorsque l'on ne renseigne rien ou une valeur non numérique (ce test se fera sur les mêmes colonnes que le 1er test), et bien sur afficher un message d'avertissement à l'utilisateur. J'ai pensé à IsNumeric, mais comment coder tout ça ?J'espère être clair. Merci.
Bonsoir,
première "réponse" à votre première réflexion :
la portée des variables !
Quand vous écrivez :
Public Reponse As Integer, Ligne_concernee As Integer, Numero_Colonne As Integer
le Public de début de ligne précise à VBA que la variable est "public" c'est à dire utilisable dans toutes les SUB.
Donc il suffit que dans une autre Sub, cette valeur passe à 123, alors dans la procédure Départ elle aura la valeur 123.
Si vous n'avez que cette procédure qui travail avec cette valeur, lors du premier lancement elle va arrivée à 20 (par exemple) du coup lors du deuxième lancement de départ elle vaudra déjà 20, d'où l'obligation de la remettre à 0...
Pour éviter ceci mettez le DIM Ligne_concernée As Integer juste après le SUB Depart()
à ce moment là la portée de cette variable sera limité à la Sub en question.
Le net ou ce site parle certainement de la portée des variables !
@ bientôt
LouReeD
Je vous remercie pour cette piste, mais lorsque je rentre une valeur vide ou une valeur non numérique j'obtiens un message d'erreur, et la macro s'interrompt, m'invitant à déboger mon code.
Attention je ne répondais qu'à :
Ligne_concernee = 0 ' Autrement il semble que la variable Ligne_concernee garde sa dernière valeur qui peut être supérieur à 0
@ bientôt
LouReeD
J'ai trouvé une solution peut-être pas la meilleure, mais la voici :
Option Explicit
Public Reponse As Variant, Ligne_concernee As Integer, Numero_Colonne As Integer
Sub Depart()
Reponse = InputBox("Quel est le numéro recherche ?")
If Not IsNumeric(Reponse) Then
MsgBox ("Veuillez entrer une valeur numérique s.v.p., merci")
End If
Reponse = Val(Reponse)
On Error Resume Next
Ligne_concernee = 0 ' Autrement il semble que la variable Ligne_concernee garde sa dernière valeur qui peut être superieur a ˆ 0
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("B:B"), 0)
Numero_Colonne = 2
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("F:F"), 0)
Numero_Colonne = 6
End If
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("J:J"), 0)
Numero_Colonne = 10
End If
If Ligne_concernee = 0 Then
Ligne_concernee = Application.WorksheetFunction.Match(Reponse, Sheets("Les territoires").Range("N:N"), 0)
Numero_Colonne = 14
End If
If Ligne_concernee = 0 Then
MsgBox ("Ce numero n'existe pas !")
Exit Sub
End If
With Sheets("Les territoires")
If Not IsNumeric(Reponse) Then
MsgBox ("Veuillez entrer une valeur numérique s.v.p., merci")
If .Cells(Ligne_concernee, Numero_Colonne + 1) = "" Or .Cells(Ligne_concernee, Numero_Colonne + 2) = "" Then
MsgBox ("Il manque l'indication du titre et/ou du genre !")
End If
End If
End With
Recherche.Show
End Sub
J'ai tout simplement déclaré la variable Reponse As Variant, puis une fois le test effectué j'ai converti cette même variable en numérique, et cela fonctionne. Bon j'ai deux message qui s'affichent un qui demande d'entrer une valeur numérique, puis l'autre qui m'indique que le numéro n'existe pas. Il y t-il une possibilité pour que le 2eme message ne s'affiche pas. Merci.
LouReeD a écrit :Attention je ne répondais qu'à :
Ligne_concernee = 0 ' Autrement il semble que la variable Ligne_concernee garde sa dernière valeur qui peut être supérieur à 0
@ bientôt
LouReeD
Ah ! ok, j'avais mal compris.
J'ai fini par trouver une solution :
Ligne_concernee2 = 0
Reponse = InputBox("Quel est le numéro recherche ?")
If Not IsNumeric(Reponse) Then
Ligne_concernee2 = 1
MsgBox ("Veuillez entrer une valeur numérique s.v.p., merci")
End If
.................
With Sheets("Les territoires")
If .Cells(Ligne_concernee, Numero_Colonne + 1) = "" Or .Cells(Ligne_concernee, Numero_Colonne + 2) = "" Then
If Ligne_concernee2 = 0 Then
MsgBox ("Cette fiche est vide !")
End If
End If
End With
Par contre si je rentre une valeur numérique suivi d'un (ou de plusieurs) caractère, la macro me signale bien une erreur, mais elle m'affiche quand même le numéro de la fiche. Un vrai casse-tête.
le casse tête commence peut-être ici :
Je sais que je devrais poster un fichier, mais là je ne pense pas que cela soit nécessaire
@ bientôt
LouReeD
Mon problème est résolu. Merci à vous.