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 :

chercher une occurence dans une cellule excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut chercher une occurence dans une cellule excel
    bonjour,
    j ai un tableau excel composé de deux colonnes A et B
    Dans la colonne A il y'a plusieurs lignes ,chaque ligne contient un texte quelconque, comment par macro vba chercher à l'interieur des cellules de A si une occurence composée de la lettre "p" suivie d'un espace et un seul chiffre, deux ou trois chiffres par exemple p 1 ou p 11 ou p 111 et si le resultat de la recherche est vraie la macro retourne vrai dans la colonne B
    Le même procédé pour "pp" suivie d'un espace et un seul chiffre, deux ou trois chiffres par exemple pp 1 ou pp 11 ou pp 111
    et merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 946
    Par défaut
    Salut, teste comme 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub ChercherOccurrences()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim i As Long
        Dim regex As Object
        Dim cellValue As String
     
     
        Set ws = ThisWorkbook.Sheets(1) ' Modifier le numéro de feuille si nécessaire
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        Set regex = CreateObject("VBScript.RegExp")
     
        For i = 1 To lastRow
            cellValue = ws.Cells(i, "A").Value
     
            ' Définir le modèle pour "p X", "p XX", "p XXX"
            regex.Pattern = "\bp\s\d{1,3}\b"
            If regex.Test(cellValue) Then
                ws.Cells(i, "B").Value = "Vrai"
            Else
                ' Définir le modèle pour "pp X", "pp XX", "pp XXX"
                regex.Pattern = "\bpp\s\d{1,3}\b"
                If regex.Test(cellValue) Then
                    ws.Cells(i, "B").Value = "Vrai"
                Else
                    ws.Cells(i, "B").Value = "Faux"
                End If
            End If
        Next i
     
        Set regex = Nothing
     
        MsgBox "Traitement terminé !", vbInformation
    End Sub

  3. #3
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 961
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    un essai avec une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Contient(Plage As Range, Modele As String) As Boolean
    Dim Cellule As Range
        Contient = False
        For Each Cellule In Plage
            Contient = Contient Or (Cellule.Value Like Modele)
        Next
    End Function
    dans la feuille de calcul

    à recopier vers le bas
    :bug:

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour,

    un essai avec une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Contient(Plage As Range, Modele As String) As Boolean
    Dim Cellule As Range
        Contient = False
        For Each Cellule In Plage
            Contient = Contient Or (Cellule.Value Like Modele)
        Next
    End Function
    dans la feuille de calcul

    à recopier vers le bas
    Merci pour l'intérêt accordé à ma question ,j'ai essayé la fonction et elle a afficher dans toutes les ligne l'expression "#NOM?" alors qu'il ya beaucoup de cellules qui contiennent l'expression.merci encore une fois tototiti2008.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, teste comme 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub ChercherOccurrences()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim i As Long
        Dim regex As Object
        Dim cellValue As String
     
     
        Set ws = ThisWorkbook.Sheets(1) ' Modifier le numéro de feuille si nécessaire
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        Set regex = CreateObject("VBScript.RegExp")
     
        For i = 1 To lastRow
            cellValue = ws.Cells(i, "A").Value
     
            ' Définir le modèle pour "p X", "p XX", "p XXX"
            regex.Pattern = "\bp\s\d{1,3}\b"
            If regex.Test(cellValue) Then
                ws.Cells(i, "B").Value = "Vrai"
            Else
                ' Définir le modèle pour "pp X", "pp XX", "pp XXX"
                regex.Pattern = "\bpp\s\d{1,3}\b"
                If regex.Test(cellValue) Then
                    ws.Cells(i, "B").Value = "Vrai"
                Else
                    ws.Cells(i, "B").Value = "Faux"
                End If
            End If
        Next i
     
        Set regex = Nothing
     
        MsgBox "Traitement terminé !", vbInformation
    End Sub
    merci Franc la macro est parfaite ,elle a résolu le problème

  6. #6
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 961
    Billets dans le blog
    2
    Par défaut
    Re,

    #NOM! signifie qu'il n'a pas trouvé la fonction, donc que son code n'a pas du être mis dans un module du classeur concerné, ou en tout cas qu'il ne reconnait pas son nom
    Elle fonctionne chez moi en tout cas

    un essai en PJ
    Fichiers attachés Fichiers attachés
    :bug:

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Re,

    #NOM! signifie qu'il n'a pas trouvé la fonction, donc que son code n'a pas du être mis dans un module du classeur concerné, ou en tout cas qu'il ne reconnait pas son nom
    Elle fonctionne chez moi en tout cas

    un essai en PJ
    merci mille fois ça marche parfaitement aussi avec votre fonction, l'erreur que j'ai commise c'est je n'ai pas mis la fonction dans un module,merci tototiti2008.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut
    Citation Envoyé par ABOUKONBOL Voir le message
    merci mille fois ça marche parfaitement aussi avec votre fonction, l'erreur que j'ai commise c'est je n'ai pas mis la fonction dans un module,merci tototiti2008.
    j'ai expérimenté la fonction mais il n'a pas donné les mêmes résultat que la procédure car le modèle "*p #*" ne répond pas à mon besoin, comment donc construire un modèle qui au lieu de mettre une"*" au début mettre un caractère générique qui signifie un espace vide car "*" peut remplacer plusieurs caractères alors moi je veux un signe qui désigne un espace vide au début du modèle pour que la fonction marche.+merci

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 160
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    comme ça ?


  10. #10
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 961
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    dans une comparaison basée sur Like, comme dans cette fonction
    ? représente un caractère inconnu
    * représente un nombre de caractères indéfinis inconnus
    # représente un chiffre inconnu
    puis il y a d'autres possibilités avec des crochets
    https://learn.microsoft.com/fr-fr/do.../like-operator

    S'il s'agit toujours d'un espace avant le p, alors mettez l'espace, sinon je suppose un ?
    :bug:

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

Discussions similaires

  1. chercher une condition d'un "if" dans une cellules excel
    Par Fireapple dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2019, 16h11
  2. formulaire dans une cellule excel
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/07/2006, 11h05
  3. Remplacer un texte dans une cellule Excel à partir d'un point donné
    Par tonyC dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2006, 20h05
  4. [VBA-PP]fonction qui écrit un chiffre dans une cellule excel
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/04/2006, 20h34
  5. Réponses: 4
    Dernier message: 15/04/2005, 16h25

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