XL 2013 Extraire des données d'une cellule

elodieee

XLDnaute Nouveau
Bonjour,
Je cherche en vain une solution à mon problème sur excel.
Dans le cadre de mon travail, je reçois des extractions Outlook sur Excel.
Le corps du message en entier tiens dans une seule cellule. J'ai donc un texte immense dans chaque cellule.
Le travail consiste à extraire des mots clés de chaque mail.

Par exemple:
A1 B1 C3
email adresse 13/08/2019 Corps du message

Les messages ont toujours le même style de texte:

Message reçu ce jour
SENDER: BANQUE TRUC
DEVISES : EURO
MONTANT : 55
Dossier clos

Le but serait d'extraire uniquement les données SENDER, DEVISES et MONTANT dans une autre feuille afin de pouvoir établir un total pour chaque banque.

Je vous mets un exemple ce sera plus parlant !

Je vous remercie pour votre aide!

Bonne journée
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @elodieee, bienvenue sur XLD :),

Un essai par VBA. Cliquez sur le bouton HOP!
Le code est dans module1:
VB:
Sub test()
Dim t, s, i&, j&, n&

With Sheets("Feuil1")
  t = Range("c:c").Resize(Cells(Rows.Count, "c").End(xlUp).Row)
  ReDim v(1 To 3, 1 To 1)
  n = 1: v(1, n) = "SENDER": v(2, n) = "DEVISE": v(3, n) = "MONTANT"
  For i = 1 To UBound(t)
    s = Split(t(i, 1), Chr(10))
    If IsArray(s) Then
      For j = LBound(s) To UBound(s)
        If s(j) Like "SENDER : *" Then
          n = n + 1
          ReDim Preserve v(1 To 3, 1 To n)
          v(1, n) = Mid(s(j), Len("SENDER : "), 999)
          v(2, n) = Mid(s(j + 2), Len("DEVISE : "), 999)
          v(3, n) = CDbl(Replace(Mid(s(j + 1), Len("MONTANT : "), 999), ".", ","))
        End If
      Next j
    End If
  Next i
End With
With Sheets("RES")
  .Columns("a:c").Clear
  .Range("a1").Resize(UBound(v, 2), 3) = Application.Transpose(v)
  .Range("c1").Resize(UBound(v, 2)).NumberFormat = "0.00"
  .Select
End With
End Sub
edit : Bonsoir @zebanx :), @djidji59430 :)
 

Fichiers joints

Dernière édition:

zebanx

XLDnaute Accro
Bonsoir Mapomme, PierreJean, Djidji59340 --> ;)

@mapomme.
Joli code une fois de plus. Comme PierreJean, deux approches c'est top! :D

Peux-tu m'expliquer cependant pourquoi tu utilises STP une boucle
If IsArray(s) then.... end if
?

@+ et merci pour ta réponse.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @zebanx ;) ,
Peux-tu m'expliquer cependant pourquoi tu utilises STP une boucle
If IsArray(s) then.... end if
Tu veux sans doute parler de condition au lieu de boucle ?
Imaginons que la cellule ne contienne aucun caractère Chr(10) (c'est le cas pour la ligne 1 et pour la ligne 2).
Dans ce cas, s = Split(t(i, 1), Chr(10)) ne renverrait pas un tableau mais une variable simple contenant tout le contenu de la cellule.
s n'étant pas dans ce cas un tableau, l'instruction For j = LBound(s) To UBound(s) provoquerait une erreur puisque LBound(s) n'existerait pas tout comme Ubound(s) n'existerait pas non plus.
Pour me prémunir contre cette erreur, je n'exécute la boucle que si s est vraiment un tableau d'où la condition...
 
Dernière édition:

elodieee

XLDnaute Nouveau
Bonjour @elodieee, bienvenue sur XLD :),

Un essai par VBA. Cliquez sur le bouton HOP!
Le code est dans module1:
VB:
Sub test()
Dim t, s, i&, j&, n&

