IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction Find VBA [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Fonction Find VBA
    Bonjour,

    Je viens de créer un petit code avec la fonction FIND, cependant je recontre un problème sur le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sheets("Travail").select
    If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
    True, SearchFormat:=True).Activate Then 
     
    Sheets("FRANCE").Select 
    Cells.Select 
    Selection.Delete Shift:=xlUp 
     
    Else 
     
    Sheets("Travail").Select 
     
    End If 
     
    Elseif If Cells.Find(What:="AVION_MAROC", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
    True, SearchFormat:=True).Activate Then 
     
    Sheets("MAROC").Select 
    Cells.Select 
    Selection.Delete Shift:=xlUp 
     
    Else 
     
    Sheets("Travail").Select 
     
    End Sub
    Si j'ai des données avec pays France dans ma sheet "Travail" il détecte et revient sur la première sheet, parcontre si il y en a pas, il bug et il s'arrête.

    Pouvez-vous m'aider ?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Ton code est mal écrit.

    1) Il y a un Else et un End If avant le ElseIf <- faux

    2) Lorsqu'il y a un ElseIf on met un seul et unique Else que sur la dernière condition.

    3) Il manque le End If à la fin.

    4) On écrit pas ElseIf If, mais ElseIf simplement.

    Voici ton code corrigé, mais si ça ne joue toujours pas, je ne vois pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        Sheets("Travail").Select
     
        If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
          :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
          True, SearchFormat:=True).Activate Then
            Sheets("FRANCE").Select
            Cells.Select
            Selection.Delete Shift:=xlUp
        ElseIf Cells.Find(What:="AVION_MAROC", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
          :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
          True, SearchFormat:=True).Activate Then
            Sheets("MAROC").Select
            Cells.Select
            Selection.Delete Shift:=xlUp
        Else
            Sheets("Travail").Select
        End If
    Cordialement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut MACRO TRI FIND
    Hello,

    Merci pour la correction, mais cependant lorsque j'active mon code, il prend
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Cells.Find(What:="AVION_FRANCE", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
          :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
          True, SearchFormat:=True).Activate Then
    Et le surligne automatiquement en jaune..

    Merci d'avance pour vos réponses

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu as tout intérêt à éviter les Select.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub Test()
    Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
    Dim c As Range
     
        Set Ws1 = Worksheets("Travail")
        Set Ws2 = Worksheets("FRANCE")
        Set Ws3 = Worksheets("MAROC")
     
        Set c = Ws1.Cells.Find("AVION_FRANCE", LookIn:=xlValues)
        If Not c Is Nothing Then
            Ws2.Cells.Delete
        Else
            Set c = Cells.Find("AVION_MAROC", LookIn:=xlValues)
            If Not c Is Nothing Then _
                Ws3.Cells.Delete
        End If
     
        Set c = Nothing
        Set Ws1 = Nothing
        Set Ws2 = Nothing
        Set Ws3 = Nothing
     
    End Sub
    Rq : J’ai supposé que "AVION_FRANCE" et "AVION_MAROC" sont des chaines de caractères inscrites dans la feuille "Travail".

    Cordialement.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut MACRO TRI SOLUTION
    Merci pour ce code, vraiment !

    Mais comment je peux intégrer à présent ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        For i = 1 To shSource.Range("A" & Rows.Count).End(xlUp).Row 
        Set Sh = Sheets(Range("C" & i).Value) 
        iCible = Sh.Range("A" & Rows.Count).End(xlUp).Row + 1 
        If iCible = 2 And Sh.Range("a1").Value = "" Then iCible = 1 
        shSource.Rows(i).Copy Sh.Range("A" & iCible) 
        'Vide la ligne Copiée 
        shSource.Rows(i).ClearContents 
        Next i
    Afin qu'une fois qu'il est détecter les pays, il aille mettre les nouvelles données dans les différentes sheet ?

    Et est-ce qu'il possible aussi de démarrer une autre macro après cette répartition ? Elle se nomme "Tricolonne".

    C'est une simple fonction, de tri et d'ajout de résultat sur chaque la sheet selectionné.

    Pouvez-vous m'aider ?

    Merci d'avance

    Bàv,

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Je te donne quelques éléments pour que tu puisses avancer.

    Dans la première procédure, tu as 3 feuilles :
    Ws1 , feuille "Travail"
    Ws2 , feuille "FRANCE"
    Ws3 , feuille "MAROC"
    Tu effectues une recherche dans la feuille "Travail".
    Si tu trouves le texte "AVION_FRANCE", tu effaces l’intégralité de la feuille "FRANCE"
    sinon,
    si tu trouves le texte "AVION_MAROC", tu effaces l’intégralité de la feuille "MAROC".

    Dans ta deuxième procédure il y a 2 feuilles : shSource (feuille source) et Sh (feuille cible).
    Tu effectues une boucle sur chaque ligne renseignée de la colonne A de la feuille source afin de récupérer les noms des feuilles cibles (lecture des cellules de la colonne C).
    Tu recherches le numéro de ligne de la feuille cible où effectuer l’ajout (iCible).
    Tu effectues un test pour vérifier si la première ligne est renseignée.
    Tu effectues une copie de la ligne de la feuille source vers la feuille cible (ligne iCible).
    Tu effaces la ligne de la feuille source.

    Il n’y a aucun lien entre les 2 procédures.

    Je crois comprendre que tu souhaites reprendre la première procédure et faire en sorte qu'après avoir détecté le pays, les nouvelles données soient inscrites dans la feuille correspondante.
    Il y a un point à éclaircir : avec la procédure actuelle, si tu trouves le texte "AVION_FRANCE" ou "AVION_MAROC", tu effaces l’intégralité de la feuille "FRANCE" ou "MAROC" (Ws2.Cells.Delete ou Ws3.Cells.Delete).
    Dans la feuille du pays, tu n’auras donc que la dernière ligne copiée.
    Je ne suis pas sûr que se soit la finalité.

    Tu as tout intérêt à décrire dans le détail de ce que tu veux faire.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [E-03] Aide sur la Fonction .Find dans VBA
    Par Gunsx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2009, 22h36
  2. VBA Access : Fonction find qui ne marche pas
    Par leeloo35 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/02/2008, 16h56
  3. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  4. [VBA-E]Fonction .find
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2006, 11h03
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo