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 :

Extraction des chiffres pour créer un nombre dans une chaîne alphanumérique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Par défaut Extraction des chiffres pour créer un nombre dans une chaîne alphanumérique
    Bonjour,

    Je souhaiterais extraire uniquement les chiffres contenu dans plusieurs cellules pour ensuite pouvoir les comparer.
    Je souhaite intégrer cela dans une macro VBA.

    par exemple, j'ai ARF234 et df234 dans deux cellules différentes. Le but étant que si le nombre créé par les chiffres extraits dans les 2 cellules sont les mêmes (ici ce sera donc 234) alors la condition est vrai et donc action.

    Quelqu'un peut-il m'aider pour effectuer cette extraction et surtout bien obtenir deux chiffres à comparer (sachant qu'il faut aussi que je considère peut-etre le cas où certaines cellules ne contiennent pas de chiffres)?

    Bonne journée

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une solution consiste a se créer sa propre fonction

    Cette proposition retourne EGAL si identique sinon PAS EGAL

    A mettre dans un module
    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 CompareNombre(rg1 As Range, rg2 As Range) As String
     
    Dim Lng1 As Long
    Dim Lng2 As Long
     
    Dim i As Integer
     
    For i = 1 To Len(rg1.Value)
        If IsNumeric(Mid(rg1.Value, i, 1)) Then Lng1 = Lng1 & Mid(rg1.Value, i, 1)
    Next i
    For i = 1 To Len(rg2.Value)
        If IsNumeric(Mid(rg2.Value, i, 1)) Then Lng2 = Lng2 & Mid(rg2.Value, i, 1)
    Next i
     
    CompareNombre = IIf(Lng1 = Lng2, "EGAL", "PAS EGAL")
     
    End Function
    A utiliser en formule

  3. #3
    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 nimiquel

    pour jfontaine

    ca marche mieux comme ca

    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
     
     
    Function CompareNombre(rg1, rg2) As String
     
    Dim Lng1 As Long
    Dim Lng2 As Long
     
    Dim i As Integer
     
    For i = 1 To Len(rg1.Value)
        If IsNumeric(Mid(rg1.Value, i, 1)) Then Lng1 = Lng1 & Mid(rg1.Value, i, 1)
    Next i
    For i = 1 To Len(rg2.Value)
        If IsNumeric(Mid(rg2.Value, i, 1)) Then Lng2 = Lng2 & Mid(rg2.Value, i, 1)
    Next i
     
    CompareNombre = IIf(Lng1 = Lng2, "EGAL", "PAS EGAL")
     
    End Function
    Sub voyons_si_c_est_egal()
    lareponse = CompareNombre(Range("A1"), Range("A2"))
    MsgBox lareponse
    End Sub

    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

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Salut Patrick

    Que veux tu dire par
    ca marche mieux comme ca

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Par défaut
    Bon je suis mauvais en codage mais comment intégrer votre fonction dans mon if?

    Voici le code alors le if de départ qui ne marchait pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        For nw = 2 To Nb_Lignes
            For nz = 2 To Nb_LigneC
     
    If (Sheets("Global").Range("G" & nw) Like Sheets("EPR").Range("F" & nz)) Then
     
    Sheets("Global").Range("P" & nw) = Sheets("EPR").Range("F" & nz)
    Sheets("Global").Range("Q" & nw) = Sheets("EPR").Range("G" & nz)
    Sheets("Global").Range("R" & nw) = Sheets("EPR").Range("H" & nz)
    Sheets("Global").Range("S" & nw) = Sheets("EPR").Range("AX" & nz)
     
    End If
     
            Next nz
        Next nw
    Merci encore pour l'aide.

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Essais comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CompareNombre(Sheets("Global").Range("G" & nw),Sheets("EPR").Range("F" & nz)) = "EGAL" then

  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 re
    bonjour jfontaine

    j'ai essayer ton code comme tu l'a donné et visiblement les variables

    n'etait pas pris en compte comme elle devait l'etre
    d'ou le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lareponse = CompareNombre(Range("A1"), Range("A2"))
    a la place de ta version

    en ayant le type de variable dans la fonction et non dans l'appel a la fonction

    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Par défaut
    Il me sort une "incompatibilté de type" sur la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To Len(rg1.Value)
    Je crois comprendre que cela arrive lorsque je n'ai pas de chiffre dans ma chaîne de caractère ou que la cellule est vide.
    Sinon je crois que ça marche sans problème.
    Ca mérite une condition supplémentaire c'est ça? Vous avez une piste?

  9. #9
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ca mérite une condition supplémentaire c'est ça?
    Dans le cas une cellule vide on aura
    D'ou un problème car le pas d'avancement d'une boucle For est + 1

    Ajoutes un test de contrôle que tes cellules sont bien pleines
    Ce test peut être ajouté à la fonction

  10. #10
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Tu peux utiliser aussi la fonction val et t'inspirer de la partie "Extraire toutes les valeurs numériques (entiers et décimales) contenues dans une chaîne" de ce tutoriel sur la manipulation des chaines de caractères: http://silkyroad.developpez.com/VBA/...racteres/#LI-P

    Cordialement.

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

Discussions similaires

  1. [RDF] Extraction des concepts pour un terme à partir d'une ontologie ODP
    Par khaled87 dans le forum Ontologies
    Réponses: 0
    Dernier message: 05/03/2014, 10h11
  2. Incrémenter des nombres dans une chaîne
    Par shaun_the_sheep dans le forum SQL
    Réponses: 19
    Dernier message: 25/04/2012, 10h46
  3. Récupérer un nombre dans une chaîne de caractères
    Par yougoudai dans le forum Général Python
    Réponses: 9
    Dernier message: 23/09/2007, 21h01
  4. [MySQL] Récupérer un nombre dans une chaîne
    Par Phenol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2007, 21h28
  5. Réponses: 2
    Dernier message: 15/10/2005, 23h29

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