Decouper le contenu d'une cellule par mot clef

Joker

XLDnaute Nouveau
Bonjour à tous,

Plusieurs sujets traitent du découpage des cellules mais aucun ne correspond vraiment à ce que je veux.

Je souhaite récupérer des valeurs numériques d'une cellule selon les mots qui la précédent.

Par exemple dans une cellule A1 j'ai :
Nombre de parents :2 nombre de tantes :10 nombre d'oncles :5 ...

J'aimerais dans une cellule B1 obtenir "2" (soit le nombre de parents), dans B2 "10" (soit le nombre de tantes), dans B3 "5", ...

Je ne suis pas fermé à une utilisation VBA ou formules, peut m'importe :)

Merci d'avance ;)
 

francedemo

XLDnaute Occasionnel
Re : Decouper le contenu d'une cellule par mot clef

Bonjour,

en VBA, tu peux utiliser un truc du genre:
Code:
Public Sub test()

Dim x, n, t

x = Split(Range("A1"), ":")
For n = 1 To UBound(x)
    t = Split(x(n), " ")
    Range("B" & n) = t
Next

End Sub

à adapter à ton besoin réel

à+
 

ralph45

XLDnaute Impliqué
Re : Decouper le contenu d'une cellule par mot clef

Bonjour Joker, francedemo, le forum,

Sans VBA et de manière assez bourrine, copie ta colonne A en B, sélectionne celle-ci, puis fais
Rechercher : *:
Remplacer par : rien (vide)

En supposant qu'il n'y ait jamais d'espace après tes points...

A plus
 

tototiti2008

XLDnaute Barbatruc
Re : Decouper le contenu d'une cellule par mot clef

Bonjour Joker, Bonjour francedemo, Bonjour ralph,

Bienvenue sur XLD,

un essai en fonction personnalisée
 

Pièces jointes

  • Classeur3.xlsm
    13.3 KB · Affichages: 68
  • Classeur3.xlsm
    13.3 KB · Affichages: 74
  • Classeur3.xlsm
    13.3 KB · Affichages: 76

Robert

XLDnaute Barbatruc
Repose en paix
Re : Decouper le contenu d'une cellule par mot clef

Bonjour le fil, bonjour le forum,

Bien que très en retard je propose le code ci-dessous, assez similaire de celui de FranceDemo :
Code:
Sub Macro1()
Range("B1").Value = Split(Range("A1").Value, ":", -1)(1) 'renvoie le texte après le premier ":"
Range("B2").Value = Split(Range("A1").Value, ":", -1)(2) 'renvoie le texte après le second ":"
Range("B3").Value = Split(Range("A1").Value, ":", -1)(3) 'renvoie le texte après le troisième ":"
Range("B1").Value = Split(Range("B1").Value, " ", -1)(0) 'renvoie le texte avant le premier espace
Range("B2").Value = Split(Range("B2").Value, " ", -1)(0) 'renvoie le texte avant le premier espace
Range("B3").Value = Split(Range("B3").Value, " ", -1)(0) 'renvoie le texte avant le premier espace
Range("B1").Value = Trim(Range("B1").Value) 'supprime les éventuels espaces avant ou après
Range("B2").Value = Trim(Range("B2").Value) 'supprime les éventuels espaces avant ou après
Range("B3").Value = Trim(Range("B3").Value) 'supprime les éventuels espaces avant ou après
End Sub
 

Joker

XLDnaute Nouveau
Re : Decouper le contenu d'une cellule par mot clef

Merci à tous pour vos contributions.
Je me permets de complexifier un peu la demande face à une chose que je n'avais pas prévue :eek:
Cela fonctionne si on conserve le même ordre dans parents,tantes,oncles mais si on a en A1 l'ordre parents / oncles / tantes les données ne sont plus triées.

Autre détail également si j'ai un nombre "1 000", cela ne me renvoie que 1.
Je vous joint un fichier xls avec ce que je souhaite obtenir au final, ça sera plus simple.

Merci encore :)
 

Pièces jointes

  • Classeur1.xls
    38 KB · Affichages: 54
  • Classeur1.xls
    38 KB · Affichages: 61
  • Classeur1.xls
    38 KB · Affichages: 64

francedemo

XLDnaute Occasionnel
Re : Decouper le contenu d'une cellule par mot clef

bonjour Robert, Tototiti2008,
Re,

Joker,
c'est pas trop cool, tu poses une question (simple) sans fichier exemple, tu obtiens plusieurs réponses (plus ou moins simples) qui solutionnent ton problème et puis tu reviens avec une question autrement plus complexe et là, tu fournis un bout de fichier plutôt vide (un seul exemple, y'en a t'il d'autres ?).
comment veux tu avoir une vraie solution à ta question si tu ne fournis pas la totalité des éléments au départ avec un fichier exemple de ce que tu as et de ce que tu souhaites obtenir ?
(pour info, ce que tu demande est réalisable, mais, y répondre, demandera plus que 3 minutes de réflexion...)
à +
 

