Test valeur entrée non numérique Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
PapouMAC
Membre fidèle
Membre fidèle
Messages : 203
Appréciations reçues : 5
Inscrit le : 15 novembre 2015
Version d'Excel : MAC 2011 FR

Message par PapouMAC » 9 décembre 2015, 19:20

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.
L'indulgence, c'est de ne pas oublier ses débuts.
Excel 2016 MAC
MAC Pro Quad-Core, MACOS 10.13.6
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 9 décembre 2015, 20:17

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
PapouMAC
Membre fidèle
Membre fidèle
Messages : 203
Appréciations reçues : 5
Inscrit le : 15 novembre 2015
Version d'Excel : MAC 2011 FR

Message par PapouMAC » 9 décembre 2015, 20:32

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.
L'indulgence, c'est de ne pas oublier ses débuts.
Excel 2016 MAC
MAC Pro Quad-Core, MACOS 10.13.6
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 9 décembre 2015, 20:42

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
PapouMAC
Membre fidèle
Membre fidèle
Messages : 203
Appréciations reçues : 5
Inscrit le : 15 novembre 2015
Version d'Excel : MAC 2011 FR

Message par PapouMAC » 9 décembre 2015, 20:48

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.
L'indulgence, c'est de ne pas oublier ses débuts.
Excel 2016 MAC
MAC Pro Quad-Core, MACOS 10.13.6
Avatar du membre
PapouMAC
Membre fidèle
Membre fidèle
Messages : 203
Appréciations reçues : 5
Inscrit le : 15 novembre 2015
Version d'Excel : MAC 2011 FR

Message par PapouMAC » 9 décembre 2015, 21:31

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.
L'indulgence, c'est de ne pas oublier ses débuts.
Excel 2016 MAC
MAC Pro Quad-Core, MACOS 10.13.6
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 9 décembre 2015, 22:02

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
PapouMAC
Membre fidèle
Membre fidèle
Messages : 203
Appréciations reçues : 5
Inscrit le : 15 novembre 2015
Version d'Excel : MAC 2011 FR

Message par PapouMAC » 9 décembre 2015, 23:13

Mon problème est résolu. Merci à vous.
L'indulgence, c'est de ne pas oublier ses débuts.
Excel 2016 MAC
MAC Pro Quad-Core, MACOS 10.13.6
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message