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.

Rechercher des sujets similaires à "test valeur entree numerique"