With Sheets("Feuil1")
  t = Range("c:c").Resize(Cells(Rows.Count, "c").End(xlUp).Row)
  ReDim v(1 To 3, 1 To 1)
  n = 1: v(1, n) = "SENDER": v(2, n) = "DEVISE": v(3, n) = "MONTANT"
  For i = 1 To UBound(t)
    s = Split(t(i, 1), Chr(10))
    If IsArray(s) Then
      For j = LBound(s) To UBound(s)
        If s(j) Like "SENDER : *" Then
          n = n + 1
          ReDim Preserve v(1 To 3, 1 To n)
          v(1, n) = Mid(s(j), Len("SENDER : "), 999)
          v(2, n) = Mid(s(j + 2), Len("DEVISE : "), 999)
          v(3, n) = CDbl(Replace(Mid(s(j + 1), Len("MONTANT : "), 999), ".", ","))
        End If
      Next j
    End If
  Next i
End With
With Sheets("RES")
  .Columns("a:c").Clear
  .Range("a1").Resize(UBound(v, 2), 3) = Application.Transpose(v)
  .Range("c1").Resize(UBound(v, 2)).NumberFormat = "0.00"
  .Select
End With
End Sub
edit : Bonsoir @zebanx :), @djidji59430 :)

Super merci beaucoup!!!!!!!
C'est parfait :)
 

elodieee

XLDnaute Nouveau
Bonjour @elodieee, bienvenue sur XLD :),

Un essai par VBA. Cliquez sur le bouton HOP!
Le code est dans module1:
VB:
Sub test()
Dim t, s, i&, j&, n&

With Sheets("Feuil1")
  t = Range("c:c").Resize(Cells(Rows.Count, "c").End(xlUp).Row)
  ReDim v(1 To 3, 1 To 1)
  n = 1: v(1, n) = "SENDER": v(2, n) = "DEVISE": v(3, n) = "MONTANT"
  For i = 1 To UBound(t)
    s = Split(t(i, 1), Chr(10))
    If IsArray(s) Then
      For j = LBound(s) To UBound(s)
        If s(j) Like "SENDER : *" Then
          n = n + 1
          ReDim Preserve v(1 To 3, 1 To n)
          v(1, n) = Mid(s(j), Len("SENDER : "), 999)
          v(2, n) = Mid(s(j + 2), Len("DEVISE : "), 999)
          v(3, n) = CDbl(Replace(Mid(s(j + 1), Len("MONTANT : "), 999), ".", ","))
        End If
      Next j
    End If
  Next i
End With
With Sheets("RES")
  .Columns("a:c").Clear
  .Range("a1").Resize(UBound(v, 2), 3) = Application.Transpose(v)
  .Range("c1").Resize(UBound(v, 2)).NumberFormat = "0.00"
  .Select
End With
End Sub
edit : Bonjour @zebanx :), @djidji59430 :)
J'ai essayé de transposer votre code dans mon fichier réel, mais ça ne fonctionne pas...
Dans ma feuille 2 , je retrouve juste les entête
Bonjour @elodieee, bienvenue sur XLD :),

Un essai par VBA. Cliquez sur le bouton HOP!
Le code est dans module1:
VB:
Sub test()
Dim t, s, i&, j&, n&

With Sheets("Feuil1")
  t = Range("c:c").Resize(Cells(Rows.Count, "c").End(xlUp).Row)
  ReDim v(1 To 3, 1 To 1)
  n = 1: v(1, n) = "SENDER": v(2, n) = "DEVISE": v(3, n) = "MONTANT"
  For i = 1 To UBound(t)
    s = Split(t(i, 1), Chr(10))
    If IsArray(s) Then
      For j = LBound(s) To UBound(s)
        If s(j) Like "SENDER : *" Then
          n = n + 1
          ReDim Preserve v(1 To 3, 1 To n)
          v(1, n) = Mid(s(j), Len("SENDER : "), 999)
          v(2, n) = Mid(s(j + 2), Len("DEVISE : "), 999)
          v(3, n) = CDbl(Replace(Mid(s(j + 1), Len("MONTANT : "), 999), ".", ","))
        End If
      Next j
    End If
  Next i
End With
With Sheets("RES")
  .Columns("a:c").Clear
  .Range("a1").Resize(UBound(v, 2), 3) = Application.Transpose(v)
  .Range("c1").Resize(UBound(v, 2)).NumberFormat = "0.00"
  .Select
End With
End Sub
edit : Bonjour @zebanx :), @djidji59430 :)
J'ai tenté de coller votre code dans mon fichier réel, et cela ne fonctionne pas...
Ca me rapporte bien SENDER MONTANT DEVISE dans la feuille 2 , mais c'est tout, pas d'autres infos...
Je ne connais pas VBA, pouvez juste me dire où se trouvent les infos que je dois modifier pour l'adapter au style de mon fichier?
Je vous remercie beaucoup !!!