Joker

XLDnaute Nouveau
Re : Decouper le contenu d'une cellule par mot clef

Re,

Désolé pour le manque d'information à la base, c'est un paramètre que je n'avais pas prévu :/
La cellule A1 provient d'un copier / coller d'un rapport reçu par mail.

De quoi avez vous besoin exactement en exemple ? Il s'agit de données confidentielles que je ne peux pas diffuser ici.
Ce ne sont pas des parents/oncles/tantes en réalité mais j'adapterais vos solutions à mes besoins, seul les intitulés changeront.

Il n'y aura pas d'autres cellules à traiter que A1, je manipulerais les données obtenues par la suite avec des formules relativement simples de mon coté.

Les données en A1 deux mises en formes : "parents:1 000 oncles:100 ..." ou "1000 parents, 100 oncles, ..".
Il faudrait aussi que la fonction prenne en compte les intitulés composés comme par exemple "grands parents".
Promis juré, ça ne change plus après.

Les cellules C1,D1,E1 sont des données en dur, j'aimerais récupérer les nombres de A1 en dessous des intitulés (donc en C2,D2,E2).

Encore désolé de complexifier la demande,je me rends compte que ça n'a plus rien à voir avec la demande originelle. :(
J'aurais du faire un cahier des charges plus complet :s

Merci de me consacrer du temps
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Decouper le contenu d'une cellule par mot clef

Bonjour le fil :),
Une solution par RegExp qui devrait résoudre pas mal des soucis proposés, en attendant de nouveaux cas de figures :eek:...
Code:
Function Extrait(Recherche As String, AExtraire As String) As Integer
Application.Volatile
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(.*)(" & UCase(AExtraire) & " ?: ?)([0-9 ]+)(.*)"
    If .Test(UCase(Recherche)) Then
        Extrait = Replace(.Replace(UCase(Recherche), "$3"), " ", "") * 1
    End If
End With
End Function
Ne tiens pas compte de la casse ou d'un espace avant ou après les ":", de l'ordre des données, tiens compte de leur absence, etc. :p
 

Pièces jointes

  • Joker.xls
    44 KB · Affichages: 57
  • Joker.xls
    44 KB · Affichages: 66
  • Joker.xls
    44 KB · Affichages: 68

Joker

XLDnaute Nouveau
Re : Decouper le contenu d'une cellule par mot clef

Merci JNP, cela fonctionne à merveille pour le premier type de données que j'aurais à traiter (parents:1 000).

Cela est-il possible de traiter le deuxième type de mise en forme dans le même code VB (1 000 parents, 100 oncles, ...) ?
Sinon je ferais le copier / coller en A2 pour la seconde mise en forme si cela n'est pas possible (de ce fait il faudrait que le VB de traitement pour la seconde mise en forme traite la cellule A2).

Merci encore :)
 

JNP

XLDnaute Barbatruc
Re : Decouper le contenu d'une cellule par mot clef

Re :),
Code:
Function Extrait(Recherche As String, AExtraire As String) As Integer
Application.Volatile
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(.*)(" & UCase(AExtraire) & " ?)(:|,)( ?)([0-9 ]+)(.*)"
    If .Test(UCase(Recherche)) Then
        Extrait = Replace(.Replace(UCase(Recherche), "$5"), " ", "") * 1
    End If
End With
End Function
traiteras indiféremment le séparateur ":" ou le séparateur ",", mais c'est bien ce que disait mes petits camarades, un cahier des charges, ça se prépare exhaustif :mad:...
Bonne suite :cool:
Ajout : Traite le remplacement du : par une , par l'inversion des mots-clef/chiffres...
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Decouper le contenu d'une cellule par mot clef

Re :),
Code:
Function Extrait(Recherche As String, AExtraire As String) As Integer
Application.Volatile
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(.*)(" & UCase(AExtraire) & " ?):( ?)([0-9 ]+)(.*)"
    If .Test(UCase(Recherche)) Then
        Extrait = Replace(.Replace(UCase(Recherche), "$4"), " ", "") * 1
    Else
        .Pattern = "(.*)(" & UCase(AExtraire) & " ?)([0-9 ]+)((,.*)|$)"
        If .Test(UCase(Recherche)) Then
            Extrait = Replace(.Replace(UCase(Recherche), "$3"), " ", "") * 1
        End If
    End If
End With
End Function
Traite en même temps "parents:1000 tantes: 80" et "1000 parents, 80 tantes", mais c'est tout...
Je pense que je m'arrêtrai là :rolleyes:...
 

Joker

XLDnaute Nouveau
Re : Decouper le contenu d'une cellule par mot clef

Re,

A priori ça fonctionne pour les deux mises en formes :)
Je fais des tests plus poussés et je reviendrais si jamais j'ai un problème quelconque avec toutes les infos d'un coup promis :|

Merci !
 

Discussions similaires

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 155
dernier inscrit
lombrik