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 :

Vérifier qu'un chiffre se répète un certain nombre de fois sans interruption


Sujet :

Macros et VBA Excel

  1. #21
    Invité
    Invité(e)
    Par défaut
    Merci.
    Dernière modification par LittleWhite ; 15/04/2018 à 16h41.

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Patrick,

    Je retire ce que j'ai dit (mais je te laisse le +1 , car ça m'a donné l'idée)... Ca me renvoie YES même si les chiffres ne se suivent pas (je n'avais pas testé avant d'applaudir, mais en relisant ton code, je ne voyais pas comment cela pouvait fonctionner)...

    Nom : 2018-03-21 13_39_16-Classeur1 - Excel.png
Affichages : 450
Taille : 9,0 Ko

    Mais ton idée est bonne... Voici ton code modifié pour que cela fonctionne (selon la demande initiale qui était de spécifier un chiffre bien défini). Comme quoi il y a souvent plusieurs chemins...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function CompteChiffre1(Valeur As String, Chiffre As Long, Repetition As Long)
      Dim Chaine As String
     
      Chaine = String(Repetition, Chiffre & "")
      CompteChiffre1 = UBound(Split(Valeur, Chaine)) > 0
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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...
    ---------------

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Un grand merci Pierre, c'est parfait!

    Merci à tous pour vos solutions, vous êtes géniaux!!!

  4. #24
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    autre solution basique mais simple si l'on veut viser plus spécialement un chiffre avec sa répétition au minimum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function repet(Cel As Range, chiffre)
        repet = IIf(InStr(Cel.Value, chiffre) >= 1, "Yes", "No")
    End Function
    Ex. valeur de Cel : 456555567
    =repet(B2;555)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #25
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Ce que j'apprécie particulièrement dans cette discussion (mais dans d'autres aussi), c'est que les différentes approches permettent à des utilisateurs de tous niveaux de s'y retrouver et d'avoir une solution à leur portée. L'important est qu'il y a d'abord une obligation de résultat, et c'est ce qu'illustre Arnaud


    Citation Envoyé par arnaudgalinier Voir le message
    [...]La solution que j'envisage (vous allez avoir peur) et de recopier ce code dans plusieurs colonne en modifiant chaque fois le chiffre que je veux voir s'il est dupliqué.
    C'était aussi une solution, comme celle de Ryu qui, pour être basique mais simple, comme il dit, n'en est pas moins fonctionnelle (pour la question initiale).

    L'approche de Ryu, qui plus est, permettrait, pour la question initiale, basiquement mais simplement, de se passer de VBA...

    Nom : 2018-03-21 14_22_34-Classeur1 - Excel.png
Affichages : 261
Taille : 9,1 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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...
    ---------------

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Arnaud,

    Voici une solution qui teste qu'au moins un chiffre (n'importe lequel) est répété x fois. (attention aux crasses à la recopie)

    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
    Function SuiteChiffreOk(Valeur As String, Repetition As Long) As Boolean
      Dim RegExp As Object
      Dim Pattern As String
      Dim Rep As String
      Dim Counter As Long
     
      Rep = "{" & Repetition & "}"
      Pattern = "0"
      For Counter = 1 To 9
        Pattern = Pattern & Rep & "|" & Counter
      Next
      Set RegExp = CreateObject("VBScript.RegExp")
      RegExp.Pattern = Pattern
      SuiteChiffreOk = RegExp.test(Valeur)
      Set RegExp = Nothing
    End Function
    En fait j'ai un petit soucis, le code fonctionne pour la première ligne, mais quand j'étire la formule je ne comprends pas les résultats qui ressortent (voir ci-dessous) :
    Nom : Capture.PNG
