XL 2016 mots en colonne et en ligne dans Excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

finarobert

XLDnaute Junior
Supporter XLD
Bonjour à tous
j'ai un petit problème à résoudre (voir fichier excel)
sur la première colonne, j'ai des lettres affichées, toujours une par ligne avec un espace qui sépare deux séries qui peuvent donc être constituées de 3, 4, 5, 6 7 etc....
je veux passer des caractères verticaux en mots (voir caractères rouges) est ce possible?
merci par avance
Robert
 

Pièces jointes

Bonsoir @finarobert🙂,

Mettre la formule suivante en D4 et recopier cette formule vers le bas :
=SIERREUR(SI(OU(LIGNES(C$4:C4)=1;C3="");CONCAT(DECALER(C4;0;0;EQUIV(1;1*(C4:C24="");0)-1;1));"");"")

nota : sur Excel 2016, il faudra sans doute valider matriciellement cette formule.
1755021710581.png
 

Pièces jointes

Dernière édition:
Bonsoir @finarobert🙂,

Mettre la formule suivante en D4 et recopier cette formule vers le bas :
=SIERREUR(SI(OU(LIGNES(C$4:C4)=1;C3="");CONCAT(DECALER(C4;0;0;EQUIV(1;1*(C4:C24="");0)-1;1));"");"")

nota : sur Excel 2016, il faudra sans doute valider matriciellement cette formule.
Regarde la pièce jointe 1221312
Bonsoir ma pomme. J"ai pris votre fichier retour mais rien ne bouge même avec unCtrl+Maj+entrée? Je pêche où?
 
Bonsoir ma pomme. J"ai pris votre fichier retour mais rien ne bouge même avec unCtrl+Maj+entrée? Je pêche où?
Re,

Je suis en train de me demander si la fonction Concat existe dans Excel 2016.
N'ayant plus que Excel 365, pouvez-vous vérifier la présence de la fonction Concat dans Excel 2016 ?

Mon classeur ne fonctionne pas chez vous ? Si vous changez une donnée dans la colonne C, la formule donne-t-elle le bon résultat ?
 
Bonsoir @finarobert🙂,

Mettre la formule suivante en D4 et recopier cette formule vers le bas :
=SIERREUR(SI(OU(LIGNES(C$4:C4)=1;C3="");CONCAT(DECALER(C4;0;0;EQUIV(1;1*(C4:C24="");0)-1;1));"");"")

nota : sur Excel 2016, il faudra sans doute valider matriciellement cette formule.
Regarde la pièce jointe 1221312

Re,

Je suis en train de me demander si la fonction Concat existe dans Excel 2016.
N'ayant plus que Excel 365, pouvez-vous vérifier la présence de la fonction Concat dans Excel 2016 ?

Mon classeur ne fonctionne pas chez vous ? Si vous changez une donnée dans la colonne C, la formule donne-t-elle le bon résultat

la fonction s'appelle concatener( )
LE CLASSEUR NE FONCTIONNE PAS , la colonne reste vide
 
Bonjour le fil

Une solution avec Power Query
Concatener.PNG

Ci-dessous le code M utilisé
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    Typage = Table.TransformColumnTypes(Source,{{"Colonne1", type text}}),
    AjoutIndex = Table.AddIndexColumn(Typage, "Index", 0, 1),
    Grouper = Table.AddColumn(AjoutIndex, "GroupID", each let
            Idx = [Index],
            LigPrec = Table.FirstN(AjoutIndex, Idx),
            NBVides = Table.RowCount(Table.SelectRows(LigPrec, each [Colonne1] = null or [Colonne1] = ""))
        in
            NBVides),
   
    Filtrer = Table.SelectRows(Grouper, each [Colonne1] <> null and [Colonne1] <> ""),
    Regrouper = Table.Group(Filtrer, {"GroupID"}, {
        {"pIdx", each List.Min([Index])},
        {"Concatenation", each Text.Combine([Colonne1])}
    }),
    Joindre = Table.Join(AjoutIndex, {"Index"}, Regrouper, {"pIdx"}),
    Nettoyage = Table.SelectColumns(Joindre, {"Colonne1", "Concatenation"})
in
    Nettoyage
NB: Normalement PQ est disponible avec Excel 2016
 
Bonjour à tous😉,

