XL 2019 Cellule répartie en 4

EliotNaiss

XLDnaute Nouveau
Bonjour à vous.
Je viens chercher de l'aide car je ne m'en sors pas
icon_sad.gif

Dans une cellule j'ai des informations issues d'extraction.
C'est du genre, au maxi sur 4 lignes, a priori avec des retours lignes
icon_sad.gif
:

"Non renseigné
F1602 - Électricité bâtiment
N4101 - Conduite de transport de marchandises sur longue distance
N4105 - Conduite et livraison par tournées sur courte distance"

ou

"G1602 - Personnel de cuisine
F1602 - Électricité bâtiment
N4101 - Conduite de transport de marchandises sur longue distance
N4105 - Conduite et livraison par tournées sur courte distance"

Selon le contenu je veux répartir la donnée en 4 cellules...

Ce qui pourrait donner avec 1 ligne renseignée :

Nonrenseigné
ou
G1602 - Personnel de cuisine


Ce qui pourrait donner avec 2 lignes renseignées :

NonrenseignéF1602 - Électricité bâtiment
ou
G1602 - Personnel de cuisineF1602 - Électricité bâtiment

Ce qui pourrait donner avec 3 lignes renseignées :

NonrenseignéF1602 - Électricité bâtimentN4101 - Conduite de transport de marchandises sur longue distance
ou
G1602 - Personnel de cuisineF1602 - Électricité bâtimentN4101 - Conduite de transport de marchandises sur longue distance


Ce qui pourrait donner avec 4 lignes renseignées :

NonrenseignéF1602 - Électricité bâtimentN4101 - Conduite de transport de marchandises sur longue distanceN4105 - Conduite et livraison par tournées sur courte distance
ou
G1602 - Personnel de cuisineF1602 - Électricité bâtimentN4101 - Conduite de transport de marchandises sur longue distanceN4105 - Conduite et livraison par tournées sur courte distance


Mon tableau d'origine est assez grand, je cherche la formule idéale, et peut-être serait-il possible d'en faire une fonction ?

Grand merci pour le temps que vous pourrez passer sur mon cas
icon_redface.gif



Bien à vous
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
il me faut des formules (ou fonction "perso") afin de mettre à jour automatiquement ces 4 cellules.
Alors une version avec fonction perso :
VB:
Function Separe(C$, N%)
    Tablo = Split(C, Chr(10))
    If N <= 1 + UBound(Tablo) Then
        Separe = Tablo(N - 1)
    End If
    If Separe = 0 Then Separe = ""
End Function
Syntaxe : =Separe(Chaine;Niveau)
Mais à mon avis moins intéressante, vous serez obligé de propager les formules sur la longeur du tableau.
 

Pièces jointes

  • Cellule répartie en 4 (V4).xlsm
    23.9 KB · Affichages: 5

EliotNaiss

XLDnaute Nouveau
Alors une version avec fonction perso :
VB:
Function Separe(C$, N%)
    Tablo = Split(C, Chr(10))
    If N <= 1 + UBound(Tablo) Then
        Separe = Tablo(N - 1)
    End If
    If Separe = 0 Then Separe = ""
End Function
Syntaxe : =Separe(Chaine;Niveau)
Mais à mon avis moins intéressante, vous serez obligé de propager les formules sur la longeur du tableau.
Merci, je consulte, et reviens
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Fonction perso :
La syntaxe est =Separe(Chaine,N°) , par ex :
=separe($B7;2) va prendre la chaine B7 et en extraire l'item N°2 soit "J1202 - Pharmacie"
Le code est :
VB:
Function Separe(C$, N%)
    Tablo = Split(C, Chr(10))
    If N <= 1 + UBound(Tablo) Then
        Separe = Tablo(N - 1)
    End If
    If Separe = 0 Then Separe = ""
End Function
On récupère la chaine à traiter C$, les sauts de ligne dans les cellules est le caractère ASCII 10.
Donc on sépare cette chaine avec le Split. Par ex pour B11 on obtient le tableau suivant :
1668271382148.png

ensuite il suffit de lire l'item demandé, et de le remonter avec : Separe = Tablo(N - 1)
Si le Tablo ne contenait rien alors il remonte 0, d'où la ligne If Separe = 0 Then Separe = "" .
( pour les fonctions perso, un petit tuto si ça vous interesse : LIEN

Macro : ( d'ailleurs en commentant, j'ai vu qu'il restait un résidu inutile, d'où cette nouvelle PJ )
Code:
Sub Découpe()
    Dim DL%, C%, L%, Tablo
    Application.ScreenUpdating = False                  ' Fige l'écran
    DL = Range("B65500").End(xlUp).Row                  ' Recherche de la dernière ligne utilisée
    For L = 7 To DL                                     ' De la ligne 7 à la fin
        Tablo = Split(Cells(L, 2), Chr(10))             ' On sépare la chaine avec les reours à la ligne
        For C = 0 To UBound(Tablo)                      ' Pour tous les éléments du tableau ( Ubound donne la taille )
            Cells(L, C + 3) = Tablo(C)                  ' On écrit l'item désiré
        Next C
    Next L
    [A1].Select                                         ' On sélectionne A1, par pure esthètique.
End Sub
 

Pièces jointes

  • Cellule répartie en 4 (V6).xlsm
    25.4 KB · Affichages: 4

Discussions similaires

Réponses
39
Affichages
2 K

Statistiques des forums

Discussions
312 331
Messages
2 087 355
Membres
103 528
dernier inscrit
hplus