Fonction de recherche : pbm pour le else.

[Résolu]
Signaler
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour, c'est encore moi
Je vous écris cette fois par rapport à un code qui permet de faire une recherche automatique et qui pose pbm?. Je voudrais dans le cas du "else"  : permettre directement de retourner à la fin de la boucle.

Voici le code :

Dim message As String
Dim Plage, LaDate
Dim j As Byte


Do


j = j + 1
Sheets("FeuilPERIMETRE").Select
Cells(j, 1).Select
message = Selection
   
    Sheets("FeuilHSI").Select
    Plage = Cells(1, 1).CurrentRegion.Address
    NouvelleLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1
          With Worksheets("FeuilHSI").Range(Plage)
            Set Cestla = .Find(message, LookIn:=xlFormulas, LookAt:=xlWhole)
                             
            If Not Cestla Is Nothing Then
                    Rows(Range(Cestla.Address).Row).EntireRow.Copy Worksheets("FeuilRECOPIE").Rows(NouvelleLigne)
                    Rows(Range(Cestla.Address).Row).Delete Shift:=xlUp
                Else
                     'je voudrais aller à "loop until j=350", afin d'incrémenter j de+1 et de commencer une nouvelle recherche lorsque la recherche n'est pas fructueuse. est-ce qeu je peux utiliser "else goto line x"?
           End If
        End With
        DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1
    'boucle "tant que message = valeur dans la cellule sélectionnée, recommence la recherche"
  
    Set Cestla = Nothing


Loop Until j = 350

J'ai marqué ma difficultée en vert dans le code; quelqu'un pourrait-il me débloker

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,
pas besoin de GOTO logiquement...

Sub MaSub() 
Dim message As String 
Dim Plage, LaDate 
Dim j As Byte 

Do 

    j =  j + 1 
    Sheets("FeuilPERIMETRE").Select 
    Cells(j, 1).Select 
    message = Selection 

    Sheets("FeuilHSI").Select 
    Plage = Cells(1, 1).CurrentRegion.Address 
    NouvelleLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1 
    With Worksheets("FeuilHSI").Range(Plage) 
        Set Cestla = .Find(message, LookIn:=xlFormulas, LookAt:=xlWhole) 

        If Not Cestla Is Nothing Then 
            Rows(Range(Cestla.Address).Row).EntireRow.Copy Worksheets("FeuilRECOPIE").Rows(NouvelleLigne) 
            Rows(Range(Cestla.Address).Row).Delete Shift:=xlUp 
            DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1 
        End If 
    End With 

    Set Cestla = Nothing 

Loop Until j = 350 
End Sub

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT  [AFCK]

<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
depuis quand on copie du code en double.....
si tibss veut faire un saut, logiquement c'est justement pour ne pas lire la ligne!!

et s'il voulait la lire, on place alors
DernièreLigne =  Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1
une seule fois, après le endif !
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
> s'il voulait la lire ?
Il voulait la lire puisqu' il l' a mis après End With.
Ecrite deux fois mais lu une seule.
Mais je reconnais que c' est une co^^erie de ma part.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
le with est ouvert avant le if, il doit être fermé après le endif. question de propreté. aucun rapport avec le endif lui-même.
s'il veut quitter avant c'est pas pour rien tu ne crois pas?

bref, à tibss de se manifester....
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

Bonjour en fait la ligne
"DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1" est utile dans le cas où la recherche a été fructueuse, et où la ligne entière correspondant au mot recherché doit-être recopiée.
Dans le cas où la recherche n'a pas été fructueuse, il n'y a pas de ligne à recopier; donc il ne n'est pas nécessaire décrire "DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1" après le else
Merci à tous les deux de m'avoir aidé en tout cas
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
pense à valider si çà te convient.....
++
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
Oui mais le problème c' est qu' il doit exécuter
 DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1
 dans tous les cas.

Et donc mettre
......
else
  DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1
  goto line x
End If
 DernièreLigne = Worksheets("FeuilRECOPIE").Cells(65535, 1).End(xlUp).Row + 1

x:
Loop Until j = 350 
End Sub