Fin de boucle IF sans avoir atteint la condition

Cekankonvaou

XLDnaute Junior
Bonjour à tous,

Je suis sur qu'il existe quelque chose de simple et plus propre que ce que je fais avec mes toutes petites connaissances :


J'ai dans une macro une boucle If qui vérifie une équivalence de variable dans un tableau. Si je trouve l'équivalence, pas de soucis...
Par contre, si j'arrive à la fin du tableau sans avoir trouvé d'équivalence, je dois envoyer un message d'alerte.

J'ai fait ça :
Code:
Sub Macro1()
'
' Macro1 Macro
'

var1 = Range("A1").Value
lgtab = Range("B300000").End(xlUp).Row

For i = 1 To lgtab + 1

    Select Case i
    
        Case Is <= lgtab
        
        var2 = Range("B" & i).Value
        If var1 = var2 Then
            MsgBox ("Valeurs identiques=") & var2
            GoTo line100
        End If
        
        Case Is > lgtab
        MsgBox ("NOK")
        Exit Sub
        
        
    End Select
  
Next i

line100: MsgBox ("FIN DE LA MACRO")


End Sub

et ça rend tout à fait ce que je veux. Par contre, pour progresser un peu, est ce qu'on peut faire ça plus simplement???

Merci d'avance pour vos réponses.

Bertrand
 

Pièces jointes

  • echec-fin-test.xlsm
    17 KB · Affichages: 52

Papou-net

XLDnaute Barbatruc
Re : Fin de boucle IF sans avoir atteint la condition

Bonjour Cekankonvaou,

Tout simplement comme ceci :

Code:
Sub Macro1()
var1 = Range("A1").Value
lgtab = Range("B300000").End(xlUp).Row

For i = 1 To lgtab + 1
    Select Case i
        Case Is <= lgtab
        var2 = Range("B" & i).Value
        If var1 = var2 Then
            MsgBox ("Valeurs identiques=") & var2
            Exit For
        End If
        Case Is > lgtab
        MsgBox ("NOK")
        Exit Sub
    End Select
Next i
MsgBox ("FIN DE LA MACRO")
End Sub
Enfin, si j'ai bien compris.

L'instruction Exit For permet de sortir de la boucle et de continuer le déroulement à sa suite.

Cordialement.
 

Cekankonvaou

XLDnaute Junior
Re : Fin de boucle IF sans avoir atteint la condition

Bonjour Papou-net et merci pour ta réponse,

En fait, ce n'est pas tout à fait ça que je cherche.
Ce que je cherche, c'est une commande qui me dirait : "je viens de finir ma boucle IF et je n'ai jamais trouvé l'égalité"...

