Excel: extraction de caracteres [Résolu/Fermé]

Signaler
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012
-
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012
-
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

Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 485
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...
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 132
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)
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012

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
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 132
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 ?
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 485
Bonjour,
@Polux31 : tu prends la suite?

@mathraxe : peux tu lister les statuts de société : SPRL, ASBL etc...
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012

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
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 132
@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
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 485
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 --
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012

Pijaku je dois tous simplement te dire un grand grand merci!!!

ta macro est superbe :-)

encore merci pour l aide ça fait plaisir
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 485
Remercie plutôt Polux31, il a fait tout le boulot, je n'ai fait qu'adapter son travail à ta situation...
Messages postés
26
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
23 mai 2012

Merci a vous deux c'est du trés bon boulot :-)