• Initiateur de la discussion Initiateur de la discussion Sylvie64
  • Date de début Date de début

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 !

Sylvie64

XLDnaute Occasionnel
Bonsoir,

J'ai un fichier noté sur une colonne et sur 4/5 lignes, j'aimerai mettre cela sur une ligne. (il est toujours daté)

Je ne sais pas si cela est possible mais j'aimerai le résultat de mon fichier qui
se trouve en pièce jointe !

J'y ai mis que quelques lignes car il comporte plus de 3700 lignes.

Merci pour votre aide

Sylvie

PS : j'ai eu un code pour le même style mais pas possible de l'utiliser pour ce que j'aimerai. Je sais je chercher toujours les complications 😛
 
Re : Aide pour formule

Bonsoir Sylvie,

Qu'il y ait toujours une date pour chaque série de données, c'est heureux.

Mais je crois comprendre que vous voulez mettre les données en ligne dans les colonnes adéquates en fonction de la couleur de police.

Et ces couleurs ne se suivent pas nécessairement sur un même enregistrement d'origine.

Et on ne sait pas si sur les 3700 lignes on ne va pas en découvrir d'autres...

Alors avec cette histoire on va droit dans le mur.

Désolé, jocker.

A+
 
Re : Aide pour formule

Bonjour,

Merci Job75, c'est tout à fait ça !!! je suis compliqué !

Merci Julberto, mais c'est le résultat que j'avais au début, les fs et fa sont mélanger avec la 2ème ligne (vert) et les témoins (bleu)

merci d'avoir essayer.
Sylvie
 
Re : Aide pour formule

Bonjour le fil 🙂,
A condition que tous les cas de figure soient dans ton exemple 🙄...
Code:
Sub test()
Dim I As Long, J As Integer, K As Long
K = 3
For I = 4 To Range("B35000").End(xlUp).Row
If IsDate(Cells(I, 1)) Then
K = K + 1
Cells(K, 4) = Trim(Cells(I, 1))
Cells(K, 5) = Trim(Cells(I, 2))
J = 1
ElseIf Left(Trim(Cells(I, 2)), 3) = "fs " And J = 1 Then
Cells(K, 6) = Trim(Cells(I, 2))
J = 2
ElseIf J = 1 Or J = 2 Then
Cells(K, 7) = Trim(Cells(I, 2))
J = 3
ElseIf Left(Trim(Cells(I, 2)), 3) = "fa " And J = 3 Then
Cells(K, 8) = Trim(Cells(I, 2))
J = 4
ElseIf J = 3 Or J = 4 Then
Cells(K, 9) = Trim(Cells(K, 9) & " " & Trim(Cells(I, 2)))
End If
Next I
End Sub
Bonne journée 😎
 
Re : Aide pour formule

Bonjour Sylvie, julberto, Jean-Noël,

Bon Sylvie, vous auriez pu nous aider un peu plus 🙄

J'ai enfin compris que ce n'est pas du tout une question de couleur de police.

Il s'agit de repérer les textes commençant par "fs", "fa" ou "Témoin" pour les placer dans les bonnes colonnes.

Alors testez (via le bouton) cette macro dans le ficher joint :

Code:
Sub Transpose()
Dim dep&, lig&, cel As Range, txt$, tablo(), col As Byte, fs%, fa%, tem%
dep = 11 'ligne de départ des résultats, à ajuster
lig = dep - 1
Application.ScreenUpdating = False
Cells(dep, "D").Resize(5000, 10).ClearContents 'RAZ
For Each cel In Range("B4", [B65536].End(xlUp))
  txt = Application.Trim(cel) 'suppression des espaces inutiles
  If cel.Offset(, -1) <> "" Or lig < dep Then 'nouvelle série
    If lig >= dep Then Cells(lig, "D").Resize(, 10) = tablo 'restitution
    ReDim tablo(1 To 10)
    lig = lig + 1
    col = 1
  End If
  fs = InStr(txt, "fs "): fa = InStr(txt, "fa "): tem = InStr(txt, "Témoin")
  If col = 1 Then tablo(1) = cel.Offset(, -1)
  If fs Then
    tablo(3) = Mid(txt, fs, 999)
    If fs > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, fs - 1)
    End If
  ElseIf fa Then
    tablo(5) = Mid(txt, fa, 999)
    If fa > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, fa - 1)
    End If
  ElseIf tem Then
    tablo(6) = Mid(txt, tem, 999)
    If tem > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, tem - 1)
    End If
  Else
    col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
    tablo(col) = txt
  End If
