Extraire les données d'une cellule en plusieurs lignes et colonnes

Bonjour à tous,

Je travaille actuellement sur un fichier d’exploitation de données sur excel et je rencontre des difficultés pour résoudre une petit problème. Bon déjà le fonctionnement général du fichier est le suivant:
Chaque ligne correspond à un retour d’expérience sur chantier, pour chaque ligne on précise le type de travaux, la quantité réalisée, la somme déboursée, … et notamment les moyens humains et matériels associés à ce type de travaux. Dans une cellule est regroupé tout le matériel suivi à chaque fois du nombre d’heure associé et idem pour les moyens humains. Il y a 2 types de séparateurs,
« : » pour séparer le type de matériel et le nombre d’heure
« ; » pour passer d’un type de matériel à un autre.
Concrètement le contenu de la case est le suivant:
"matériel1:8;matériel2:5;matériel3:12;matériel4:6;etc… (la cellule peut contenir jusqu’à environ 20 types de matériel différents)

Je souhaiterais donc extraire les données de cette cellule et les répartir afin d’obtenir une colonne matériel et une colonne nombre d’heure le point virgule étant le séparateur qui indique un changement de ligne et les " : " un changement de colonne
Extraction données cellule en lignes et colonnes.xlsx (11,0 Ko)
Je ne sais pas si quelqu’un connait une fonction capable de faire cela ou s’il faut passer par du code VBA… le principal c’est d’obtenir quelque chose qui fonctionne et fiable ;).

Merci d’avance pour votre aide, je vous joint un fichier excel pour éclaircir la chose si besoin.

Bonjour SB17,

Voici une possibilité en VBA

Sub Extract()
Dim sTab() As String
Dim sVal As String
Dim Ind As Integer
’ Contenu de la cellule
sVal = Range(« B2 »).Value
’ Eclater en tableau
sTab = Split(sVal, « ; »)
’ Répartir les données
For Ind = 0 To UBound(sTab) - 1
Range(« F » & 3 + Ind).Value = Left(sTab(Ind), InStr(1, sTab(Ind), « : ») - 1)
Range(« G » & 3 + Ind).Value = Mid(sTab(Ind), InStr(1, sTab(Ind), « : ») + 1)
Next Ind
End Sub

@+

1 J'aime

Bonjour Nono,

Tout d’abord merci pour ta réponse, malheureusement j’ai repris ton code et il y a une erreur d’exécution 1004… Pourrais tu m’arranger cela stp?

Ci joint le fichier avec ton code VBA copié
Extraction données cellule en lignes et colonnes.xlsm (16,5 Ko)

Re,

  1. un code ne se met jamais dans la feuille directement sauf si c’est pour gérer les évènements de celle-ci, il faut donc le mettre dans un module

  2. Ce forum transforme les " en « ou » il faut y penser, l’initialisation de la variable sVal avec le contenu de la cellule B2 n’était pas bon

Voici le fichier

:wink:Extraction données cellule en lignes et colonnes.xlsm (18,8 Ko)

1 J'aime

Bonjour à tous,

Une proposition avec Power Query. (en add on pour Excel 2010 pro et 2013, en natif depuis Excel)2016.
Cordialement.
Extraction données cellule en lignes et colonnes.xlsx (20,2 Ko)

1 J'aime

Salut Nono,

Ok! effectivement cela marche beaucoup mieux. C’est super! cela répond parfaitement à mon besoin, merci beaucoup!

Maintenant pour aller plus loin (et si je peux abuser une dernière fois de tes connaissances) je souhaiterais que cette macro s’applique automatiquement à chaque fois que la valeur de cette cellule change. De cette façon, plus besoin de cliquer sur un bouton pour appliquer la macro…

Si quelqu’un d’autre a la solution je suis preneur bien évidemment!

SB17,

Voici le fichier modifié qui met à jour la répartition après saisie dans la cellule :wink:
SB17_Extraction données v2.xlsm (16,9 Ko)

1 J'aime

Au top, Merci beaucoup Nono.

1 J'aime

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.