XL 2016 Éclatement de texte sur plusieurs colonnes

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonsoir Le Forum,
Je bloque dans les macros du bouton "ÉCLATER" du fichier ci-joint, et je viens vous demander un peu de lumière, notamment pour la colonne AS.
Je voudrais afficher des résultats de macros à partir de la ligne 23 (pour le moment) puis plus tard généraliser à partir de la ligne 9.

- ligne 9 à 22 : les colonnes AR à AT et AZ à BD fonctionnent par mes formules initiales.
- au-delà, le fonctionnement se fait par macros du type tablo(i,1) pour plus de rapidité et sans formules dans les cellules précédentes lignes 9-22.
Les macros actuelles ne respectent malheureusement pas tout à fait les formules des cellules au-dessus (parce que je n'arrive pas à les transcrire
parfaitement par VBA)
- quant à la macro commencée pour la colonne AS, je suis vraiment perdu après plusieurs heures de tatonnements de plus en plus catastrophiques...

Cela me serait agréable que vous puissiez me venir en aide pour corriger les macros.
Je vous en remercie à l'avance,
Portez-vous et protégez-vous bien tous,
Webperegrino
 

Pièces jointes

  • ECLATEMENT TEXTE.xlsm
    49.1 KB · Affichages: 15

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonsoir Le Forum,
Bonsoir Sylvanu,
Merci : votre essai est intéressant et va pouvoir remplacer une partie de mes macros.

Le fichier ci-joint est rectifié dans sa formule entre les lignes 9 et 22 dans la colonne AR

En simple : dans le futur les macros travailleront aussi entre les lignes 9 et 22, comme elle le feraient de la ligne 23 à la fin de la liste. Tout cela pour ne plus voir de formules dans les cellules mais seulement des résultat de calcul VBA.

Il reste à créer la bonne programmation vba (voir en fin de mes macros) pour la colonne AS :

- nous devrions obtenir en AS 137 :
S2​
22:30 - 01:30​

- nous devrions obtenir en AS 119 :
S1 S2​
21:00 - 01:30​
- ... et rien en AS 138 et en AS139

Tout le reste fonctionne à merveille,
Merci pour cette éventuel complément d'aide,
Webperegrino
 

Pièces jointes

  • ECLATEMENT TEXTE-2.xlsm
    47.8 KB · Affichages: 5

Webperegrino

XLDnaute Impliqué
Supporter XLD
Selon ...
- la formule qui est en cellule AR9 par exemple
- mais transposée en VBA comme ci-après (placée en début de macro en Feuil1) :

VB:
Private Sub CommandButton1_Click()
...
With Range("D23:D" & dl)
    tablo = .Value
    For i = 1 To UBound(tablo)
        x = Replace(tablo(i, 1), " ", " ")
         tablo(i, 1) = Left(Right(x, 13), 2)
        If IsError(Right(tablo(i, 1), 1)) Then
            tablo(i, 1) = ""
            Else
            If IsNumeric(Right(tablo(i, 1), 1)) Then
              If tablo(i, 1) = "19" Then
                tablo(i, 1) = "S1"
                Else
                If tablo(i, 1) = "21" Then
                  tablo(i, 1) = "S1 S2"
                  Else
                  tablo(i, 1) = "S2"
                End If
              End If
              Else
              tablo(i, 1) = ""
            End If
        End If
    Next
End With
  With Range("AR23:AR" & dl)
  .Value = tablo
  End With

Webperegrino
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Essayez ça :
VB:
'****************
' ICI JE COINCE !
'****************
'Colonne AS ***** PROBLÈME  *****
'=SI(OU(D22="";GAUCHE(D22)="¤");"";SI(C22="RECETTE";AR22&"
'"&DROITE(D22;13);""))
With Range("D23:D" & dl)
    tablo = .Value
    For i = 1 To UBound(tablo) - 2
        If IsError(Right(tablo(i, 1), 1)) Then
            tablo(i, 1) = ""
            Else
            tablo2 = Split(tablo(i, 1), Chr(10))
            ' 22 car offset entre N° ligne et i.
            tablo(i, 1) = Range("AR" & i + 22) & Chr(10) & tablo2(1)
        End If
    Next
End With
  With Range("AS23:AS" & dl)
  .Value = tablo
  End With

End Sub
Le piège est que i commence à 1 mais que colonne AR commence en 23, d'où l'offset rajouté.
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Merci Sylvanu,
J'étudie cela dès demain matin.
J'ai essayé en démarrant la macro pour l'appliquer de la ligne 8 jusqu'en bas mais cela semble bloquer. Il est vrai que ce type de programmation par "tablo()" est quasi nouveau pour moi. je serais preneur d'explications de fonctionnement, sinon où trouver un tuto pour des applications simples ?).


