Fonction de recherche : pbm pour le else.

Résolu
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006 - 11 sept. 2006 à 15:41
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 11 sept. 2006 à 17:46
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2006 à 15:57
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2006 à 16:26
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
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 sept. 2006 à 16:43
> 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.
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2006 à 16: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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
11 sept. 2006 à 17:18
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2006 à 17:46
pense à valider si çà te convient.....
++
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 sept. 2006 à 16:12
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
0
Rejoignez-nous