La macro de ma pomme.
  • Les données sont automatiquement mises à jour quand on modifie une ou des cellules depuis les cellules C4 et D4.
  • Pour indiquer la cellule de départ des données, utiliser la constante CelluleTop (pour l'exemple Const CelluleTop = "C4"). Connaître la cellule de départ permet de ne pas prendre en compte les éventuels titres des colonnes en C3 et C4.
  • Le code est dans le module de la feuille "Feuil1" et il est commenté.

Le code :
VB:
Const CelluleTop = "C4"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TopCell As Range, Inter As Range, plage As Range, t, i&, k&
   Set TopCell = Range(CelluleTop)        ' la cellule supérieur de la plage concernée
   ' plage est la plage de la colonne de topcell ET de la suivante jusqu'au bas de la feuille
   Set plage = Range(TopCell, Range(TopCell, Cells(Rows.Count, TopCell.Column + 1)))
   If Intersect(Target, plage) Is Nothing Then Exit Sub     ' si plage n'a pas été modifié, on abandonne
   Set plage = Intersect(plage, Me.UsedRange)   ' plage est réduite à la partie utilisée de la feuille
   t = plage.Value                              ' tableau (array) des valeurs
   i = 1: k = 0
   Do
      t(i, 2) = CStr("")                    ' on vide la deuxième colonne de t (celle de la concaténation)
      If t(i, 1) = "" Then             ' t(i,1) est vide
         k = 0                         ' la concaténation de la ligne est aussi vide
      Else                             ' t(i,1) n'est pas vide
         If k = 0 Then k = i           ' k = 0 : on rencontre une 1ère fois une valeur non vide, on stocke le n° de ligne
         t(k, 2) = t(k, 2) & t(i, 1)   ' on concatène t(i,1) avec t(k,2)
      End If
      i = i + 1                        ' on incrémente i pour préparer le traitement de la cellule suivante
      If i > UBound(t) Then Exit Do    ' i est supérieur au nombre de ligne de t alors on quitte la boucle
   Loop
   On Error GoTo FIN                   ' en cas d'erreur, on rétablira le traitement des évènements
   Application.EnableEvents = False    ' on arrête le traitement des évènements
   TopCell.Resize(UBound(t), 2).NumberFormat = "@"    ' cellules au format texte
   TopCell.Resize(UBound(t), 2) = t    ' on transfére t sur la feuille
FIN:
   Application.EnableEvents = True     'on rétablit le traitement des évènements
End Sub
 

Pièces jointes

Dernière édition:
Re

Après PQ, une formule pour ceux qui rencontreraient le même problème que Finarobert mais qui ont Excel 365
Code:
=SI(A1="";"";SI(OU(LIGNE()=1;ESTVIDE(DECALER(A1;-1;0)));JOINDRE.TEXTE("";VRAI;A1:INDEX(A:A;MIN(SI(A2:A$1000="";LIGNE(A2:A$1000)))-1));""))
Formules.PNG
 
Dernière édition:
où puis je trouver ce programme dans le fichier excel?

Dans Excel il y a un environnement qui s'appelle VBE (Visual Basic Editor). Quand on est dans cet environnement, on a accès aux macros.
Pour simplifier si vous débutez :
  • refermer tous les classeurs sauf le classeur de mapomme du message #11
  • sélectionner la feuille concernée "Feuil1"
  • tapez la combinaison des deux touches : Alt F11
  • la fenêtre de l'éditeur VBE apparait
1755090240008.png

  • si dans la fenêtre de Projet - VBAProject (à gauche), la ligne Feuil1 (Feuil1) n'est pas sélectionnée, alors double-cliquez sur la ligne "Feuil1 (Feuil1)". Vous obtiendrez ceci :
1755090467606.png


  • dans le volet à gauche, la ligne Feuil1 (Feuil1) est maintenant sélectionnée et dans le volet à droite, se trouve le code lié à cette feuille.
  • sélectionnez toutes les lignes du code dans le volet à droite et sauvegardez ces lignes de code par exemple en les collant dans le bloc-notes (Notepad).
  • Refermez le classeur.

Insertion du code dans votre classeur:
  • ouvrez comme unique classeur votre classeur concerné.
  • refaites les mêmes opérations que ci-dessus pour accéder à la fenêtre de code de votre classeur (ce n'est sans doute pas Feuil1). Basez vous sur le nom de votre feuille de calcul pour repérer la bonne ligne dans le volet Projet et pour double-cliquer dessus.
  • dans le volet de droite, effacer tout (le cas échéant).
  • puis collez y le texte que vous aviez sauvegardé (par exemple depuis le bloc-notes).
  • vous pouvez maintenant refermer la fenêtre VBA et tester la macro.

..
 
Bonjour à tous😉,

La macro de ma pomme.
  • Les données sont automatiquement mises à jour quand on modifie une ou des cellules depuis les cellules C4 et D4.
  • Pour indiquer la cellule de départ des données, utiliser la constante CelluleTop (pour l'exemple Const CelluleTop = "C4"). Connaître la cellule de départ permet de ne pas prendre en compte les éventuels titres des colonnes en C3 et C4.
  • Le code est dans le module de la feuille "Feuil1" et il est commenté.

Le code :
VB:
Const CelluleTop = "C4"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TopCell As Range, Inter As Range, plage As Range, t, i&, k&
   Set TopCell = Range(CelluleTop)        ' la cellule supérieur de la plage concernée
   ' plage est la plage de la colonne de topcell ET de la suivante jusqu'au bas de la feuille
   Set plage = Range(TopCell, Range(TopCell, Cells(Rows.Count, TopCell.Column + 1)))
   If Intersect(Target, plage) Is Nothing Then Exit Sub     ' si plage n'a pas été modifié, on abandonne
   Set plage = Intersect(plage, Me.UsedRange)   ' plage est réduite à la partie utilisée de la feuille
   t = plage.Value                              ' tableau (array) des valeurs
   i = 1: k = 0
   Do
      t(i, 2) = CStr("")                    ' on vide la deuxième colonne de t (celle de la concaténation)
      If t(i, 1) = "" Then             ' t(i,1) est vide
         k = 0                         ' la concaténation de la ligne est aussi vide
      Else                             ' t(i,1) n'est pas vide
         If k = 0 Then k = i           ' k = 0 : on rencontre une 1ère fois une valeur non vide, on stocke le n° de ligne
         t(k, 2) = t(k, 2) & t(i, 1)   ' on concatène t(i,1) avec t(k,2)
      End If
      i = i + 1                        ' on incrémente i pour préparer le traitement de la cellule suivante
      If i > UBound(t) Then Exit Do    ' i est supérieur au nombre de ligne de t alors on quitte la boucle
   Loop
   On Error GoTo FIN                   ' en cas d'erreur, on rétablira le traitement des évènements
   Application.EnableEvents = False    ' on arrête le traitement des évènements
   TopCell.Resize(UBound(t), 2).NumberFormat = "@"    ' cellules au format texte
   TopCell.Resize(UBound(t), 2) = t    ' on transfére t sur la feuille
FIN:
   Application.EnableEvents = True     'on rétablit le traitement des évènements
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
470
Réponses
12
Affichages
498
Retour