Next
Cells(lig, "D").Resize(, 10) = tablo 'dernière ligne
End Sub
A+
 

Pièces jointes

Dernière édition:
Re : Aide pour formule

Merci pour vos réponses.

job75 vous avez vraiment trouvé ce que je voulais, super !
Mais, et oui! j'ai un souci au niveau du code (voir la copie en PJ)

J'ai mis en PJ le fichier de base, et il commence au A1 et jusque 3715 lignes (voir plus pour certain fichiers).

On peut, comme vous l'avez fait, mettre un espace dans les cellules vides des colonnes D:J : (surtout pas d'espace) j'en ai mis pour que se soit plus claire. merci

Je pensais pas pouvoir arrivé à un résultat comme ça, merci
 
Re : Aide pour formule

Re,

Ah Sylvie, on travaille au compte-goutte...

Vous avez écrit au post #1 :

J'ai un fichier noté sur une colonne et sur 4/5 lignes, j'aimerai mettre cela sur une ligne.

Fort de cela, dans ma macro, j'avais prévu la variable tablo avec 10 colonnes, ce qui me paraissait large.

Mais voilà que sur votre dernier fichier, un enregistrement (entre 2 dates) peut compter jusqu'à 13 cellules.

Alors finalement je paramètre la largeur du tableau et lui donne la valeur 20 (vous pourrez ainsi facilement la modifier si nécessaire).

Code:
Sub Transpose()
Dim LargeurTableau As Byte, dep&, lig&, cel As Range, txt$, tablo(), col As Byte, fs%, fa%, tem%
LargeurTableau = 20 'à ajuster éventuellement
dep = 3 'ligne de départ des résultats, à ajuster
lig = dep - 1
Application.ScreenUpdating = False
Cells(dep, "D").Resize(5000, LargeurTableau).ClearContents 'RAZ
For Each cel In Range("B1", [B65536].End(xlUp))
  txt = Application.Trim(cel) 'suppression des espaces inutiles
  If cel.Offset(, -1) <> "" Or lig < dep Then 'nouvelle série
    If lig >= dep Then Cells(lig, "D").Resize(, LargeurTableau) = tablo 'restitution
    ReDim tablo(1 To LargeurTableau)
    lig = lig + 1
    col = 1
  End If
  fs = InStr(txt, "fs "): fa = InStr(txt, "fa "): tem = InStr(txt, "Témoin")
  If col = 1 Then tablo(1) = cel.Offset(, -1)
  If fs Then
    tablo(3) = Mid(txt, fs, 999)
    If fs > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, fs - 1)
    End If
  ElseIf fa Then
    tablo(5) = Mid(txt, fa, 999)
    If fa > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, fa - 1)
    End If
  ElseIf tem Then
    tablo(6) = Mid(txt, tem, 999)
    If tem > 1 Then
      col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
      tablo(col) = Left(txt, tem - 1)
    End If
  Else
    col = col + Switch(col = 2, 2, col = 4, 3, True, 1)
    tablo(col) = txt
  End If
Next
Cells(lig, "D").Resize(, LargeurTableau) = tablo 'dernière ligne
End Sub
Votre fichier (3) complété.

Edit : il faut faire commencer l'étude en B1...

Mais de toute façon les résultats ne sont pas cohérents. Je regarde ça, sans aucune garantie...

A+
 

Pièces jointes

Dernière édition:
Re : Aide pour formule

Je vous remercie bien.
Mais je ne pensais pas que c'était réalisable ! (pour cela que j'ai fait petit🙁)
Il y a du décalage dans certaine cellule, mais bon! voir comment le fichier a été fait malheureusement.
Mais je vois qu'on fait énormément de chose avec Excel, trop génial !!
Un grand merci à vous.
Sylvie
 
Re : Aide pour formule

