Microsoft 365 Formules de haut vol

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaites un beau WE :)

Alertes à nos ténors lol

J'ai une base de données avec environ 50.000 Prospects.

Les informations sont dans le désordre et je voudrais les avoir dans un ordre défini.
Evidemment, cela me semble impossible.
J'ai fait un tas de tentatives sans succès.

Je soumets ce tour de magie à nos ténors.
Je joins un fichier test avec les résultats attendus.

Un grand merci pour votre aide,
Amicalement,
lionel :)
 

Pièces jointes

  • test.xlsm
    10.2 KB · Affichages: 20
Solution
Bonjour Lionel,

Tu sais bien qu'avec le VBA on peut presque tout faire :)

Ci joint le fichier qui utilise ces 2 fonctions VBA :
VB:
Function Mots_Minuscules(txt$)
Dim s, i%, x$, j%
txt = Application.Trim(Replace(Replace(txt, "d'", ""), "l'", "") )'épuration
s = Split(txt)
For i = 0 To UBound(s)
    x = s(i)
    For j = 1 To Len(x)
        If Mid(x, j, 1) = LCase(Mid(x, j, 1)) Then GoTo 1
    Next j
    s(i) = ""
1 Next i
Mots_Minuscules = Application.Trim(Join(s))
End Function

Function Mots_Majuscules(txt$)
Dim s, i%, x$, j%, d As Object
txt = Application.Trim(Replace(Replace(txt, "d'", ""), "l'", "") )'épuration
s = Split(txt)
For i = 0 To UBound(s)
    x = s(i)
    For j = 1 To Len(x)
        If Mid(x, j, 1) = LCase(Mid(x, j...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Pour la commune, utilisez ma fonction personnalisée Commune(x) :
VB:
Function Commune(ByVal x As String) As String
Const separ = "'!""#$%&()*+,-./:;<=>?@[\]{|}¤"
Dim i&, j&
   For i = 1 To Len(separ): x = Replace(x, Mid(separ, i, 1), " "): Next
   x = Application.Trim(x) + " "
   For i = 1 To Len(x) - 2
      If Mid(x, i, 3) = UCase(Mid(x, i, 3)) Then Exit For
   Next i
   For j = i To Len(x)
      If Mid(x, j, 1) <> UCase(Mid(x, j, 1)) Then Exit For
   Next j
   Commune = Application.Trim(Mid(x, i, j - i - 1))
End Function
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Pour le prénom, manifestement, une fois on le place après le premier nom, une autre fois à la fin (après le 2ème nom) => donc pas trouvé de règle ni simple ni complexe.

A la rigueur une fonction approximative SansCommune (x), pas peaufinée du tout car à partir de don nées inorganisées, on ne peut qu'arriver à des erreurs tôt ou tard (plutôt tôt que tard d'ailleurs).

Je ne comprends pas comment une liste de propects peut-être autant "du n'importe quoi" o_O; ça doit être hors du cadre professionnel ?

Code:
Function Commune(ByVal x As String) As String
Const separ = "'!""#$%&()*+,-./:;<=>?@[\]{|}¤"
Dim i&, j&
   For i = 1 To Len(separ): x = Replace(x, Mid(separ, i, 1), " "): Next
   x = Application.Trim(x) + " "
   For i = 1 To Len(x) - 2
      If Mid(x, i, 3) = UCase(Mid(x, i, 3)) Then Exit For
   Next i
   For j = i To Len(x)
      If Mid(x, j, 1) <> UCase(Mid(x, j, 1)) Then Exit For
   Next j
   Commune = Application.Trim(Mid(x, i, j - i - 1))
End Function

Function SansCommune(ByVal x As String) As String
Const separ = "'!""#$%&()*+,-./:;<=>?@[\]{|}¤"
Dim i&
   For i = 1 To Len(separ): x = Replace(x, Mid(separ, i, 1), " "): Next
   x = Application.Trim(x) + " "
   x = Application.Trim(Replace(x, Commune(x), " "))
End Function
 

Pièces jointes

  • UsineAgaz- rxtraction texte- v1.xlsm
    19 KB · Affichages: 0
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour @mapomme

Je crois qu'il y a un pb sur ta fonction


1645264816362.png

J'ai essayé aussi avec ton post #4

C'est vrai que les données laissent à désirer....;)
C'est aussi vrai qu'il ne veut que les noms de villes donc par rapport à cela ta formule fonctionne.;)

