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 :

boucle sur un find [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut boucle sur un find
    Bonjour,

    Je cherche à tester la présence d'une adresse mail contenue dans une chaine de caractère. Les chaines de caractères sont dans une colonne.Si l'adresse mail est présente je voudrai la transférer dans une nouvelle colonne. J'ai commencé en utilisant range.Find() pour mettre la chaine dans un tableau. Mon probleme est ensuite de faire une boucle pour tester toute la colonne. Est ce que c'est la bonne façon de procéder?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub chercheMot()
        Dim Tableau() As String
        Dim cell As Range
     
        Set cell = Columns("B:B").Find(What:="connexion")
     
        If Not cell Is Nothing Then
            Tableau = Split(cell, ":")
        End If
     
     
     End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    La méthode que tu utilises est correcte pour rechercher une valeur une seule fois dans une colonne.
    Tu pourrais ajouter les paramètres LookIn:=xlValues (valeur recherchée dans le texte de la cellule et pas la formule) et LookAt:=xlPart
    xlPart si la valeur que tu recherches est une partie de la cellule visée, autrement xlWhole si la valeur = exactement le contenu de la cellule.

    Si, par contre, tu veux rechercher plusieurs cellules contenant un certain terme, il faut ajouter un FindNext dans une boucle pour poursuivre la recherche.
    Tu peux voir un bon exemple dans l'aide.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Merci!

    Je suis finalement passé par quelquechose de plus adapté. Il faut juste que je mette une plage sous forme de variable. Je compte parser les éléments du tableau à la recherche de l'adresse mail. Est ce qu'il y a une methode plus fine?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub chercheMot()
        Dim Tableau() As String
        For Each cellule In [B1:B5]
            If cellule Like "*connexion*" Then
                Tableau = Split(cellule, ":")
            End If
        Next
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
     End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Sans connaître le genre de valeurs que tu recherches/lis et le nombre de lignes que tu dois parcourir, c'est difficile à dire

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    parmi, j'ai mis un exemple en pièce jointe. J'ai modifié le code. Je n'arrive pas à me débarrasser de la chaine "Numero de téléphone".
    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 chercheMot()
    'recuperation adresse mail et copie dans la cellule à droite
        Dim Tableau() As String
        For Each cellule In Range([B1], Cells(Rows.Count, 1).End(xlUp))
            If cellule Like "*contact*" Then 'recherche du mot "contact"
                Tableau = Split(cellule, ":")
                For Each valeur In Tableau 'les fragments sont mis dans un tableau
                    If valeur Like "*@*" Then
                        cellule.Offset(0, 1).Value = valeur 'si une chaine contient "@" elle est placé à droite de la cellule
                    End If
                Next
            End If
        Next
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
     End Sub
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par loncle Voir le message
    Est ce que c'est la bonne façon de procéder?
    La méthode Find est un bon choix et il suffit pourtant de l'utiliser comme dans l'exemple de l'aide VBA interne !
    Aide VBA à ouvrir donc, sans modération, autant de fois que nécessaire …

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    À partir de ta première approche, essaie ceci
    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
    Sub chercheMot()
    'recuperation adresse mail et copie dans la cellule à droite
        Dim Tableau() As String, Tablo
        For Each cellule In Range([B1], Cells(Rows.Count, 1).End(xlUp))
            If cellule Like "*contact*" Then 'recherche du mot "contact"
                Tablo = Split(cellule, vbLf)  'Split sur les sauts de ligne
                For i = 0 To UBound(Tablo)
                    Tableau = Split(Tablo(i), ":")
                    For Each valeur In Tableau 'les fragments sont mis dans un tableau
                        If valeur Like "*@*" Then
                            cellule.Offset(0, 1).Value = Trim(valeur) 'si une chaine contient "@" elle est placé à droite de la cellule
                        End If
                    Next
                Next
            End If
        Next
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
     End Sub

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Merci parmi. J'ai essayé avec Find et FindNext.
    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 chercheMot()
        Dim Tableau() As String
        Dim cell As Range
        Set cell = Columns("B:B").Find(What:="contact")
        premAdress = cell.Address
        Do
            Tableau = Split(cell, ":")
            For Each valeur In Tableau
                If valeur Like "*@*" Then
                    cell.Offset(0, 1).Value = Trim(valeur)
                End If
            Next
            Set cell = Columns("B:B").FindNext(cell)
        Loop While cell.Address <> premAdress
    End Sub

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

Discussions similaires

  1. Problème de boucle sur les sorties d'un find
    Par zouzze dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 09/05/2012, 15h51
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Boucle sur Selection.Find.Execute
    Par Dapangma dans le forum VBA Word
    Réponses: 4
    Dernier message: 12/08/2008, 08h57
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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