Affichages : 297
Taille : 15,0 Ko

    Pièce jointe 362995

    Pour info dans ma colonne N, le nombre sont en format nombre.

  7. #27
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Sorry, j'avais oublié de placer la répétition sur le 9.

    Voici un code qui fonctionne (j'ai ajouté Pattern = Pattern & Rep après la boucle).

    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 SuiteChiffreOk(Valeur As String, Repetition As Long) As Boolean
      Dim RegExp As Object
      Dim Pattern As String
      Dim Rep As String
      Dim Counter As Long
     
      Rep = "{" & Repetition & "}"
      Pattern = "0"
      For Counter = 1 To 9
        Pattern = Pattern & Rep & "|" & Counter
      Next
      Pattern = Pattern & Rep
      Set RegExp = CreateObject("VBScript.RegExp")
      RegExp.Pattern = Pattern
      SuiteChiffreOk = RegExp.test(Valeur)
      Set RegExp = Nothing
    End Function
    Question subsidiaire: Ca doit compter sur les valeurs avec décimales ou tu considères que ta suite de chiffres est une chaine de caractères?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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...
    ---------------

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Parfait, encore un grand merci!

    Je considère la suite de chiffres comme un chaine de caractère, autrement dit je m'en fiche des décimales, et encore autrement dit votre code correspond parfaitement à ma demande.

  9. #29
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Avec le code que je te donne, si tu souhaites tester 122,222245 et voir si un chiffre se répète 6 fois de suite, la fonction renverra FAUX.

    Si tu veux que le comptage considère qu'il n'y a pas de décimales, tu devras utiliser la version suivante, dans laquelle je remplace , et . par rien. Par contre, il n'est pas nécessaire de se préoccuper du séparateur de milliers qui n'est pas passé à la fonction. A toi de voir

    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
    Function SuiteChiffreOk(Valeur As String, Repetition As Long) As Boolean
      Dim RegExp As Object
      Dim Pattern As String
      Dim Rep As String
      Dim Counter As Long
     
      Valeur = Replace(Replace(Valeur, ".", ""), ",", "")
      Rep = "{" & Repetition & "}"
      Pattern = "0"
      For Counter = 1 To 9
        Pattern = Pattern & Rep & "|" & Counter
      Next
      Pattern = Pattern & Rep
      Set RegExp = CreateObject("VBScript.RegExp")
      RegExp.Pattern = Pattern
      SuiteChiffreOk = RegExp.test(Valeur)
      Set RegExp = Nothing
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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...
    ---------------

  10. #30
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    un dérivé de la fonction simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function repetition(Cel As Range, repet As Byte)
    Dim i As Byte
        For i = 1 To Len(Cel.Value)
            If InStr(Cel.Value, String(repet, Mid(Cel.Value, i, 1))) >= 1 Then
                repetition = "Yes"
                Exit For
            Else
                repetition = "No"
            End If
        Next
    End Function
    Edit : pour ressembler à la 1ère (post #24) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function repetition(Cel As Range, repet As Byte)
    Dim i As Byte
        For i = 1 To Len(Cel.Value)
            repetition = IIf(InStr(Cel.Value, String(repet, Mid(Cel.Value, i, 1))) >= 1, "Yes", "No")
            If repetition = "Yes" Then Exit For
        Next
    End Function
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #31
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Pierre
    Ce que j'apprécie particulièrement dans cette discussion (mais dans d'autres aussi), c'est que les différentes approches permettent à des utilisateurs de tous niveaux de s'y retrouver et d'avoir une solution à leur portée
    les approches sont innombrables.
    En voilà une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    toto = "22122222213333333111177777777777744"
      nb = 6  ' la cndition.nombre minimum de répétitions
      titi = Split(StrConv(" " & toto, vbUnicode), Chr(0))
      meszozos = "": deja = ""
      For I = 0 To UBound(titi) - 1
        If InStr(deja, titi(I)) = 0 And toto Like "*" & String(nb, titi(I)) & "*" Then
           meszozos = meszozos & vbCrLf & titi(I)
           deja = deja & titi(I)
        End If
      Next
      MsgBox "liste des chiffres répétés au moins " & nb & " fois de suite" & IIf(meszozos <> "", meszozos, vbCrLf & "aucun")
    et si strconv peut en rebuter certains, voilà la même chose (un peu moins rapide) avec Mid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    toto = "22122222213333333111177777777777744"
      nb = 6  ' la cndition.nombre minimum de répétitions
      For I = 1 To Len(toto)
        c = Mid(toto, I, 1)
        If InStr(deja, c) = 0 And toto Like "*" & String(nb, c) & "*" Then
           meszozos = meszozos & vbCrLf & Mid(toto, I, 1)
           deja = deja & c
        End If
      Next
      MsgBox "liste des chiffres répétés au moins " & nb & " fois de suite" & IIf(meszozos <> "", meszozos, vbCrLf & "aucun")
    (je préfère la plus grande agilité de la première des deux. Le nombre de lignes de code n'est pas ce qui importe).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #32
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Patrick,

    Je retire ce que j'ai dit (mais je te laisse le +1 , car ça m'a donné l'idée)... Ca me renvoie YES même si les chiffres ne se suivent pas (je n'avais pas testé avant d'applaudir, mais en relisant ton code, je ne voyais pas comment cela pouvait fonctionner)...

    Nom : 2018-03-21 13_39_16-Classeur1 - Excel.png
Affichages : 450
Taille : 9,0 Ko

    Mais ton idée est bonne... Voici ton code modifié pour que cela fonctionne (selon la demande initiale qui était de spécifier un chiffre bien défini). Comme quoi il y a souvent plusieurs chemins...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function CompteChiffre1(Valeur As String, Chiffre As Long, Repetition As Long)
      Dim Chaine As String
     
      Chaine = String(Repetition, Chiffre & "")
      CompteChiffre1 = UBound(Split(Valeur, Chaine)) > 0
    End Function
    oui pierre j'avais pas compris qu'il fallait absolument que la valeur recherchée avec repetition devait se suivre
    en relisant l'enoncé en post 1 effectivement j'ai busé le "fois de suite" autant pour moi

    il y avait aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.rept(valeur,repetition)
    EDIT PETITE ADAPTATION D'UNE METHODE OU L'AUTRE
    et cela pour du texte ou des nombres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function comptechar(cel As Range, valeur, repetition As Long)
    comptechar = IIf(UBound(Split(cel.Value, Application.Rept(valeur, repetition))) > 0, "yes", "no")
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function comptechar(cel As Range, valeur, repetition As Long)
    comptechar = IIf(UBound(Split(cel.Value, String(repetition, valeur & ""))) > 0, "yes", "no")
    End Function
    formule texte
    =comptechar(A2;"a";5) ' teste si "a" est répété 5 fois
    =comptechar(A1;2;6)'teste si "2" est répété 6 fois
    mille excuse pour la meprise
    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. #33
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 948
    Points
    2 948
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Les possibilités étant innombrables, je me permet trois petits détours (Like, Replace et Instr)...
    Toutes sur le même schéma, un Do Loop sur le Split d'une constante afin d'en tirer tous les "pattern" possibles grâce à la fonction String.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Option Explicit
     
    Private Const STRP As String = "0 1 2 3 4 5 6 7 8 9"
     
    Sub MainTest()
    Dim m As String
        m = Inl("22234444", 0) & " " & Inl("22234444", 2) & " " & Inl("22234444", 4) & " " & Inl("22234444", 5) & vbCrLf
        m = m & Inr("22234444", 0) & " " & Inr("22234444", 2) & " " & Inr("22234444", 4) & " " & Inr("22234444", 5) & vbCrLf
        m = m & Ini("22234444", 0) & " " & Ini("22234444", 2) & " " & Ini("22234444", 4) & " " & Ini("22234444", 5)
        MsgBox m
    End Sub
     
    Function Inl(strC As String, lngRept As Integer) As Boolean
    Dim cpt As Integer, t
        If lngRept > 0 Then
            t = Split(STRP, " ")
            Do
                Inl = strC Like "*" & String(lngRept, t(cpt)) & "*"
                cpt = cpt + 1
            Loop While Not Inl And cpt <= 9
        End If
    End Function
     
    Function Inr(strC As String, lngRept As Integer) As Boolean
    Dim cpt As Integer, L As Integer, t
        If lngRept > 0 Then
            t = Split(STRP, " ")
            Do
                L = Len(Replace(strC, String(lngRept, t(cpt)), ""))
                Inr = ((Len(strC) - L) Mod lngRept = 0) And Len(strC) > L
                cpt = cpt + 1
            Loop While Not Inr And cpt <= 9
        End If
    End Function
     
    Function Ini(strC As String, lngRept As Integer) As Boolean
    Dim cpt As Integer, t
        If lngRept > 0 Then
            t = Split(STRP, " ")
            Do
                Ini = InStr(1, strC, String(lngRept, t(cpt))) > 0
                cpt = cpt + 1
            Loop While Not Ini And cpt <= 9
        End If
    End Function
    Cordialement,
    Franck

  14. #34
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour a tous

    je ne voudrais pas prolonger une discussion plus qu'il ne faut mais il me parraissait important d'attirer votre attention sur ce point

    POURQUOI LIMITER LA FONCTION A VRAI/FAUX OU YES/NO COMME VOUS VOULEZ

    je me suis dit
    1°et si je voudrais non pas savoir si oui ou non mais mais avoir le retour du nombre d'occurences chaine identiques qui se suivent
    et si je voudrais non pas savoir si oui ou non mais mais avoir le retour du nombre d'occurences chaine identiques qui ne se suivent pas forcement

    j'ai donc limité paradoxalement la fonction a retourner le nombre d'occurence et dans la formule je gere le vrai/faux par la condition si()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function comptechar(cel As Range, valeur, repetition As Long)
    comptechar = UBound(Split(cel.Value, Application.Rept(valeur, repetition)))
    End Function
    comme vous le voyez ci dessous tout se gere avec le 2d et 3eme argument de la fonction et le test ">" dans la condition "si()" selon mes besoins
    1. y a-t-il "2" 5 fois de suite dans la cellules la formule : =SI(comptechar(A3;2;3)>0;"yes";"no")
    2. combien de fois il y a "aaa" dans la cellule la formule =comptechar(A2;"a";3)
    3. y a-t-il "22" 3 fois de suite dans la cellules la formule : =SI(comptechar(A3;22;3)>0;"yes";"no")
    4. y a-t-il plusieurs fois "22" pas forcement qu'il se suivent dans la cellule la formule =SI(comptechar(A5;22;1)>1;"yes";"no")
    5. combien de fois il y a "22" pas forcement qu'il se suivent dans la cellule la formule =comptechar(A2;22;1)
    6. y a-t-il plusieurs fois "toto" pas forcement qu'il se suivent dans la cellule la formule =SI(comptechar(A5;"toto";1)>1;"yes";"no")

    demo
    Nom : Capture.JPG
Affichages : 232
Taille : 154,1 Ko

    a noter que j'aurais pu faire exactement la meme chose en utilisant un argument supplementaire dans un select case dans la fonction pour choisir le type/mode de retour de la fonction et ainsi se passer de la condition "si()" dans la formule
    j'ai voulu la garder la plus simple possible c'est pour cela que j'ai choisi cette methode

    a noter aussi par exemple en ligne 2 dans la capture j'aurais pu utiliser =comptechar(A2;"aaa";1)
    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

  15. #35
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 948
    Points
    2 948
    Billets dans le blog
    10
    Par défaut
    @Patrick,

    Le nombre d’occurrences est également sujet à interprétation.
    Ainsi, dans 22222234 on peut y voir :
    > 3 fois 22 :
    22222234
    > 5 fois 22 :
    22222234
    22222234
    22222234
    22222234
    22222234
    Cordialement,
    Franck

  16. #36
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour franck
    comme on teste une chaine et que en plus il est précisé "fois de suite" ton interprétation est erronée

    2222 n'est pas 3 fois 22 de suite comme tu le sous entends

    cela dit ta remarque est pertinante mais on parle de combinasion voir d'un nombre puissance len(....)

    2222
    le1 avec le 2d
    le 1 avec le 3eme
    le 1 avec le 4eme
    le 2d avec le 3eme
    etc...etc.....
    d'ailleurs il me semble avoir fait un exercice comme ca avec le regex celui ci me semble t il ,donnait bien le nombre sans les combinaison croisée
    a verifier
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. répéter un même caractère un certain nombre de fois
    Par s.rais dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/11/2010, 16h40
  2. [PHP-JS] recharger la page un certain nombre de fois
    Par Gunner4902 dans le forum Langage
    Réponses: 24
    Dernier message: 03/12/2008, 18h52
  3. select de valeurs enregistrées un certains nombre de fois
    Par diabli73 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/10/2008, 17h54
  4. [X] Imprimer un certain nombre de fois la meme page?
    Par lolo6413 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/04/2008, 17h18
  5. vérifier si un chiffre et pair ou impair
    Par teen6517 dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2007, 11h45

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