@Phil69970
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel, Phil, MaPomme,
Un autre essai avec :
VB:
Sub Extrait()
    Dim DL, T, T2(), M, i, j, Flag, Chaine1$, Chaine2$, IndexT2, Nb%
    Application.ScreenUpdating = False
    DL = Range("B65500").End(xlUp).Row
    T = Range("B2:B" & DL)
    ReDim T2(UBound(T), 2): IndexT2 = 1
    ' Suppression des l' et des d'
    For i = 1 To DL
        On Error Resume Next
        T(i, 1) = Application.Replace(T(i, 1), "l'", "")
        T(i, 1) = Replace(T(i, 1), "d'", "")
    Next i
    ' Séparation des mots en majuscules
    For i = 1 To DL
        Chaine1 = "": Chaine2 = ""
        M = Split(T(i, 1), " ")
        For j = 0 To UBound(M)
            If M(j) = UCase(M(j)) Then
                Chaine1 = Chaine1 & " " & M(j)
            Else
                Chaine2 = Chaine2 & " " & M(j)
            End If
        Next j
        T2(IndexT2, 1) = Chaine2: T2(IndexT2, 2) = Chaine1
        IndexT2 = IndexT2 + 1
    Next i
    ' Suppression mots doublons
    For i = 1 To UBound(T2)
        T2(i, 2) = SupDoublons(T2(i, 2), " ")
    Next i
    ' Rangement matrice résultats
    Range("$D$2").Resize(UBound(T2, 1), UBound(T2, 2)) = T2
End Sub
Function SupDoublons(txt, Optional delim As String = " ") As String
'https://fr.extendoffice.com/documents/excel/2133-excel-remove-duplicate-characters-in-string.html
    Dim x
    'Updateby Extendoffice
    With CreateObject("Scripting.Dictionary")
        .CompareMode = vbTextCompare
        For Each x In Split(txt, delim)
            If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing
        Next
        If .Count > 0 Then SupDoublons = Join(.keys, delim)
    End With
End Function
 

Pièces jointes

  • test (15).xlsm
    19.8 KB · Affichages: 4

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @sylvanu :)

A mon avis, tu auras beau faire, je ne vois aucun moyen de bien placer le prénom final...
(Bidule CHERBOURG et Carine Bidulette CHERBOURG Christophe place mal le prénom Christophe)

Dans un sens, c'est rassurant, notre cerveau est capable en une fraction de seconde de le faire et sans se fatiguer ni faire chauffer dangereusement ses cellules 😜 Il doit exister des circuits conçus ou entrainés (ou éduqués) pour cela.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

[aparté du dimanche matin]
Je ne comprends pas comment une liste de propects peut-être autant "du n'importe quoi" o_O; ça doit être hors du cadre professionnel ?
Il ne peut en être autrement ;)
Une usine à gaz est forcément agencée en dépit du bon sens.
D'un autre côté, puisque c'est Excel qu'on utilise pour "mettre le dawa", je m'en retourne à samedi, tout en en pensant que si j'étais moi, j'irai voir, non pas du côté de chez Swan, mais au fond du couloir où j'ai rangé mes patterns RegExp
[/aparté]

NB: On prendra soin de noter qu'il ne s'agit que d'un trait d'humour.
Pas d'une attaque, d'une critique envers tel ou tel.
Bah, oui, en ces temps où le wokisme s'insinue partout, je ne voudrais pas que le Syndicat de Défense des Usines à Gaz non OGM, élevées en plein air me tombe dessus ;)

EDITION: Désolé, patricktoulon a été plus rapide que moi pour sortir son trait d'humour.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir le fil

[aparté du dimanche matin]

Il ne peut en être autrement ;)
Une usine à gaz est forcément agencée en dépit du bon sens.
D'un autre côté, puisque c'est Excel qu'on utilise pour "mettre le dawa", je m'en retourne à samedi, tout en en pensant que si j'étais moi, j'irai voir, non pas du côté de chez Swan, mais au fond du couloir où j'ai rangé mes patterns RegExp
[/aparté]

NB: On prendra soin de noter qu'il ne s'agit que d'un trait d'humour.
Pas d'une attaque, d'une critique envers tel ou tel.
Bah, oui, en ces temps où le wokisme s'insinue partout, je ne voudrais pas que le Syndicat de Défense des Usines à Gaz non OGM, élevées en plein air me tombe dessus ;)

EDITION: Désolé, patricktoulon a été plus rapide que moi pour sortir son trait d'humour.
Tien, tien, mon Staple1600 préféré car le seul que je connais lol

Que nenni : le fichier en question ne provient pas de mes usines à gaz.
Content de te "revoir",
lionel 😇🇹🇳
 
Dernière édition:

Discussions similaires

Réponses
13
Affichages
580
  • Résolu(e)
Microsoft 365 Killer
Réponses
7
Affichages
702

Statistiques des forums

Discussions
312 360
Messages
2 087 593
Membres
103 604
dernier inscrit
CAROETALEX59