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 chaine de caractère entre symbole [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut Extraction chaine de caractère entre symbole
    Bonjour à toutes et à tous
    Après de nombreuses recherches infructueuses je suis dans l'incapacité d'effectuer une simple macro.

    J'ai en colonne A un nombre important de descriptif de KB windows

    2018-12 Mise à jour cumulative pour Windows 10 Version 1803 pour les systèmes x64 (KB4483234)

    Je cherche à extraire/copier la partie entre parenthèse (KBXXXXXX) pour l'injecter dans la cellule adjacente en colonne B

    Pour exemple voici une formule précédemment utilisé qui me servait à obtenir le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STXT(A7;CHERCHE("(";A7)+1;9)
    Vous remarquerez que la formule est "fixe", c'est à dire que si ma valeur recherchée (KBXXXXXX) change d'emplacement, mon résultat sera faussé. Je cherche donc à appliquer une macro qui rechercherait la chaine de caractère "(KB" jusqu'au caractère ")" pour coller le tout dans la cellule adjacente le tout dans une boucle.

    Merci d'avoir pris le temps de me lire.
    Light,

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A7;TROUVE("(";A7)+1;TROUVE(")";A7)-TROUVE("(";A7)-1)

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    essayer avec
    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
    Sub extractionMots()
        Dim Tableau() As String
        Dim i As Integer
        Dim j As Long
        Dim t As Integer
        With Sheets("feuil1")
        Derlig = .Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To Derlig
        .Cells(j, 2) = .Cells(j, 1)
        .Cells(j, 2).Replace What:="(KB", Replacement:=""
        Tableau = Split(.Cells(j, 2), ")")
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
        .Cells(j, 2) = Tableau(0)
        Next j
        End With
    End Sub

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    avec replace seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub extractionMots()
        Dim Tableau() As String
        Dim i As Integer
        Dim j As Long
        With Sheets("feuil1")
        Derlig = .Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To Derlig
        .Cells(j, 2) = .Cells(j, 1)
        .Cells(j, 2).Replace What:="(KB", Replacement:=""
        .Cells(j, 2).Replace What:=")", Replacement:=""
        Next j
        End With
    End Sub

  5. #5
    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
    re
    sinon si comme moi tu te perds dans les parenthese et ; dans la redaction des formules
    en vba ca donne ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function entreparentheses(ByVal cel As Range)
    If InStr(cel.Text, "(") > 0 Then entreparentheses = Split(Split(cel.Text, "(")(1), ")")(0) Else entreparentheses = "NoFound!"
    End Function
    et dans la cellule tu met la formule

    =entreparentheses(A1)
    utilisable en vba de cette maniere aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
        MsgBox entreparentheses(Sheets(1).Range("A1"))
    End Sub
    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

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Si tu ceux éviter la lourdeur et le coût induit de deux éclatements, tu peux utiliser deux fois la fonction Instrrev (détermination de la dernière position d'un caractère spécifié) pour déterminer :
    en variable pos1 : la position de la dernière parenthèse ouvrante
    en variable pos2 : la position de la dernière parenthèse fermante
    puis utiliser la fonction Mid pour déterminer ce qui est présent entre pos1 et pos2

    Je n'aime d'ailleurs en ce qui me concerne pas cette seule méthode, ni celle du seul double split, en ce sens que ni l'une ni l'autre ne garantissent à 100 % que ce qui te sera retourné est FORCEMENT ce que tu cherches. Ce ne sera jamais rien d'autre que ce qui se trouve entre le dernier "(" et le dernier ")".
    Une telle garantie n'existera jamais. On pourra au mieux diminuer considérablement les risques si tu pouvais donner des précisions plus complètes sur le format qu'occupent systématiquement ces données.
    Commencent-elles TOUJOURS par "KB" ?
    Les derniers caractères sont-ils toujours le même nombre de chiffres ? (observons déjà dans ton message la différence entre cette "forme" KBXXXXXX et celle-là KB4483234)
    etc ... (pour résumer : tout ce qui permettrait au moins de vérifier au mieux que ce qui est retourné est de même format que ce qui est attendu).

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

Discussions similaires

  1. Extraction chaine de caractère entre deux balises.
    Par Invité dans le forum VBScript
    Réponses: 15
    Dernier message: 13/10/2017, 16h38
  2. [XL-2010] Extraction chaine de caractères entre caractères spéciaux
    Par Ysae68 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/11/2015, 16h21
  3. Extraction chaine de caractères entre deux |
    Par urbanspike dans le forum Débuter
    Réponses: 3
    Dernier message: 04/10/2012, 17h46
  4. Réponses: 3
    Dernier message: 08/06/2007, 15h16
  5. passer une chaine de caractère entre client et serveur COM
    Par ali.ensi dans le forum Visual C++
    Réponses: 7
    Dernier message: 28/03/2007, 18h30

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