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 :

Différencier 1 et 10 dans une formule [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Par défaut Différencier 1 et 10 dans une formule
    Bonjour,

    dans mon programme j'ai besoin d'extraire uniquement le chiffre contenu dans une cellule qui elle contient lettres et chiffres.

    voici comment je procède :

    Je fait une boucle pour "scanner" les cellules en question et j'applique cette formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pos = InStr(Range("N" & j).Value, i)
     
                If pos > 0 Then
     
                contenu = Range("N" & j).Value
                pos2 = Mid(contenu, pos, 1)
     
                End If
    celà fonctionne bien pour un chiffre de 1 à 9, pos2 me renvoi le bon chiffre mais lorsque j'ai 10 dans la cellule scannée, le prgomme prends également le 1..

    Auriez-vous une astuce?

    Merci!

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 85
    Par défaut
    Je suis pas sûr d'avoir bien compris, mais si tu veux extraire un chiffre d'une chaine de caractere tu as la fonction val() qui fait le boulot toute seule.

    En tout cas cette fonction devrait te simplifier la tache.

  3. #3
    Invité
    Invité(e)
    Par défaut Avec une fonction
    Bonjour,

    Avec une fonction à condition que les chiffres se suivent. S'il y a plusieurs séries de chiffres, c'est la première qui sera prise en compte.

    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
    46
    47
     
    Function RechercheDeNombres(Cellule As Range)
     
    Dim NbChiffres As Integer
    Dim I As Integer
    Dim J As Integer
     
        RechercheDeNombres = 0
     
        If Len(Cellule) > 0 Then
     
            NbChiffres = 0
     
            For I = 1 To Len(Cellule)
                Select Case Mid(Cellule, I, 1)
                    Case 0 To 9
                        NbChiffres = NbChiffres + 1
                End Select
            Next I
     
            Select Case NbChiffres
                Case 1
                     For I = 1 To Len(Cellule)
                        Select Case Mid(Cellule, I, 1)
                           Case 0 To 9
                               RechercheDeNombres = Val(Mid(Cellule, I, 1))
                        End Select
                     Next I
                 Case Len(Cellule)
                        RechercheDeNombres = Val(Cellule)
                 Case Else
                      For J = NbChiffres To 1 Step -1
                          For I = 1 To (Len(Cellule) - J)
                              Select Case Val(Mid(Cellule, I, J))
                                 Case Is > 0
                                      RechercheDeNombres = Val(Mid(Cellule, I, J))
                                      Exit For
                              End Select
                          Next I
                          If RechercheDeNombres > 0 Then Exit For
                      Next J
     
            End Select
     
        End If
     
    End Function

    Cordialement.
    Dernière modification par Invité ; 22/05/2013 à 12h44.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 11
    Par défaut
    merci pour ta réponse mais ce n'est pas trop ce que je recherche (je vais quand même essayer de gratter avec val())

    Je résume grossomodo ce sur quoi je bute..

    En faite je peux avoir plusieurs chiffres dans une cellule. Et contrairement à la fonction val() qui extrait tous les chiffres je veux que chaque chiffre de la cellule soit extrait de la manière suivante :

    J'ai une boucle i = 1 à 50 par exemple et ce qu'il me faut c'est lorsque i est dans la cellules, mettre la valeur de i dans une "variable" ou une autre cellule.

    seulement quand par exemple il y a 10 dans la celulle scannée et que i = 1, ca me renvoi quand même la valeur puisque je ne peux pas différencier le chiffre 1 du 1 du nombre 10...

    C'est plus clair? Je mettrais un exemple en PJ sinon.

    Merci!

    pardon Erik je n'avais pas vu ta réponse avant de poster...

    J'étudie ce que tu me propose. Merci en tout cas!

  5. #5
    Membre éprouvé
    Inscrit en
    Mai 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 85
    Par défaut
    Ok. En gros il faut que tu parcours ta chaine de caractère jusqu'à trouvé un chiffre, puis une fois que tu as trouvé un chiffre que tu cherche si le prochain caractère est un chiffre jusqu'à ce que ça n'en soit pas un.

    Un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for i=1 to len(cells(...).value)
        if isnumeric(mid(cells(...).value,i,i)) then
             finchiffre=i
             while isnumeric(mid(cells(...).value,finchiffre+1,finchiffre+1)) then
                 finchiffre=finchiffre+1
             wend
        end if
        chiffre=mid(cells(...).value,i,finchiffre)
        i=finchiffre
    Next i
    Après tu préfererais peut-être récupérer tes chiffres dans un tableau. Enfin la structure doit fonctionner.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    Bonjour,

    Si j'ai bien compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function sc(Cellule As Range) 
    Dim Matches
        With CreateObject("vbscript.regexp")
        .Global = False
        .Pattern = "\d{1,}"
        Set Matches = .Execute(Cellule.Text)
            If Matches.Count >= 1 Then sc = Matches(0) * 1  
        End With
    End Function
    JP

  7. #7
    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 heu
    bonjour
    essaie ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub recup_le_chiffres()
    MsgBox resultat([a5])' adapte la cellule a ton cas 
    End Sub
    Public Function resultat(cel As Range)
    Do
    i = i + 1
    If IsNumeric(Mid(cel.Value, i, 1)) Then resultat = resultat & Mid(cel.Value, i, 1)
    Loop Until i = Len(cel.Value)
    End Function
    Au plaisir
    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

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut differencier 1 et 10 dans une formule
    bonjour Patrick et Pmp87,

    Patrick :
    La cellule testée contient chiffre et lettre d'après le premier message.

    Par conséquent si la cellule contient "a10bc25d" taproposition renverra "1025".

    je pense que Pmp87 souhaite n'extraire que 10 et 25 (chaque série de chiffre qui se suivent).

    JPierreM :
    Ton code répond bien au problème tel que je l'ai compris.

    j'aimerai bien, pour ma culture, que tu explique un peu ce code que je ne comprend pas.

    cordialement.

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

Discussions similaires

  1. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  2. concaténation en vba dans une formule de cellule Excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 22h58
  3. Réponses: 8
    Dernier message: 13/04/2005, 15h40
  4. Réponses: 6
    Dernier message: 18/01/2005, 16h24
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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