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 :

[VBA-E] Utiliser Find


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut [VBA-E] Utiliser Find
    En essayant de me servir de Find, j'ai échoué lamentablement.

    A vrai dire, l'un des deux exemples (celui de la FAQ ou le manuel de Rabilloud) plante meme (probablement par ma faute).

    Sans réellement en avoir besoin dans l'immédiat, serait-il possible d'avoir des explications claires et concises et eventuellement que celà s'ajoute à la FAQ?
    (ps "recherche" avec Find sur le forum n'a rien donné pour moi)

  2. #2
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Bonjour,

    Citation Envoyé par sk8bcn
    (ps "recherche" avec Find sur le forum n'a rien donné pour moi)
    Moi j'ai 64 réponses dans la recherche ...

    De plus, as-tu regardé dans l'aide VBA d'Excel car il y a un exemple de l'utilisation de la méthode Find ...

    +

    Théo

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello,
    Regarde si tu peux adapter ça ou au moins comprendre la philosophie de find

    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
        message = CVar(Format(CDate(LaDate), "dd/mm/yyyy"))
        Plage = Cells(1, 1).CurrentRegion.Address(RowAbsolute:=False, _
        ColumnAbsolute:=False)
        NouvelleLigne = Worksheets("Feuil2").Cells(65535, 1).End(xlUp).Row + 1
        Do
            With Worksheets("Feuil1").Range(Plage)
                Set CestLa = .Find(message, LookIn:=xlValues, LookAt:=xlPart)
                If Not CestLa Is Nothing Then
                        Rows(Range(CestLa.Address).Row).EntireRow.Copy Worksheets("Feuil2").Rows(NouvelleLigne)
                        Rows(Range(CestLa.Address).Row).Delete Shift:=xlUp
                    Else
                        MsgBox "Date inexistante"
                        Exit Do 'sortie de boucle si plus de correspondance
                End If
            End With
            NouvelleLigne = Worksheets("Feuil2").Cells(65535, 1).End(xlUp).Row + 1
            Plage = Cells(1, 1).CurrentRegion.Address
        Loop While Not CestLa Is Nothing
        Set CestLa = Nothing
    Tu dis


    PS - Ecoute THEO, m'étonnerait que tu ne trouves rien à FIND en recherche sur le forum

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    en fait, dans ma boite ils ont desactivé l'aide vba (pas super pratique). Sinon Ousk' je vais regarder ça!

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Citation Envoyé par ouskel'n'or
    Rows(Range(CestLa.Address).Row).EntireRow.Copy
    c'est peut etre ça qui me gene le plus. Find me sors un range c'est bien ça? ou l'adresse de la premiere cellule trouvée? Si oui, comment j'accede au contenu du find ou à son adresse.

    imaginons que je veux trouver sur la colonne 1 un nom avec find. A coté du nom je veux enregistrer sa date de naissance. cela ressemblerait à quoi?

    Par ailleurs entre un "find Marcel"
    et un while nom<>"Marcel" i=i+1, je gagne quelque chose en temps de traitement?

  6. #6
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Citation Envoyé par sk8bcn
    en fait, dans ma boite ils ont desactivé l'aide vba (pas super pratique). Sinon Ousk' je vais regarder ça!
    Voici un lien pour l'aide VBA sur le net ...
    C'est pas top mais ça a au moins le mérite d'exister
    Aide VBA online

    Et plus particulièrement l'adie pour Find Aide sur la méthode Find

    +

    Théo

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    NoLigne = Range(CestLa.Address).Row
    te donne la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NoCol = Range(CestLa.Address).Column
    te donne la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne, NoCol + 1). value = DateDeNaissance
    Te permet de placer ce que tu veux

    Tu dis

    A+

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je réponds à ta seconde question :
    Par ailleurs entre un "find Marcel"
    et un while nom<>"Marcel" i=i+1, je gagne quelque chose en temps de traitement?
    Quand tu mets "do While" "nom" "<" ">" "Marcel" -> loop" compte le nombre d'instructions
    Quand tu mets "i" "=" "i" "+" "1" compte encore
    Quand tu mets "If" "Cells("i","NoCol").value "=" "Nom" "then" ... "Endif" -> Compte toujours

    etc.

    As-tu ta réponse ?

    Un instruction est toujours plus rapide que l'utilisation d'une variable

    PS - J'ajoute que quand tu compares "Marcel" à nom, es-tu sûr que ce ne soit pas "MARCEL" ? Auquel cas tu devras ajouter
    UCase(Nom) = UCase("Marcel")
    Maintenant, suppose qu'un espace ait été ajouté à la fin de "Marcel " (erreur fréquente) tu devras ajouter
    UCase(Nom) = trim(UCase(Cells(i,NoCol).value))
    Juste pour te donner une idée...
    find ne pose pas ce problème.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Par rapport au post à ouskel'

    j'en deduis:

    -donc find est bien plus rapide (point 1)
    -find ne ferai pas la difference entre majuscule et minuscule? ou il faudrait que j'utilise UCase?
    .find(Ucase(worksheets("").cells(.,.)",....): ce genre de codage est correct?

    par ailleurs:
    si je n'ai pas le problème de l'espace, alors j'en déduis (à tord probablement) que find repere la premiere occurence de la chaine de caractère?

    C'est à dire que, si je cherche Marcel, et que j'ai un Marcel-Simon dans la liste, il me repere Marcel-Simon?

    Dernier point: find cherche t'il dans toutes les cellules, ou s'arrete t'il à la premiere trouvée?

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    au fait merci à Theo et Ousk', of course

  11. #11
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Citation Envoyé par sk8bcn
    Dernier point: find cherche t'il dans toutes les cellules, ou s'arrete t'il à la premiere trouvée?
    Oui la fonction Find s'arrête à la première occurence. Il faut utiliser la méthode FindNext ou FindPrevious pour répéter la recherche à partir de la dernière occurence trouvée.

    [EDIT]La boucle s'effectue en boucle, il faut donc, pour arrêter la boucle de recherche, enregistrer l'adresse de la première cellule trouvée et la comparer avec l'adresse trouvée après. [/EDIT]

    Bonne continuation

    Théo

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

Discussions similaires

  1. [VBA-E] Utilisation .Find pour une recherche
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/12/2006, 13h18
  2. [VBA]xl*-Utiliser F1...F12 dans un form
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 40
    Dernier message: 27/01/2006, 11h34
  3. VBA/xl97 - Utilisation boîtes dialogs intégrées
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2005, 16h39
  4. [vba excel] Utilisation de .borders
    Par steps5ive dans le forum Access
    Réponses: 3
    Dernier message: 22/09/2005, 15h02
  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