Re 🙂,
Ma macro plus simpliste (je ne tenais pas compte de fs et fa au milieu d'une cellule) ne pouvais pas beuguer sur un nombre de ligne trop important (en principe 🙄), mais j'ai l'impression qu'elle est passée complètement à la trappe 😱...
Bonne soirée 😎
 
Re : Aide pour formule

Re,

C'était plus simple que ce que j'avais pensé.

En effet les Fs Fa T (Témoin) sont toujours au début d'une ligne.

Il suffit de choisir les bonnes colonnes, ici ceci convient :

- date + nom => colonne D et les 3 suivantes

- Fs => colonne H et les 3 suivantes

- Fa => colonne L et les 3 suivantes

- T (Témoin) => colonnes P à W (il y a de la marge...).

La macro est maintenant assez simple :

Code:
Sub Transpose()
Dim LargeurTableau As Byte, dep&, lig&, cel As Range, tablo(), col As Byte, txt$
LargeurTableau = 20 'à ajuster éventuellement
dep = 3 'ligne de départ des résultats, à ajuster
lig = dep - 1
Application.ScreenUpdating = False
Cells(dep, "D").Resize(5000, LargeurTableau).ClearContents 'RAZ
For Each cel In Range("B1", [B65536].End(xlUp))
  If cel.Offset(, -1) <> "" Or lig < dep Then 'nouvelle série
    If lig >= dep Then Cells(lig, "D").Resize(, LargeurTableau) = tablo 'restitution
    ReDim tablo(1 To LargeurTableau)
    lig = lig + 1
    col = 1
  End If
  If col = 1 Then tablo(1) = cel.Offset(, -1)
  col = col + 1
  txt = Application.Trim(cel) 'suppression des espaces inutiles
  If LCase(Left(txt, 3)) = "fs " Then col = 5 'colonne H
  If LCase(Left(txt, 3)) = "fa " Then col = 9 'colonne L
  If LCase(Left(txt, 6)) = "témoin" Or LCase(Left(txt, 2)) = "t " Then col = 13 'colonne P
  tablo(col) = txt
Next
Cells(lig, "D").Resize(, LargeurTableau) = tablo 'dernière ligne
End Sub
Fichier (4) joint.

A+
 

Pièces jointes

Re : Aide pour formule

Bonjour,

JNP, non non votre macro n'est pas passé complètement à la trappe et ne beuguer pas sur
le nombre de ligne, elle est bien mais pas assez détailler mais cela est de ma faute
car j'ai mal expliquer au début.

job75, je vous remercie bien car vraiment je ne pensais pas à un résultat comme ça!!

Sylvie
 
Re : Aide pour formule

Bonjour,
Ma question ne concerne pas la discussion précédente mais je la pose ici car le sujet s'intitule "Aide pour formule". ^^

Je suis tout nouveau sur le forum, et je dois réaliser le listing de plusieurs concerts d'une salle de spectacle afin de calculer les coûts d'électricité et de chauffage de ces derniers. J'aimerais que les consommations de chauffage, (présentes dans une colonne), soient reportées dans une cellule afin d'y calculer le coût. C'est à dire à l'aide de filtres je pourrai choisir le concert et visualiser, dans la cellule, le prix représentatif du chauffage de ce concert seulement.

Mais comment dire à une cellule d'afficher LA valeur représentative du chauffage de ce concert lorsque plusieurs valeurs seront présentes dans la même colonne?


Vous trouverez en PJ mon fichier Excel: Je voudrai que, lorsque je sélectionne un concert, la valeur de conso de chauffage correspondante, présente de la colonne L, soit reportée dans la cellule J6.

(PS: je n'ai pas beaucoup de notions en ce qui concerne le langage VBA mais je ne demande qu'à apprendre)

Merci d'avance!
 

Pièces jointes

Re : Aide pour formule

Bonjour le forum,

@ kauete : ouvrez une autre discussion, votre intervention ici est très incorrecte.

Sylvie m'a fait parvenir ce MP :

Sylvie64 à dit:
(...) je vais peut être en demander trop ! mais est il possible (en rouge) de séparer le nom et prénom, les mettre dans des cellules différente !!

(colonne E) les noms (ex) TRONNET et (colonne F) les prénoms (ex) : Isidore Athanase ? et ce qui suit en G et H par exemple !!

(Colonne I) faire la même chose, séparation des nom et prénoms (...)

Je n'ai séparé que le 1er nom, voir le fichier (5).

A+
 

Pièces jointes

- 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
23
Affichages
680
Retour