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 :

VBA: Dissocier des chiffres dans un texte [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 60
    Points
    60
    Par défaut VBA: Dissocier des chiffres dans un texte
    Bonjour à tous,

    Je souhaite construire une macro enfin de dissocier les chiffres dans le texte.

    Ex: CC- 05677 Project Name
    Je souhaite obtenir avec mon code VBA juste 05677

    Avec excel, j'utilise la function gauche("CC- ", 9) puis je la retraite avec le code VBA pour replacer "CC- " par vide.

    Cependant, je me casse la tête à écrire un code qui ne fonctionne pas... Donc, j'ai choisi une solution alternative qui elle fonctionne mais n'est pas adéquate. En effet, quelquefois j'ai "CC-" ou "CC - " ou "CC- ":

    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
    Sub clear_Tally_DC()
     
    'Unmerge cells
    Cells.Select
    Cells.UnMerge
     
     
    'Replacing "." by "," 
    Cells.Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    Cells.NumberFormat = "#,##0"
     
    Range("A1,IV1").Select
    Selection.Replace What:="CC- ", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
    For i = 3 To 255 Step 2
        a = Cells(1, i)
     
        c = Left(a, 5)
        'b = len(a) for test
        Cells(2, i) = c
        Cells.NumberFormat = "00000"
     
    Next i
     
    End Sub
    Merci de vos suggestions

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
    For Each c In Range("A1:IV1")
        If c.Value <> "" Then c.Value = Val(Mid(Trim(c.Value), InStr(c.Value, "-") + 1))
    Next c
    Rows(1).NumberFormat = "00000"
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 60
    Points
    60
    Par défaut
    Excellent, tu es un petit génie de VBA toi .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim c As Range
    For Each c In Range("A1:IV1")
        If c.Value <> "" Then 
        c.Value = Val(Mid(Trim(c.Value), InStr(c.Value, "-") + 1))
        End if
    Next c
    Rows(1).NumberFormat = "00000"
    Explique moi juste une chose, parce que j'aime bien comprendre ce que je fais et non copier bêtement la solution.

    Peux-tu m'expliquer le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Value = Val(Mid(Trim(c.Value), InStr(c.Value, "-") + 1))

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    en passant, une petite fonction qui récupère les données numériques d'une chaine texte. peu importe le format.

    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 ExtractNumberInString(str As String) As Long
    Dim Ch As String
    Dim Result As String
    Dim I
     
    For I = 1 To Len(str)
        Ch = Mid(str, I, 1)
        If IsNumeric(Ch) Then Result = Result & Ch
    Next I
     
     
    ExtractNumberInString = Val(Result)
     
    End Function
    Alleï Bonjour chez vous!

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    En fait le trim n'est pas nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
    For Each c In Range("A1:IV1")
        If c.Value <> "" Then c.Value = Val(Mid(c.Value, InStr(c.Value, "-") + 1))
    Next c
    Rows(1).NumberFormat = "00000"
    c'est le compactage de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each c In Range("A1:IV1")
        If c.Value <> "" Then
          n = InStr(c.Value, "-") 'la position du "-" dans la chaine
          X = Mid(c.Value, n + 1) 'x reprend les caractères de c à partir le la n+1 position
          c.Value = Val(X)        'F1 sur val, c'est plus clair
       End If
    Next c
    Rows(1).NumberFormat = "00000"
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Points : 60
    Points
    60
    Par défaut
    C'est extra! Merci!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/05/2006, 10h03
  2. [VBA] Dissocier des feuilles Excel avec VBA
    Par lezinve dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2006, 16h30
  3. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  4. Test si il y a des chiffres dans un champs
    Par deaqu1 dans le forum Access
    Réponses: 4
    Dernier message: 14/06/2005, 21h36

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