(cela dit, merci pour le "Exit For", ça va pas mal me simplifier la vie pour d'autres choses)

Bertrand
 

Papou-net

XLDnaute Barbatruc
Re : Fin de boucle IF sans avoir atteint la condition

RE :

Peut-être comme ceci, alors :

Code:
Sub Macro1()
Dim Trouve As Boolean
var1 = Range("A1").Value
lgtab = Range("B300000").End(xlUp).Row

For i = 1 To lgtab + 1
    Select Case i
        Case Is <= lgtab
        var2 = Range("B" & i).Value
        If var1 = var2 Then
            MsgBox ("Valeurs identiques=") & var2
            Trouve = True
            Exit For
        End If
        Case Is > lgtab
        MsgBox ("NOK")
    End Select
Next i
If Trouve = False Then MsgBox ("FIN DE LA MACRO")
End Sub
Cordialement.
 

laetitia90

XLDnaute Barbatruc
Re : Fin de boucle IF sans avoir atteint la condition

bonjour tous
pourquoi pas utiliser FIND plus simple
exemple sans boucle

Code:
Dim a As Variant
 Set a = Range("b1", Cells(Rows.Count, "b").End(xlUp)).Find(Range("a1"), LookIn:=xlValues, LookAt:=xlWhole)
 If a Is Nothing Then MsgBox "pas present dans la boucle" Else MsgBox " present en.cellule b" & a.Row

on peut aussi avec FIND trouver toutes les occurences
 

Cekankonvaou

XLDnaute Junior
Re : Fin de boucle IF sans avoir atteint la condition

Bonjour Papou-net,

si je comprends bien, une variable de type Boolean peut être soit TRUE, soit FALSE. C'est bien ça??? Ou alors, ça peut être autre chose????

RE :

Peut-être comme ceci, alors :

Code:
Sub Macro1()
Dim Trouve As Boolean
var1 = Range("A1").Value
lgtab = Range("B300000").End(xlUp).Row

For i = 1 To lgtab + 1
    Select Case i
        Case Is <= lgtab
        var2 = Range("B" & i).Value
        If var1 = var2 Then
            MsgBox ("Valeurs identiques=") & var2
            Trouve = True
            Exit For
        End If
        Case Is > lgtab
        MsgBox ("NOK")
    End Select
Next i
If Trouve = False Then MsgBox ("FIN DE LA MACRO")
End Sub
Cordialement.



Bertrand
 

Cekankonvaou

XLDnaute Junior
Re : Fin de boucle IF sans avoir atteint la condition

Bonjour Laetitia90,

Merci pour ta réponse, c'est en effet beaucoup plus simple pour ce que je veux faire.
Peux tu me préciser quelques petites choses :
-LookIn:=xlValues, LookAt:=xlWhole : à quoi ça sert??
-quand tu dis qu'on peut trouver toutes les occurences, comment cela se traduit il??

bonjour tous
pourquoi pas utiliser FIND plus simple
exemple sans boucle

Code:
Dim a As Variant
 Set a = Range("b1", Cells(Rows.Count, "b").End(xlUp)).Find(Range("a1"), LookIn:=xlValues, LookAt:=xlWhole)
 If a Is Nothing Then MsgBox "pas present dans la boucle" Else MsgBox " present en.cellule b" & a.Row

on peut aussi avec FIND trouver toutes les occurences


Bertrand
 

laetitia90

XLDnaute Barbatruc
Re : Fin de boucle IF sans avoir atteint la condition

re ,tous
le code de base cela mais la on cherche avec un InputBox

Code:
Sub cherche_ToutesOccurences()
 nom = InputBox("Nom cherché?")
 Set champ = [B:B]
 champ.Interior.ColorIndex = xlNone
 Set c = champ.Find(nom, LookIn:=xlValues, LookAt:=xlWhole)
 If Not c Is Nothing Then
    premier = c.Address
    Do
      c.Interior.ColorIndex = 4
      Set c = champ.FindNext(c)
    Loop While Not c Is Nothing And c.Address <> premier
  End If
End Sub

dans ton cas dans ce style colore en rouge les occurences & l'adresse en colonne c

Code:
Application.ScreenUpdating = False
   Range("b1", Cells(Rows.Count, "b").End(xlUp)).Interior.ColorIndex = xlNone
   Set c = Range("b1", Cells(Rows.Count, "b").End(xlUp)).Find(Range("a1").Value, LookIn:=xlValues, LookAt:=xlWhole)
   If Not c Is Nothing Then
    premier = c.Address
    Do
    c.Interior.ColorIndex = 3
    Cells(Rows.Count, 3).End(xlUp)(2) = c.Address
    b = b + 1
    Set c = Range("b1", Cells(Rows.Count, "b").End(xlUp)).FindNext(c)
    Loop While Not c Is Nothing And c.Address <> premier
   End If
   If b = 0 Then MsgBox "fin de boucle pas d'occurences" Else MsgBox "NB...occurences=  " & b

LookIn précise dans quoi rechercher l'élément, xlFormulas, xlValues ou xlComments. A noter que si vous recherchez une date et que celle-ci est contenue dans une variable Date, vous devez choisir xlFormulas.

LookAt précise si la recherche s'effectue dans la cellule entière (xlWhole) ou non (xlPart).

il y d'autre facons de l'ecrire faire une recherche sur le forum pour cela
par exemple

UnePlage.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)

apres pour chercher des occurences d'autres methodes... les boucles les "tablos" les filtres
passer par un object Scripting.Dictionary ect...
 

Discussions similaires

Réponses
2
Affichages
153

Statistiques des forums

Discussions
312 222
Messages
2 086 390
Membres
103 199
dernier inscrit
ATS1