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 :

Tester la présence d'une expression dans une feuille excel.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut Tester la présence d'une expression dans une feuille excel.
    Bonjour,

    J'aimerai teste la présence d'une expression dans l'intégralité d'une feuille excel.

    j'ai plusieurs tableau dans cette feuille et pas forcément de point de repère.
    du coup l'utilisation d'une boucle est à proscrire je pense.
    De plus il fraudais respecter la case...donc si je recherche Test, il ne faut pas que la macro s'arrête sur Test2

    je me disais que de faire une recherche dans la feuille serait mieux.
    le top serai de renvoyer les valeur 0 ou 1 si la valeur est présente.

    à terme je colorerai le texte d'origine en vers ou rouge si la correspondance a été trouvée dans le tableau.

    merci beaucoup pour votre aide.

    Valery

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu sur le Forum,

    Pour ton besoin, tu peux utiliser en l'adaptant le code retourné sur l'aide Microsoft quant à la méthode Find.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par valery.petit Voir le message
    J'aimerai teste la présence d'une expression dans l'intégralité d'une feuille excel.

    à terme je colorerai le texte d'origine en vers ou rouge si la correspondance a été trouvée dans le tableau.
    Bonjour,

    Une proposition sans VBA, en formule donc, à mettre dans une MFC pour gérer automatiquement la couleur:
    =NB.SI(Feuil1!A:Z;"test")>0

  4. #4
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Bonjour, Merci à vous deux pour vos réponse.

    halaster08 : je préfère rester en VBA d'autant plus que je ne connais pas la taille de mon tableau d'origine qui change d'un projet à l'autre.


    MarcelG : effectivement ça semble être la bonne solution.

    J'ai testé ceci, mais ai un défaut "Boucle sans Do"......

    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
     
    Sub Valider_Tags()
     
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'On Boucle Chaque tags pour valider sa présence dans le catalogue.
    Nb_ligne_Valid = Range("F65536").End(xlUp).Row
    For Each Valid In Range("F3:F" & Nb_ligne_Valid)
     
    With Worksheets(Tags) '.Range("a:z")
        Set c = .Find("F" & c + 3, LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
        Do
     
        ' On colore le tags en vert si présence validée
            Range("firstAddress").Select
            With Selection.Font
            .Color = -11489280
            .TintAndShade = 0
     
            Loop While Not c Is Nothing
        End If
    End With
     
    Next Valid
     
    End Sub

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    C'est là qu'on comprend tout l'intérêt d'indenter le code correctement !!!
    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
    Sub Valider_Tags()
    Nb_ligne_Valid = Range("F65536").End(xlUp).Row
    For Each Valid In Range("F3:F" & Nb_ligne_Valid)
        With Worksheets(Tags) '.Range("a:z")
            Set c = .Find("F" & c + 3, LookIn:=xlValues)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    Range("firstAddress").Select
                    With Selection.Font
                        .Color = -11489280
                        .TintAndShade = 0
                    End With
                Loop While Not c Is Nothing
            End If
        End With
    Next Valid
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Valery,

    Les messages d'erreur Excel VBA ne sont certes pas toujours explicites.

    Il te manque une fin de bloc.
    Regarde les Do, With.....
    Un conseil pour éviter ce genre d'erreur.
    Bien indenter le code. A chaque bloc(Do, With....), mettre en retrait le code placé à l'intérieur.

    Autre chose. Tu peux ôter ces f... Select qui n'ajoutent rien au code, si ce n'est que de l'alourdir.

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Patrice,


    Pas de Select!!
    Ce code ne correspond pas à l'aide en ligne de la fonction Find.
    En effet, la boucle s'effectue tant que c n'est pas rien, certes, mais aussi tant que l'objet trouvé n'a pas la même adresse que la 1ère.

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut Patrice, ...
    C'est pas moi qui demande de l'aide, j'ai n'ai fait qu'indenter son code sans aucune modification pour lui monter où est son erreur "Boucle sans Do" !
    Avançons pas à pas ...

  9. #9
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Oui effectivement j'avais coupé collé un bout de code crée avec l'enregistreur d'Excel et avais oublié un morceau visiblement.

    Je supprime le .Select, ça veux dire que j'en ai pas besoin au vu de l'avancement du programme?

    actuellement l'expression à vérifier est dans l'onglet Tags et je veux vérifier qu'elle soit dans l'onglet Catalogue.
    auquel cas je lui donne la couleur verte.

    J'ai un peu modifié le code pour m'assurer d'être dans le bon tableau. -> ligne 9

    Il y a toujours une erreur '438' : Propriété ou méthode non gérée par l'objet -> ligne 9

    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
     
    Sub Valider_Tags()
     
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'On Boucle Chaque tags pour valider sa présence dans le catalogue.
    Nb_ligne_Valid = Range("F65536").End(xlUp).Row
    For Each Valid In Range("F3:F" & Nb_ligne_Valid)
        With Worksheets(3) '.Range("a:z")
            Set C = .Find("Tags!F" & C + 3, LookIn:=xlValues)
            If Not C Is Nothing Then
                firstAddress = C.Address
                Do
    ' On colore le tags en vert si présence validée
                    'Range("firstAddress").Select
                    With Selection.Font
                        .Color = -11489280
                        .TintAndShade = 0
                    End With
                Loop While Not C Is Nothing
            End If
        End With
    Next Valid
    End Sub

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    re
    bonjour a tous
    je dis peut etre une sottise (vous me direz)
    mais la question etait de tester la presence d'une expression dans une plage et pas de mettre en evidence cette expression
    un countif(vba ou formule) ferait parfaitement l'affaire je crois

    cela dit histoire de mettre tout le monde d'accord
    je me pose une question pourquoi mettre un format conditionel sur les cellule DEJA!! trouvée avec find??????
    pourquoi ne pas mettre un format conditionel sur toute la plage vous aurez le meme resultat et pas de code!!!!!
    je dis ca moi ,je dis peut etre une sottise hein ???

    surtout que les format conditionels peuvent etre cumulés et donc on peu mettre en evidence diverses expressions dans une meme cellules
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Je suis perdu là....

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    un exemple
    code optenue avec l'enregistreur que j'ai nétoyé
    on va mettre en evidence tout les "toto" et "titi" dans la plage "A18:A24"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
        With Sheets(1).Range("A18:A24")    'modifier ta plage ici ainsi que le sheets 
            .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""toto"""
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            .FormatConditions(1).Interior.Color = vbGreen
     
            .FormatConditions(1).StopIfTrue = False
            .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""titi"""
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            .FormatConditions(1).Interior.Color = vbRed
            .FormatConditions(1).StopIfTrue = False
        End With
    End Sub
    il te sera facile d'en faire une fonction et d'avoir toto et titi en variable dynamique

    resultat
    Nom : Capture.JPG
Affichages : 527
Taille : 36,1 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Merci patricktoulon sur le coup je n'avais pas compris, mais effectivement c'est plus simple.

    du coup ça me donne ça.
    Je n'ai pas de défaut, mais par contre rien ne se passe lorsque j’exécute le code....

    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 Valider_Tags()
     
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'On Boucle Chaque tags pour valider sa présence dans le catalogue.
    Nb_ligne_Valid = Range("F65536").End(xlUp).Row
    For Each Valid In Range("F3:F" & Nb_ligne_Valid)
    Tag_Rech = Range("F" & Valid.Row).Value
     
        With Worksheets(3).Range("a:z")
            Set C = .Find(Tag_Rech, LookIn:=xlValues)
            If Not C Is Nothing Then
                firstAddress = C.Address
                'Do
    ' On colore le tags en vert si présence validée
                    'Range("firstAddress").Select
                   With Sheets(1).Range("F3:F65536")    'modifier ta plage ici ainsi que le sheets
                    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""toto"""
                    .FormatConditions(.FormatConditions.Count).SetFirstPriority
                    .FormatConditions(1).Interior.Color = vbGreen
                    End With
                'Loop While Not C Is Nothing
            End If
        End With
    Next Valid
    End Sub

  14. #14
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    désolé j'ai pas fini mon café ce matin....

    je corrige et je reteste.

  15. #15
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Voici

    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
     
     
    Sub Valider_Tags()
     
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'On Effaces les anciennes régles de la feuille
        Cells.FormatConditions.Delete
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'On Boucle Chaque tags pour valider sa présence dans le catalogue.
    Nb_ligne_Valid = Range("F65536").End(xlUp).Row
    For Each Valid In Range("F3:F" & Nb_ligne_Valid)
    Tag_Rech = Range("F" & Valid.Row).Value
     
        With Worksheets(3).Range("a:z")
            Set C = .Find(Tag_Rech, LookIn:=xlValues)
            If Not C Is Nothing Then
                firstAddress = C.Address
     
    ' On colore le tags en vert si présence validée
                    'Range("firstAddress").Select
                   With Sheets(1).Range("F3:F65536")    'modifier ta plage ici ainsi que le sheets
                    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=Tag_Rech
                    .FormatConditions(.FormatConditions.Count).SetFirstPriority
                    .FormatConditions(1).Interior.Color = vbGreen
                    End With
               End If
        End With
    Next Valid
    End Sub

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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