Excel: extraction de caracteres

Résolu
mathraxe Messages postés 30 Statut Membre -  
mathraxe Messages postés 30 Statut Membre -
Bonjour à tous,

Je viens a vous car j'ai 2 petit soucis

j'ai un listing de 8000 lignes avec des denominations social tel que "SPRL diapason, ASBL yatra, BVBA philips" et je dois les extraires dans une autre colone sans effacer. Les dénominations ce trouve dans la colone B et je dois mettre les (SPRL,SCRL,ASBL,BVBA,SCRL, SA, SC) dans la colone A.

Dans ce listing ce trouve aussi certaine dénomination tel que
"Ombre de la Lumière (A la)"
et j aurai voulu savoir si il existai une macro pour prendre ce qu'il ya dans la paranthese la mettre au début et supprimer les parentheses avec le contenu

j'espere qu'il existe une solution a mon probleme et que vous voudrez bien me la partager

je vous remercie d'avance

cordialement

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    J'avoue ne pas tout piger. D'un côté tu dis avoir des dénominations SPRL diapason, ASBL yatra, BVBA philips que tu dois extraire, ensuite tu dois mettre en col A des abréviations : et je dois mettre les (SPRL,SCRL,ASBL,BVBA,SCRL, SA, SC) dans la colone A.
    Et pour finir tu parles de choses à extraire entre parenthèses... On s'y perds un peu je crois.
    1- repose mieux ta question,
    2- joinds un fichier exemple (en utilisant cjoint.fr par exemple) sans données confidentielles, avec ce que tu as et ce que tu veux...
    0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour le fofo

    Non il n'existe pas de "macro" prête à l'emploi.

    Voilà un exemple à adapter :

    'Procédure principale
    Sub Main()
    Dim ws As Worksheet
    Dim derlig As Long
    Dim i As Long
    
        Set ws = Worksheets(1)
        derlig = ws.Range("B65536").End(xlUp).Row
        
        For i = 1 To derlig
            If InStr(1, ws.Range("B" & i).Value, "(") = 0 Then
                ws.Range("A" & i).Value = returnPrefixe(ws.Range("B" & i).Value)
            Else
                ws.Range("B" & i).Value = returnModif(ws.Range("B" & i).Value)
            End If
        Next i
        
    End Sub
    
    'Fonction qui retourne le préfixe 
    Private Function returnPrefixe(ByVal str As String) As String
    Dim mTab
    
        mTab = Split(str, " ")
        
        returnPrefixe = mTab(0)
        
    End Function
    
    'Fonction qui retourne le texte modifié
    Private Function returnModif(ByVal str As String) As String
    Dim char As String
    
        If InStr(str, ")") = 0 Or Right(str, 1) = "(" Then
            returnModif = ""
            Exit Function
        End If
        
        char = Mid(str, InStrRev(str, "(") + 1)
        
        char = Mid(char, 1, Len(char) - 1)
        
        returnModif = char & " " & Mid(str, 1, Len(char) + 3)
    
    End Function


    ;o)
    0
  3. mathraxe Messages postés 30 Statut Membre
     
    je reformule j ai un listing de prospects (Nom de la societé, adresse, N°,code postal,ville, etc..)

    dans le Nom de la societé (colonne B) j ai des "SPRL diapason, ASBL yatra, BVBA philips" on m'a demandé de faire une colonne A et de mettre en évidence le statut de la société.

    Et on m'a demandé aussi de retirer ce qui été entre parenthese dans la colonne B et de le mettre devant la dénomination pour etre plus conforme ex: auberge (l') = l'auberge

    j'ai fais un printscreen pour mieux comprendre
    https://www.cjoint.com/?0kuj5hCbnLd

    encore merci de votre aide
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      le tableau n'est pas conforme à ton énoncé ... tu dis "SPRL diapason, ASBL yatra, BVBA philips" et le tableau dit : "diapason SPRL, vatra ASBL etc .."

      Ça fait une grosse différence dans le traitement. Tu sais combien ça peut coûter ce genre d'erreur si tu devais payer un développeur ?
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,
      @Polux31 : tu prends la suite?

      @mathraxe : peux tu lister les statuts de société : SPRL, ASBL etc...
      0
    3. mathraxe Messages postés 30 Statut Membre
       
      excuse moi polux de ne pas savoir expliquer mon probleme avec les bon mots d'ou le printscreen pour mieux vous faire comprendre

      Pijaku; il y a des SPRL, SCRL, SPRLU, ASBL, BVBA, SA, SC. voila

      je vous remerci de pouvoir m'aider
      0
    4. Polux31 Messages postés 7219 Statut Membre 1 204
       
      @pijaku : non, j'ai déjà donné ... au suivant.

      @mathraxe : ce n'est pas d'avoir su ou pas employer les bons mots mais tout simplement une mauvaise analyse du besoin qui résulte à une perte de temps inutile pour tout le monde.

      Bonne continuation
      0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    re-
    N'ayant pas son talent, je me suis permis de reprendre légèrement les codes donnés par Polux31 ci-dessus. Je les ai juste adaptés à la nouvelle situation décrite par mathraxe...

    Sub Main()
    Dim ws As Worksheet
    Dim derlig As Long
    Dim i As Long
    Dim NomTableau As Variant
    Dim val As Variant
       
        NomTableau = Array("SPRLU", "SPRL", "SCRL", "ASBL", "BVBA", "SA", "SC")
        
        Set ws = Worksheets(1)
        derlig = ws.Range("B65536").End(xlUp).Row
        
        For i = 2 To derlig
            For Each val In NomTableau
                If ws.Range("B" & i).Value Like "*" & val & "*" Then
                    ws.Range("A" & i).Value = val
                    ws.Range("B" & i).Value = Replace(ws.Range("B" & i).Value, val, "")
                End If
            Next
            If InStr(1, ws.Range("B" & i).Value, "(") <> 0 Then
                ws.Range("B" & i).Value = returnModif(ws.Range("B" & i).Value)
            End If
        Next i
        
    End Sub
    
    Private Function returnModif(ByVal str As String) As String
    Dim char As String
    
        If InStr(str, ")") = 0 Or Right(str, 1) = "(" Then
            returnModif = ""
            Exit Function
        End If
        
        char = Mid(str, InStrRev(str, "(") + 1)
        If InStr(char, " ") <> 0 Then
            char = Replace(char, " ", "")
        End If
        char = Mid(char, 1, Len(char) - 1)
        char = char & " " & Replace(str, char, "")
        char = Replace(char, "(", "")
        char = Replace(char, ")", "")
        
        returnModif = char
    
    End Function
    --
    Cordialement,
    -- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mathraxe Messages postés 30 Statut Membre
     
    Pijaku je dois tous simplement te dire un grand grand merci!!!

    ta macro est superbe :-)

    encore merci pour l aide ça fait plaisir
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Remercie plutôt Polux31, il a fait tout le boulot, je n'ai fait qu'adapter son travail à ta situation...
      0
    2. mathraxe Messages postés 30 Statut Membre
       
      Merci a vous deux c'est du trés bon boulot :-)
      0