Bonne journée :cool:
 

pierrejean

XLDnaute Barbatruc
Re

Salut djidji tapomme zebanx
@elodieee
Je suppose que ma version ne fonctionne pas non plus sur ton fichier réel
Le mieux est que tu nous montre la structure de ton fichier réel (une copie avec les données anonymisées de quelques lignes )
 

elodieee

XLDnaute Nouveau
@Amilo
c'est parfait! Merci!
Mais je n'ai pas POWER ENQUIRY sur les pc du bureau, et interdiction d'installer des logiciels, je suis bloquée :'(
 

Amilo

XLDnaute Accro
Re,
S'agit-il également d'une version Excel 2013 au travail ?
Sinon, Power query est un complément téléchargeable pour les versions 2010 et 2013 mais déjà intégré à partir d'Excel 2016
Je pourrais joindre une doc si vous voulez pour le téléchargement de power query mais à voir avant avec votre responsable pour l'autorisation
Sinon, c'est vraiment dommage de s'en priver
Cordialement
 
Dernière édition:

elodieee

XLDnaute Nouveau
J'ai une version 2013 Pro, j'ai tenté de télécharger POWER QUERY mais j'ai un blocage administrateur.
A quoi sert exactement cette extension?
 

pierrejean

XLDnaute Barbatruc
Re

Voici un début avec tes nouvelles structures
Pour la suite modifie sur une nouvelle feuille le tableau en feuille RES pour le tri souhaité (Banque ou Sender ) et les totaux par devise
et j’automatiserais
 

Fichiers joints

Amilo

XLDnaute Accro
J'ai une version 2013 Pro, j'ai tenté de télécharger POWER QUERY mais j'ai un blocage administrateur.
A quoi sert exactement cette extension?
Re,
Voici les grandes lignes de l'intérêt d'utiliser Power Query,
Mais il est intéressant également de parler de 2 autres compléments : Power Pivot et éventuellement Power View

Power Query

Il permet de :

- Se connecter à de nombreuses sources de données : fichiers Excel, CSV, dossiers, bases de données, Web, etc…

- De collecter, extraire, nettoyer, transformer (fusionner/combiner avec plusieurs autres requêtes ou tables), filtrer, organiser les données grâce notamment aux nombreuses commandes du ruban Power query.

- D’automatiser ce processus de « récupération/nettoyage/transformation » et de mettre à jour toutes les modifications des données en un seul clic avec le bouton « Actualiser tout »

Une fois le processus de « récupération/nettoyage/transformation » terminé dans Power query, nous pouvons :

Restituer les données dans Excel. On peut décider de s’arrêter là et c’est déjà pas mal, sachant qu’un tel processus est souvent fastidieux et très long à mettre en œuvre hors VBA ou Power query.

Power query permet donc de simplifier grandement toutes les tâches citées plus haut, d’automatiser ce processus et de mettre à jour les données par simple « Clic ».

Vous avez de très nombreuses vidéos sur des cas pratiques sur Youtube notamment

Power Pivot

Il permet de :

- après les étapes de collecte/transformation dans Power Query, de poursuivre et charger les données dans Power Pivot afin de les analyser avec des rapports TCD. Bien sûr, nous pourrions charger directement des feuilles Excel directement dans Power Pivot pour les analyser sans passer par Power Query si les données sont déjà structurées, nettoyées et prêtes à "l'emploi".

Les données peuvent être sous une table unique ou plus souvent sous plusieurs tables ou requêtes distinctes reliées entre elles par une relation (appelé « modèle de données » dans le 2ème cas)

Dans Power Pivot, les tables ou données sont généralement bonifiées en ajoutant des calculs plus poussés utilisables dans les rapports TCD (par exemple des champs calculés complexes)

Power View

- Soit d’aller encore plus loin par Explorer et analyser le modèle de données en créant des graphiques croisés dynamiques indépendants et visuels interactifs avec Power View

Power Pivot et Power View sont 2 autres compléments que l’on peut activer/installer dans Excel 2010/2013 (déjà intégrés à partir de la version 2016)

J'espère vous avoir éclairée un peu sur le sujet.

Cordialement
 
Dernière édition:

Discussions similaires


Haut Bas