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 - Boucle de recherches [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : avril 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut VBA - Boucle de recherches
    Bonjour à tous,
    Je débute sur VBA (et sur ce forum!) et je suis bloquée pour réaliser la demande suivante (cf image en pj).

    J'ai
    > un tableau de paires de mots clés dont chaque association crée une catégorie spécifique
    > une liste de libellés pouvant contenir les mots clés et pour lesquels je recherche la catégorie

    L'objectif est que chaque libellé soit affecté d'une catégorie en fonction des mots clés qu'il contient.

    Comment faire pour que la macro:
    > pour chaque ligne de libellé, parcourt toute la liste des paires de mots clés et affecte la bonne catégorie
    > Si elle ne trouve pas de catégorie, renvoie "Catégorie manquante"
    > Passe au libellé suivant une fois qu'elle a terminé le premier etc...

    Un VLOOKUP sous excel serait trop fastidieux car j'ai énormément de lignes.
    J'ai essayé d'écrire une macro avec IF dans une boucle DO UNTIL, mais je n'y arrive pas.

    Un grand merci pour vos conseils !
    Bonne journée,
    Aurélie
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    mars 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2019
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    Bonsoir à toutes et tous
    Bonsoir Aurélie

    Je te propose ceci (si j'ai bien compris )

    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
    Sub libelles()
    ' créer un tablo_xx par mots cle
        ' tablo_01 = array( cellule "sport" et cellule "tennis", cellule "indiv"
        tablo_01 = Array(Range("A19") & " " & Range("B19"), Range("C19"))
        tablo_02 = Array(Range("A20") & " " & Range("B20"), Range("C20"))
        tablo_03 = Array(Range("A21") & " " & Range("B21"), Range("C21"))
        tablo_04 = Array(Range("A22") & " " & Range("B22"), Range("C22"))
        tablo_05 = Array(Range("A23") & " " & Range("B23"), Range("C23"))
    ' créer un tablo récapitulatif
        montablo = Array(tablo_01, tablo_02, tablo_03, tablo_04, tablo_05)
     
    ' boucle sur les libelles
    For i = 19 To 23 ' à adapter
        ' mavar = "sport tennis"  ' exemple: D19
        mavar = Split(Range("D" & i), " ")(1) & " " & Split(Range("D" & i), " ")(2)
     
        p = Application.Match(mavar, Application.Index(montablo, , 1), 0)
        ' pour test vérif, à supprimer
        MsgBox p
        ' pour test vérif, à supprimer
        MsgBox montablo(p - 1)(1)
        ' à "envoyer" dans la cellule "catégorie finale
        Range("E" & i) = montablo(p - 1)(1)
    Next i
     
    End Sub
    bien entendu c'est à adapter

    Tu dis

    Eric

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    mars 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2019
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    Re

    Si tu as beaucoup de lignes de mots-cle :

    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 libelles_grande_liste()
    Dim a As Integer, i As Integer, p As Integer
    Dim tablo() As String
     
    ReDim tablo(12, 1)  ' à adapter : le 12 est le nombre de lignes de mots cle
     
    ' boucle sur les mots-cle
    For a = 19 To 30  ' à adapter : lignes du tableau
        tablo(a - 19, 0) = Range("A" & a) & " " & Range("B" & a)
        tablo(a - 19, 1) = Range("C" & a)
    Next a
     
    ' boucle sur les libelles
    For i = 19 To 30 ' à adapter
        mavar = Split(Range("D" & i), " ")(1) & " " & Split(Range("D" & i), " ")(2)
        p = Application.Match(mavar, Application.Index(tablo, , 1), 0)
        Range("E" & i) = tablo(p - 1, 1)
    Next i
     
    End Sub

    A+
    Eric

  4. #4
    Candidat au Club
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : avril 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Eric,
    Un grand grand merci d'avoir pris de le temps de m'aider !
    Ca fonctionne bien avec la deuxième approche car j'ai en effet beaucoup de lignes !

    Merci beaucoup pour ces précieux conseils !

    Bonne journée,
    Aurélie

  5. #5
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    mars 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2019
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    Bonsoir Aurélie

    Content pour toi. Merci du retour

    Eric

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 423
    Points : 50 375
    Points
    50 375
    Billets dans le blog
    92
    Par défaut
    Salut.

    Perso, je pense qu'il faut déjà un très grand nombre de lignes (qu'il serait utile que tu précises), surtout dans le tableau des mots-clés, pour qu'un code VBA itératif aille plus vite qu'une formule Excel, à mon avis.

    Combien de lignes dans ton tableau des mots-clé? Combien de lignes dans ton tableau final? Je serais curieux de faire le test. L'avantage de la formule est que si tes tableaux grandissent, tu ne dois pas relancer le code VBA...

    Nom : 2021-04-15_092154.png
Affichages : 32
Taille : 141,7 Ko

    Si j'avais à réaliser ce travail, je commencerais par traiter les données pour les éclater dans 3 colonnes (Prénom, clé 1, clé 2), ce qui simplifierait beaucoup le traitement et l'analyse des données. Je pense que beaucoup de code VBA pourrait être supprimé si on prenait le temps de travailler "comme il faut", et donc de passer par la première étape qui est la préparation des données.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Candidat au Club
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : avril 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Pierre,

    Merci pour votre retour.
    Dans mon exemple, j'ai beaucoup simplifié les éléments, mais en réalité, les libellés contenant les mots clés ne sont pas aussi structurés.
    Le nombre de mots clés et de libellés peut également varier régulièrement, donc je ne peux pas fixer le nombre de lignes.
    J'ai réussi à faire un code VBA simple qui permet de traiter les éléments de cette façon !

    Merci beaucoup et bonne journée,
    Aurélie

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 423
    Points : 50 375
    Points
    50 375
    Billets dans le blog
    92
    Par défaut
    Citation Envoyé par ANDev Voir le message
    [...]
    Dans mon exemple, j'ai beaucoup simplifié les éléments, mais en réalité, les libellés contenant les mots clés ne sont pas aussi structurés.[...]
    D'où ma remarque, régulièrement exprimée sur les forums, qu'il est préférable de donner la situation réelle plutôt que "simplifier", qui amène à des réponses éventuellement inadaptées. C'est un peu comme si tu disais "Je n'arrive pas à piloter mon Cessna monomoteur" alors qu'en fait, tu te débats dans le cockpit d'un 747
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XL-2013] VBA - Création d'une boucle avec recherche de variable
    Par samyou91 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2018, 10h40
  2. Réponses: 3
    Dernier message: 02/02/2018, 22h20
  3. Réponses: 1
    Dernier message: 16/03/2007, 14h26
  4. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23
  5. [VBA] Algo de recherche de doublons
    Par guams dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/07/2004, 17h10

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