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 :

Macro pour changer le formatage d'une cellule [XL-97]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Par défaut Macro pour changer le formatage d'une cellule
    Bonjour a tous,

    Je dispose d'un classeur excel avec des numeros de commandes.
    Un numero de commande a la forme suivante :
    AA 12345-67-89

    Je souhaiterais pouvoir faire une macro pour ne garder que les 9 derniers chiffres, sans tiret : 123456789 et copier cette valeur dans une nouvelle cellule.

    Je suis un peu perdue quant a la demarche a adopter... si quelqu'un avait une petite idee pour m'aider, ce serait super !

    Merci d'avance,

    Chloe

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, en VBA
    Replace n'existant pas sous 97 une adaptation est faite en créant Replace97

    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
    Option Explicit
     
    Sub Tst()
    Dim sStr As String
        sStr = Trim$(Feuil1.Range("A1"))
        sStr = Replace97(sStr, "-", "")
        sStr = Mid(sStr, 4, Len(sStr) - 3)
     
        Feuil1.Range("B1") = sStr
    End Sub
     
    Private Function Replace97(sChaine As String, sOld As String, sNew As String) As String
    Dim Pos As Long, sOut As String
        sOut = sChaine
        Pos = InStr(1, sOut, sOld)
        If Pos = 0 Then Exit Function
        Do
            sOut = Left$(sOut, Pos - 1) & sNew & Mid$(sOut, Pos + Len(sOld))
            Pos = InStr(1, sOut, sOld)
        Loop While Pos > 0
     
        Replace97 = sOut
    End Function

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 7
    Par défaut
    C'est plus qu'une petite idee, merci

    Quand je lance la macro, j'ai cette erreur qui s'affiche :
    Invalid procedure call or argument

    Cela concerne la ligne :
    sStr = Mid(sStr, 4, Len(sStr) - 3)

    Je ne suis pas bien sure de comprendre...


    Edit : j'ai lance la macro sur une autre feuille (ma feuille initiale contenait d'autres donnees, j'ai du lancer la macro sur une mauvaise cellule) et cela marche tres bien ! Merci beaucoup, je vais economiser beaucoup de temps !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Tst()
    Dim sStr As String
        sStr = Trim(Cells(1, 1))
        sStr = Replace97(sStr, "-", "")
        sStr = Mid(sStr, 4, Len(sStr) - 3)
        Cells(1, 2) = sStr
    End Sub
    Sinon la fonction que de mon post précédent est peut-être plus universelle, sous réserve que IsNumeric marche sous 97, auquel cas je pourrai modifier (quelques lignes de plus). Cordialement

    R

  5. #5
    Expert éminent 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
    Par défaut
    Je ne sais pas si les RegExp existent dans la version 97
    Une proposition qui nécessite d'activer la référence Microsoft VBScript Regular Expressions 1.0
    Ci-joint fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Activer la référence Microsoft VBScript Regular Expressions 1.0
    Function Remplace(ByVal Str As String) As String
    Dim Rg As New VBScript_RegExp_10.RegExp
     
    With Rg
        .Pattern = "[^0-9]"
        .Global = True
        Remplace = .Replace(Str, "")
        'Remplace = Right(.Replace(Str, ""), 9) 'Au cas ou seuls les 9 chiffres à droite
    End With
    Set Rg = Nothing
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Remplace("678A3004A 12-9-1")
    Donne 67830041291

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    bonjour Chloé,

    Une solution sans macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CNUM(SUBSTITUE(DROITE(A1;11);"-";""))
    Une solution fonction vba :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function KeepNumber(s$) As Long
    Dim t$
    For i = 1 To Len(s)
        If IsNumeric(Right(Left(s, i), 1)) Then
            t = t & Right(Left(s, i), 1)
        End If
    Next i
    KeepNumber = t
    End Function
    Cordialement

    R

    Edit : bonjour Kiki29

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

Discussions similaires

  1. [Toutes versions] Macro pour copier le contenu d'une cellule d'un fichier excel et coller dans une form
    Par wizishop dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 16/10/2015, 13h05
  2. Macro pour supprimer les lettres d'une cellule?
    Par LittleSun dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2010, 20h56
  3. [AC-2000] macro pour changer le format d'une date
    Par zandeparis dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/11/2009, 13h13
  4. Réponses: 0
    Dernier message: 31/03/2009, 10h35
  5. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 09h21

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