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 :

Trouver une ligne contenant des valeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 124
    Points : 67
    Points
    67
    Par défaut Trouver une ligne contenant des valeurs
    Bonjour,

    Je cherche à créer une macro me permettant de trouver une cellule contenant une valeur spécifique (dans la colonne A).

    Par exemple, trouver la cellule contenant la valeurs "NOM".

    La Macro suivante ne me trouve pas la cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub chercher()
     
    Set a = Range("A:A").Find(NOM, lookat:=xlWhole)
     
    MsgBox a.Address
     
    End Sub

    Merci de votre aide. John81

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    2 ou 3 petites choses...
    • pense à déclarer tes variables
    • si j'ai bien compris, tu cherches la chaîne de caractères "NOM", il faut donc écrire NOM entre guillemets sinon VBA le prend comme une variable et cherchera le contenu de cette variable
    • tu dois ajouter une condition dans le cas où il ne trouve pas "NOM" sinon tu vas avoir un joli bug sur ta MsgBox


    Ce qui devrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub chercher()
    Dim a As Range
     
    Set a = Range("A:A").Find("NOM", lookat:=xlWhole)
     
    If Not a Is Nothing Then MsgBox a.Address '<-- pour avoir l'adresse sans les $ tu peux écrire a.Address(0, 0)
     
    End Sub

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 124
    Points : 67
    Points
    67
    Par défaut
    Merci bcp pour ta réponse Fring. C'est exactement ce dont j'avais besoin.

    Juste encore une petite question. Serait-il possible de trouver une ligne contenant les trois chaînes de caractères suivantes:

    "NOM" "PRENOM" "ADRESSE"
    En gros, je cherche à chercher toutes les lignes de titre.

    Merci de ton aide. John81

  4. #4
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, tu peux faire ça mais il te faut une boucle. En reprenant le code de cet excellent fring (salut fring) tu peux faire ça
    Je suppose que Prenom est dans la colonne B et l'adresse dans la colonne C
    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
    Function chercher(NOM$, Prenom$, Adresse)
    Dim c As Range, adres as string
    With Worksheets(NomDeLaFeuille).Range("A:A"))
        Set c = .Find(NOM, lookin:=xlValues)
        If Not c Is Nothing Then
            adres = c.Address 'Le nom a été trouvé
            Do
                'Vérifie que le prénom et l'adresse correspondent bien
                If Ucase (c.offset(0,1)) = Ucase(Prenom) and Ucase(c.offset(0,1)) = Ucase(Adresse) then 'la bonne ligne a été trouvé
                     chercher = c.address(0, 0) 'retourne l'adresse à la procédure Appel
                     Exit do
                endif
                Set c = .FindNext(c) 'Le prénom ou/et l'adresse ne correspondent pas, la recherche continue
            Loop While Not c Is Nothing And c.Address <> adres 
        End If
    End With
    End Function
    Pour appeler cette procédure, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Appel()
    Dim NOM$, Prenom$, Adresse$, Ladresse$
        NOM = "Martin"
        Prenom = "Arthur"
        Adresse = "Marseille"
        Ladresse = Chercher(NOM, Prenom,Adresse)
        Msgbox Ladresse 'pour tester
    End sub
    Bonne journée

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ce que l'excellent Ousk (salut Ousk ) te propose est une fonction qui va te permettre de trouver dans ta liste des personnes.

    Pour répondre à ta question
    En gros, je cherche à chercher toutes les lignes de titre.
    tu peux essayer ceci (NOM en colonne A, PRENOM en colonne B et ADRESSE en colonne C) :
    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
    Sub TEST()
    Dim Cel As Range, Adres1 As String, Result As String
     
    Set Cel = Range("A:A").Find(What:="NOM", LookIn:=xlValues, LookAt:=xlWhole) '<-- cherche "NOM" dans la colonne A
        If Not Cel Is Nothing Then '<-- si "NOM" est trouvé
            Adres1 = Cel.Address '<-- on mémorise l'adresse de la première occurence trouvée
            Do
                If Cel.Offset(0, 1) = "PRENOM" And Cel.Offset(0, 2) = "ADRESSE" Then '<-- si les cellules voisines contiennent "PRENOM" et "ADRESSE"
                    Result = Result & Chr(10) & Cel.Address(0, 0) '<-- on mémorise l'adresse de la ligne
                End If
                Set Cel = Range("A:A").FindNext(Cel) '<-- on continue la recherche
            Loop While Not Cel Is Nothing And Cel.Address <> Adres1 '<-- tant qu'on trouve "NOM" et que l'occurence trouvée est différente de la première occurence trouvée
        End If
     
    'affichage du résultat
    MsgBox "les lignes de titres sont :" & Chr(10) & Result
    End Sub

  6. #6
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 124
    Points : 67
    Points
    67
    Par défaut
    Merci beaucoup pour vos réponses à tous les deux. Bonne soirée. John81

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

Discussions similaires

  1. [XL-2010] Afficher une image contenant des valeurs changeantes dans une autre cellule
    Par TeethBrush3r dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/08/2013, 17h36
  2. [Débutant] extraite flottant et entier d'une ligne contenant des string
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 13
    Dernier message: 02/01/2012, 14h32
  3. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  4. Réponses: 2
    Dernier message: 25/04/2009, 20h46
  5. [FPDF] Tableau à une dimension contenant des valeurs
    Par kluck3000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/05/2008, 13h34

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