Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2011, 19h12   #1
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 218
Points : 28
Points : 28
Par défaut recherche la première valeur supérieure à la valeur cherchée

Bonsoir.

Voici une procédure qui recherche la première valeur supérieure à la valeur cherchée dans la colonne A.

2011001
2011002
2011003
2011004
2011005
2011006
2011007
2011008
2011009
2011010
2011011

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim lRange As Variant
 
ValTest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
If ValTest = 0 Or ValTest = "" Then Exit Sub
trouv = ""
dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
    For Each lRange In Range(dl) 
        If lRange.Value > ValTest Then  
            lRange.Select
            trouv = trouv & lRange
            valeurtrouvée = lRange.Address
            Exit For 
        End If
    Next lRange
If trouv = "" Then
    MsgBox "Pas de valeur (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
Else
    MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
End If
Je n’arrive pas à placer la détection d’une correspondance avec l'ensemble du texte recherché.

Exemple :
Si la valeur entrée = 20111, la première valeur supérieure trouvée dans la colonne A sera : 2011001, dans ce cas le message "Pas de valeur…., devra s’afficher.

Pourriez-vous m’indiquer une piste svp.

Merci d’avance.
modus57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h36   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Bonjour,

Ta variable valtest n'étant pas déclarée, elle est implicitement de type variant.
Du coup quand tu saisies 20111, valtest devient numérique (probablement Long)
20111 est bien plus petit que 2011001.

Si tu veux faire un test de type texte déclares ta variable en String
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h43   #3
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

Si j'ai bien compris ta demande
Citation:
Si la valeur entrée = 20111, la première valeur supérieure trouvée dans la colonne A sera : 2011001, dans ce cas le message "Pas de valeur…., devra s’afficher.
tu souhaites que 20111 soit interprété 2011100.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim lRange As Variant
Dim L As Integer
valtest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
If valtest = 0 Or valtest = "" Then Exit Sub
L = Len(valtest)
dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
    For Each lRange In Range(dl)
        If lRange.Value / 10 ^ (7 - L) > valtest Then
            lRange.Select
            trouv = trouv & lRange
            valeurtrouvée = lRange.Address
            Exit For
        End If
    Next lRange
If trouv = "" Then
    MsgBox "Pas de valeur supérieure à (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
Else
    MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
End If
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 21h59   #4
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 218
Points : 28
Points : 28
Bonsoir jfontaine, gFZT82.

Merci pour vos réponses, à prime abord elle ne sont pas concluantes.

J'ai déclaré la variable valtest et ajouté les lignes suivantes:

Code :
1
2
Set MyVar = Cells.Find(What:=valtest, LookAt:=xlWhole) 'Détecte une correspondance avec l'ensemble du texte recherché
If Not MyVar Is Nothing Then

Voici la procédure corrigée :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim lRange As Variant
Dim valtest As String
 
valtest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
If valtest = 0 Or valtest = "" Then Exit Sub
trouv = ""
dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
Set MyVar = Cells.Find(What:=valtest, LookAt:=xlWhole)
If Not MyVar Is Nothing Then
    For Each lRange In Range(dl)
        If lRange.Value > valtest Then
            lRange.Select
            trouv = trouv & lRange
            valeurtrouvée = lRange.Address
            Exit For
        End If
    Next lRange
End If
If trouv = "" Then
    MsgBox "Pas de valeur (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
Else
    MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
End If
Ça semble fonctionner.
modus57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h21.


 
 
 
 
Partenaires

Hébergement Web