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 :

Macro de recherche


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 94
    Par défaut
    Bonjour,

    Je souhaite pouvoir par le biais d'un bouton "recherche", rechercher un mot clef contenu dans une cellule des colonnes B, C, D et E. Pour cela je souhaiterais parcourir toutes les cellules de ces 4 colonnes, et que si jamais par exemple je recherche le mot "controle", qu'il détecte même la cellule contenant "opérateur de controle".

    Voici la macro que j'ai mais qui ne correspond pas du tout à mon besoin puisque celle ci s'applique à une seule colonne, et que s'il y a un vide la macro s'arrête alors que moi je ne veux pas m'arrêter (je veux parcourir les lignes 2 à 100), et que la il faut que le mot de recherche soit égale au cnotenu de la cellule...

    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
    Sub recherche()
     
    Message = "Entre le nom à chercher"
    Title = "Recherche d'une nom"
    MyValue = InputBox(Message, Title, Default)
    Range("B1").Select 'entre la première cellule de la colonne des noms
    For I = 1 To 50 'max de ligne dans ta colonne
    If ActiveCell.Value = MyValue Then GoTo Fin
    If ActiveCell.Value = "" Then GoTo Fin
    ActiveCell.Offset(1, 0).Range("A1").Select
    Next
    Fin:
     
     
    End Sub
    Sinon j'ai ce code qui marche très bien mais il faut que le mot soit identique à la cellule or je voudrais que le mot soit ou identique à la cellule ou contenu ds la cellule. Aussi je voudrais que la macro ne sarrete pas au mot trouvé, mais qu'elles ne laisse affiché que les lignes ou ont été trouvé le mot...



    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
    29
    30
    31
    32
    33
    Sub Recherche_Mot()
     
    Dim Str_Plage As String
    Dim Cel As Range
    Dim Feuil As Worksheet
    Dim Str_critère As String
    Dim X As Byte
     
    Str_critère = InputBox("Mot à rechercher (quelque soit la langue)?")
    For Each Feuil In Sheets
    Str_Plage = Feuil.UsedRange.Address
    For Each Cel In Feuil.Range(Str_Plage)
    If UCase(Cel) = UCase(Str_critère) Then
    X = MsgBox("Mot """ & Str_critère & """ trouvé :" & Chr(13) & Chr(13) & _
    "Cliquer Oui pour voir la traduction," & Chr(13) & _
    "Non pour continuer la recherche," & Chr(13) & _
    "Annuler pour arrêter la recherche." & Chr(13), vbDefaultButton1 + _
    vbQuestion + vbYesNoCancel, "MOT TROUVÉ")
    Select Case X
    Case 6
    Feuil.Activate
    Cel.Activate
    Exit Sub
    Case 2 'annuler on sort
    Exit Sub
    Case Else 'Non=7
    'on fait rien, mais on pourrait
    End Select
    End If
    Next Cel
    Next Feuil
    MsgBox ("pas trouvé")
    End Sub

  2. #2
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut avec la fonction instr...
    salut,
    ton second code est pas mal mais plutôt que de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(Cel) = UCase(Str_critère) Then
    essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, UCase(Cel).value, UCase(Str_critère)) > 0 Then
    ça devrait marcher...
    à+
    zigo

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 94
    Par défaut
    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
    29
    30
    31
    32
    33
    Sub Recherche_Mot()
     
    Dim Str_Plage As String
    Dim Cel As Range
    Dim Feuil As Worksheet
    Dim Str_critère As String
    Dim X As Byte
     
    Str_critère = InputBox("Mot à rechercher (quelque soit la langue)?")
    For Each Feuil In Sheets
    Str_Plage = Feuil.UsedRange.Address
    For Each Cel In Feuil.Range(Str_Plage)
    If InStr(1, UCase(Cel).Value, UCase(Str_critère)) > 0 Then
    X = MsgBox("Mot """ & Str_critère & """ trouvé :" & Chr(13) & Chr(13) & _
    "Cliquer Oui pour voir la traduction," & Chr(13) & _
    "Non pour continuer la recherche," & Chr(13) & _
    "Annuler pour arrêter la recherche." & Chr(13), vbDefaultButton1 + _
    vbQuestion + vbYesNoCancel, "MOT TROUVÉ")
    Select Case X
    Case 6
    Feuil.Activate
    Cel.Activate
    Exit Sub
    Case 2 'annuler on sort
    Exit Sub
    Case Else 'Non=7
    'on fait rien, mais on pourrait
    End Select
    End If
    Next Cel
    Next Feuil
    MsgBox ("pas trouvé")
    End Sub

    Ca me dis "Objet requis"

    Ou ça me dit Argument ou appel de procédure incrorrect.

    Aussi, j'aimerais que dans ce code ça me laisse affiche toutes les lignes ou le mots est contenu ds une cellule et que ça masque les autres lignes...

  4. #4
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    re,
    es-tu sur(e) que les nom de variable avec minuscule accentuée sont corrects ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Str_critère As String
    ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Str_critere As String
    me semblerait plus correct...
    à+
    zigo

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 94
    Par défaut Non trouvé
    Ok merci. Par contre maintenant ça ne me trouve rien!


    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
    29
    30
    31
    32
    33
    Sub Recherche_Mot()
     
    Dim Str_Plage As String
    Dim Cel As Range
    Dim Feuil As Worksheet
    Dim Str_critere As String
    Dim X As Byte
     
    Str_critere = InputBox("Mot à rechercher?")
    For Each Feuil In ThisWorkbook.Sheets
    Str_Plage = Feuil.UsedRange.Address
    For Each Cel In Feuil.Range(Str_Plage)
    If InStr(0, UCase(Cel), UCase(Str_critère)) > 0 Then
    X = MsgBox("Mot """ & Str_critère & """ trouvé :" & Chr(13) & Chr(13) & _
    "Cliquer Oui pour voir la traduction," & Chr(13) & _
    "Non pour continuer la recherche," & Chr(13) & _
    "Annuler pour arrêter la recherche." & Chr(13), vbDefaultButton1 + _
    vbQuestion + vbYesNoCancel, "MOT TROUVÉ")
    Select Case X
    Case 6
    Feuil.Activate
    Cel.Activate
    Exit Sub
    Case 2 'annuler on sort
    Exit Sub
    Case Else 'Non=7
    'on fait rien, mais on pourrait
    End Select
    End If
    Next Cel
    Next Feuil
    MsgBox ("pas trouvé")
    End Sub

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 138
    Par défaut
    Excuse , il y avait une erreur dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, UCase(Cel), UCase(Str_critère)) > 0

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 138
    Par défaut
    et comme ça ?




    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
    29
    30
    31
    32
    33
    Sub Recherche_Mot()
     
    Dim Str_Plage As String
    Dim Cel As Range
    Dim Feuil As Worksheet
    Dim Str_critère As String
    Dim X As Byte
     
    Str_critère = InputBox("Mot à rechercher (quelque soit la langue)?")
    For Each Feuil In ThisWorkbook.Sheets
    Str_Plage = Feuil.UsedRange.Address
    For Each Cel In Feuil.Range(Str_Plage)
    If InStr(0, UCase(Cel), UCase(Str_critère)) > 0 Then
    X = MsgBox("Mot """ & Str_critère & """ trouvé :" & Chr(13) & Chr(13) & _
    "Cliquer Oui pour voir la traduction," & Chr(13) & _
    "Non pour continuer la recherche," & Chr(13) & _
    "Annuler pour arrêter la recherche." & Chr(13), vbDefaultButton1 + _
    vbQuestion + vbYesNoCancel, "MOT TROUVÉ")
    Select Case X
    Case 6
    Feuil.Activate
    Cel.Activate
    Exit Sub
    Case 2 'annuler on sort
    Exit Sub
    Case Else 'Non=7
    'on fait rien, mais on pourrait
    End Select
    End If
    Next Cel
    Next Feuil
    MsgBox ("pas trouvé")
    End Sub

  8. #8
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut colonnes B à E
    au lieu de :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Str_Plage = Feuil.UsedRange.Address
    tu remplaces par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Str_Plage = Feuil.Columns("B:E")
    pour masquer les lignes et afficher celles qui ont un mot trouvé c'est plus compliqué... à mon avis faut passer par un tableau qui mémorise les lignes à afficher puis masquer les autres... mais là je vais pas le tester à ta place...
    bonne journée.
    zigo

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour tous,
    Pourquoi faire simple quand ont peu faire compliquer ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim Cherche
    dim Cle
        Cle = "Control" : Plage = "A1:E500" 'par exemple
        Set Cherche = ActiveSheets.Range(Plage).Find(Cle)
        'Et ensuite tu peu faire ce que tu ceux avec Cherche
        'exemple
        Ou = Cherche.Address
    Si tu veux affiner ta recherche il y a les paramètres de Find, tu sélectionne le mot et tu tape F1.
    A+
    Edit :
    Eventuellement un classeur avec une démo de Find

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Salut,

    Effectivement, pourquoi faire compliqué quand on peut faire simple ? Un coup de sur .Find et on prend l'exemple mot à mot.

    Ca nous donne alors :

    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
    29
    30
    Sub test()
     
    Application.ScreenUpdating = False 'Désactivation affichage
     
    Dim mot As String
     
    mot = InputBox("Mot recherché ?") 'Mot recherché. Tu changes le texte d'accueil comme tu veux
     
    With Worksheets("Feuil1").Range("B2:E100") 'Recherche de B2 à E100 : change comme tu le souhaites
        Set c = .Find(mot, LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                Cells(c.Row, 1).Value = "OK" 'J'ai mis le marqueur colonne A. Si elle est utilisée mets le dans une autre colonne : remplace alors le 1 par le numéro de ta colonne
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    For i = 2 To 100 'Lignes 2 à 100. Change comme la plage de recherche si besoin
        If Range("A" & i).Value <> "OK" Then 'Remplace A par ta colonne où tu as mis ton marqueur
            Range("A" & i).EntireRow.Hidden = True 'Remplace A par ta colonne où tu as mis ton marqueur
        End If
    Next
     
    Columns(1).Clear 'Remplace 1 par ta colonne où tu as mis ton marqueur
     
    Application.ScreenUpdating = True 'Activation affichage
     
    End Sub
    La recherche marche comme tu le souhaites. J'ai aussi rajouté l'option qui permet de n'afficher que les lignes où le mot recherché a été trouvé. Les autres lignes ont donc été masquées. Je n'avais aucune envie de me prendre la tête avec un tableau, je suis donc passé par un marqueur en colonne A.

    Bref, cela fait ce que tu souhaites de A à Z.

    A+

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 94
    Par défaut Merci
    Merci DeaD78!!

    Trop cool ça marche parfaitement!

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

Discussions similaires

  1. macro _ recherche
    Par abouhossam dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/02/2008, 14h52
  2. [Macro de Recherche] Comment faire varier une 4eme variable
    Par Vin_SuFu_R@T dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/01/2008, 13h35
  3. macro : fonction recherche
    Par M8407108 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/12/2007, 00h45
  4. Macro de recherche dans WORD
    Par damall dans le forum VBA Word
    Réponses: 11
    Dernier message: 25/08/2007, 12h13
  5. Macro de recherche/remplace automatique
    Par phil011 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/08/2007, 12h00

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