Dommage parce qu'on est prêt du bon fonctionnement ; ce serait dommage de passer par du 'For To Next ligne par ligne pour cette colonne AS.
La macro doit aussi s’appliquer AS138 et AS139 (cellule vide car pas d'horaire en D138 et D139.

VB:
With Range("D8:D" & dl) 'With Range("D23:D" & dl)
...
            ' 22 car offset entre N° ligne et i.
            'tablo(i, 1) = Range("AR" & i + 22) & Chr(10) & tablo2(1)
            tablo(i, 1) = Range("AR" & i + 7) & Chr(10) & tablo2(1) ' et même en laissant 22
...
End With
  With Range("AS8:AS" & dl) 'With Range("AS23:AS" & dl)
  .Value = tablo
  End With
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Moi, ça marche.
Vous avez repris tous les modules pour commencer en 8 ?

sinon pour tablo, c'est très simple.
Le split "découpe" la donnée en fonction du séparateur.
Si vous faites :
VB:
Chaine="Bonjour comment allez vous"
tablo=split(Chaine," ")
Vous obtenez :
tablo(0)="Bonjour"
tablo(1)="comment"
tablo(2)="allez"
tablo(3)="vous"
très pratique.
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour le Forum, Sylvanu,
Excellent ! je comprends mieux après le message #8.

Maintenant, il me reste à découvrir :
- comment appliquer les macros non plus à partir de la ligne 23 mais à partir de la ligne 8 pour le pavé AR à AT
- indiquer cellule vide en résultat si la cellule de la colonne D commence par "¤" ou que la cellule de la colonne C ne contient pas "RECETTE" (le problème des cellules actuelles AS138 et AS139).
- à créer une macro avec "tablo()" sur la colonne AT selon la construction de ce qui est en formule dans la cellule AT8.

Pour tout le pavé AZ-BD c'est réglé, avec correction à ma sauce pour "vide si début avec "¤" en colonne D"
Il me reste à régler tout le pavé AR-AT selon cette approche.
Fichier amélioré ci-joint pour ceux qui sont intéressés.
Merci Sylvanu, votre intervention m'a vraiment fait avancer.
Cordialement,
Webperegrino
 

Pièces jointes

  • ECLATEMENT TEXTE-SYLVANU2.xlsm
    48.3 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Colonnes AR AS fait.
Je vous laisse la colonne AT, je n'ai pas bien compris la formule qui était en AT.

Il semblerait qu'il y ait des erreurs dans la list Ordre Alphe. ( 2*Spec7, pas de Salle 8 ... )
 

Pièces jointes

  • ECLATEMENT TEXTE-SYLVANU3.xlsm
    54.1 KB · Affichages: 4
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Exact Sylvanu

1 - C'est rectifié en paramètres :
ORDRE ALPHA
SALLE 101
SALLE 202
SALLE 808
SPEC 1010
SPEC 303
SPEC 404
SPEC 505
SPEC 606
SPEC 707
SPEC 909

2 - Youpi ! j'ai réussi à programmer pour la colonne AS
VB:
'Colonne AS
[SIZE=1][I]'objectif : formulation de départ en Colonne AS à placer en macro VBA[/I][/SIZE]
[I][SIZE=1]'=SI(OU(D22="";GAUCHE(D22)="¤");"";SI(C22="RECETTE";AR22&"[/SIZE][/I]
[SIZE=1][I]'"&DROITE(D22;13);""))[/I][/SIZE]
  With Range("D8:D" & dl)
    tablo = .Value
    For i = 1 To UBound(tablo) ' - 2
        If IsError(Right(tablo(i, 1), 1)) Then
            tablo(i, 1) = ""
            Else
            tablo2 = Split(tablo(i, 1), Chr(10))
            If Left(tablo(i, 1), 1) = "¤" Then
            tablo(i, 1) = ""
            Else
            tablo(i, 1) = Range("AR" & i + 7) & Chr(10) & tablo2(1)
            End If
        End If
    Next
  End With
  With Range("AS8:AS" & dl)
  .Value = tablo
  End With

3 - J'attaque maintenant le gros : la colonne AT
Je joindrai le fichier complet pour les intéressés ultérieurement.
Merci Sylvanu
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Sylvanu pour #11
ça ne va pas fonctionner car dans les dénominations de la colonne D
SPEC 6
19:00 - 22:30

sera par exemple

PLACE DES ARTISTES
19:00 - 22:30

c'est pour cela que la formulation va rechercher le nom du lieu de spectacle en Paramètres dans le pavé D73-E82 pour en extraire le numéro correspondant en Paramètres!E73 à E83, et le placer en colonne AT de Feuil1!

Je suis sur le point de réussir, mais dois reprendre cela dans quelques heures.
Webperegrino
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Glupss : chevauchement de messages #14 et #13.
J'étudie cela en tenant aussi compte du contenu du #14 qui change la donne...
et vous reviens plus tard, c'est passionnant cette nouvelle façon de programmer avec tablo() : quelle rapidité d'exécution, et ainsi ma feuille ne contient plus ces formules !
Merci encore Sylvanu et ainsi qu'aux experts qui m'ont fait découvrir cela sur ce magnifique Forum de partage de connaissances.
Webperegrino
 

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 947
Membres
104 705
dernier inscrit
Mike72