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 :

Extraire un chiffre ou un nombre dans une désignation


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut Extraire un chiffre ou un nombre dans une désignation
    Bonjour,

    Pour bien comprendre mon problème, je vais vous donner deux exemples :

    - 10+120 120*250X8 U => Cellule A1

    - 10+120 120*250X22 U => Cellule A2

    Le chiffre suivie du "X" donc 8 et 22 est le chiffre ou nombre que je souhaite extraire.
    Il sera toujours précédé d'un "X". Par contre, je ne veux pas le U.

    Comment faire en VBA?

    Merci de votre réponse rapide

    Cordialement

    Vincent CRESSONNIER

  2. #2
    Membre éprouvé Avatar de excfl
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 690
    Points : 1 250
    Points
    1 250
    Par défaut
    Bonjour le forum,

    Si après le "X" 1 ou 2 caractères à extraire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A1;CHERCHE("X";A1;1)+1;2)
    excfl
    Si cette proposition vous convient, merci de cliquer sur :

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Je voulais écrire la formule dans mon programme VBA.

    VOila ce que ça donne mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formula = "=STXT(B" & compteur & ";TROUVE("X";B" & compteur & ";1)+1;2)"
    Une solution

    Merci beaucoup pour tes informations

    Cordialement

    Vincent

  4. #4
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    A priori ceci devrait faire l'affaire. J'utilise l'objet cell qui permet de se déplacer de ligne en ligne simplement par de variable car je suppose que tu n'as pas que 2 données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
        Dim Var As String
        Dim Var2 As String
     
        Var = Trim(Mid(Cells(1, 1).Value, 16, 2))
        Var2 = Mid(Cells(2, 1).Value, 16, 2)
     
        MsgBox "A1 : " & Var & vbCrLf & "A2 : " & Var2
     
    End Sub
    Tu dis si cela te conviens
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim C As Range
    For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp))
        C.Offset(, 1).Value = Application.Substitute(C.Value, " U", "")
        C.Offset(, 1).Value = Split(C.Offset(, 1).Value, "X")(1)
    Next C
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,
    On peut faire cela sans VBA avec STXT et TROUVE

    Si en D1 par exemple vous mettez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A1;TROUVE("X";A1;1)+1;TROUVE("U";A1;1)-2-TROUVE("X";A1;1))
    Vous aurez en réponse 8

    Vous tirez cette formule vers le bas et en D2 vous aurez 22 comme réponse.

    On se sert de TROUVE pour déterminer la position de X et de U dans la chaîne de caractère qui est en Ax

    STXT est une fonction texte qui sert justement à extraire une sous chaine d'une chaine dans l'aide d'Excel on trouve

    STXT(texte, no_départ, no_car)
    MIDB(texte, no_départ, no_octets)
    La syntaxe des fonctions STXT et MIDB contient les arguments (argument : valeur qui fournit des informations à une action, un événement, une méthode, une propriété, une fonction ou une procédure.) suivants :

    texte Obligatoire. Représente la chaîne de texte contenant les caractères à extraire.
    no_départ Obligatoire. Représente la position dans le texte du premier caractère à extraire. Le premier caractère de texte a un no_départ égal à 1, et ainsi de suite.
    no_car Obligatoire. Indique le nombre de caractères à extraire du texte à l’aide de STXT.
    no_octets Obligatoire. Indique le nombre de caractères à extraire du texte à l’aide de MIDB, en octets.
    Cordialement.

    RJ

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    @Igloobel
    Désolé mais ça ne va pas car mon X n'est pas toujours à la 16 ième place.

    La formule en dure si dessus marche. Donc autant réussir à l'écrire mais en VBA. Donc pouvez vous m'aider à écrire cette formule dans VBA. J'ai une erreur de Syntaxe que je ne trouve pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formula = "=STXT(B" & compteur & ";TROUVE("X";B" & compteur & ";1)+1;2)"
    Merci beaucoup pour vos réponses.

    Merci

    Vincent

    @rjamin
    La formule marche en effet, mais je veux l'écrire dans mon code VBA.

  8. #8
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formula = "=STXT(B" & compteur & ";TROUVE("X";B" & compteur & ";1)+1;2)"
    fonctionne
    en vba, pourquoi ne pas utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formulalocal = "=STXT(B" & compteur & ";TROUVE("X";B" & compteur & ";1)+1;2)"
    Apres test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("c" & compteur).FormulaLocal = "=STXT(B" & compteur & ";TROUVE(""x"";B" & compteur & ";1)+1;2)"
    ne me renvoi plus d'erreur

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    J'ai du sans doute mal me faire comprendre. La formule marche en dure dans excel mais ne marche pas en VBA

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Je vous remercie pour toutes vos réponses.

    J'ai trouvé la solution. La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formula = "=MID(B" & compteur & ",FIND(""X"",B" & compteur & ",1)+1,2)"

  11. #11
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut,

    tu as dit
    Le chiffre suivie du "X" donc 8 et 22 est le chiffre ou nombre que je souhaite extraire.
    Il sera toujours précédé d'un "X". Par contre, je ne veux pas le U.
    Comment faire en VBA?
    donc je te propose une solution VBA

    et aussi
    Désolé mais ça ne va pas car mon X n'est pas toujours à la 16 ième place.
    Du coup on peut faire 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
    Sub test()
        Dim Var As String
        Dim Var2 As String
        Dim Trouv As Boolean
        Dim i As Long
     
        Trouv = False
        For i = 1 To Len(Cells(1, 1).Value)
            If Mid(Cells(1, 1).Value, i, 1) = "X" Then
                Trouv = True
                Exit For
            End If
        Next
        If Trouv = True Then
            Var = Trim(Mid(Cells(1, 1).Value, i + 1, 2))
            MsgBox "A1 : " & Var
        Else
            MsgBox "X non Trouvé"
        End If
     
    End Sub
    Solution quasi prète a l'emploi

    PS : evite l'objet Range et utilise Cells c'est plus pratique

    tu dis

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Citation Envoyé par guismoman60 Voir le message
    Je vous remercie pour toutes vos réponses.

    J'ai trouvé la solution. La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & compteur).Formula = "=MID(B" & compteur & ",FIND(""X"",B" & compteur & ",1)+1,2)"
    Sans doute, sauf que (pour pinailler) ça ne fonctionne pas si tu dois renvoyer le résultat dans une variable; il faut alors utiliser "Evaluate" .
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Nickel, ta solution marche très bien. Mais j'ai une colle.

    Certaine référence ont trois chiffres suivie d'autre caractère que des chiffres.

    Exemple :

    120*250X70/PAL
    120*250X150/E
    120*275X152E

    Comment prendre le 150, le 152 ou le 70 sans le slash.

    Désolé mais je pense que c'est une vrai colle.

    Je pense qu'il faudrait contrôler chaque caractère après le X. Et si le caractère n'est plus un integer, alors je m'arrête . Je fais des tests. Mais c'est moche, et ça ne marche pas du tout. Quelqu'un a une idée?

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Certaine référence ont trois chiffres suivie d'autre caractère que des chiffres.
    Ca serait sympa d'exposer la totalité de ton problème du premier coup.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut

    Peux-tu certifier que le chiffre a prendre est entre X et / ?
    Exemple :

    120*250X70/PAL
    120*250X150/E
    120*275X152E
    Ce qui n'était l'exemple du début
    - 10+120 120*250X8 U => Cellule A1

    - 10+120 120*250X22 U => Cellule A2
    Tu dis

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    +1 avec Daniel ‼

    Citation Envoyé par guismoman60 Voir le message
    Quelqu'un a une idée?
    Oui, utiliser ses neurones !

    Donc après avoir trouvé la position du "X", extraire le texte à partir de cette position via la fonction Mid
    (ou mieux Split comme dans le post suivant) puis convertir en numérique via la fonction Val par exemple …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    avec une fonction personnalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function dim3(s As String) As Double
        dim3 = Val(Split(s, "X")(1))
    End Function
    eric
    Fichiers attachés Fichiers attachés

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim C As Range, Txt As String, L As Variant
    For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp))
        C.Offset(, 1).Value = Split(C.Value, "X")(1)
        Txt = "X"
        For i = 1 To Len(C.Offset(, 1))
            L = Mid(C.Offset(, 1), i, 1)
            If L = "X" Or IsNumeric(L) Then Txt = Txt & L
        Next i
    Next C
    puis convertir en numérique via la fonction Val par exemple …
    Je ne connaissais pas cette utilisation de "Val" ! Je n'ai pas perdu ma journée. Chapeau à eriiic aussi.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Xnum(V) As Long
    Dim aa
    aa = V
    aa = Split(UCase(aa & "xx"), "X")
    aa = aa(1)
    For i = 1 To Len(aa)
        If IsNumeric(Mid(aa, i, 1)) = False Then Mid(aa, i, 1) = "~"
    Next
    Xnum = Replace(aa, "~", "")
    End Function
     
    Sub test()
    Debug.Print Xnum("120*275X152E")
    End Sub

  20. #20
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Pourquoi ça ne marche pas? Sniiiif


    Classeur1.xlsm

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. mettre chaque chiffre d'un nombre dans une liste
    Par rom117 dans le forum Prolog
    Réponses: 4
    Dernier message: 13/12/2010, 23h39
  2. Réponses: 1
    Dernier message: 28/07/2009, 18h13
  3. Réponses: 3
    Dernier message: 03/05/2008, 16h44
  4. Récupérer 1er chiffre d'un nombre dans une requête
    Par beletteroi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/06/2006, 13h33
  5. Extraire un nombre dans une chaine
    Par SIGOliv dans le forum Access
    Réponses: 16
    Dernier message: 13/03/2006, 15h44

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