Concatener plusieurs cellules, avec une variable quand aux cellules

Fermé
tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022 - 11 sept. 2021 à 12:02
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 - 14 sept. 2021 à 23:57
Bonjour,
J'ai beau tourner le problème dans tous les sens, je n'en vois pas la solution...

Je cherche à concaténer (pour pouvoir trier ultérieurement) des données qui se trouvent dans un tableau à 4 colonnes, avec des informations réparties sur plusieurs lignes (ce nombre de lignes est variable), dans mes colonnes B et C.

Ces informations proviennent d'un copier/coller depuis un site aéronautique, et contiennent des données classées par "paragraphes".

Chaque paragraphe commence dans la première ligne de la colonne A par "-";"+"; ou "*".
En colonne B, j'ai une référence, qui me servira à trier ultérieurement,
En colonne C, j'ai plusieurs lignes (nombre variable) que je voudrais soit regrouper en une cellule pour les trier ensuite, soit déplacer dans les colonnes suivantes au sein de ma ligne contenant "-" et ma référence.
En colonne D, j'ai bricolé un truc pour afficher un caractère spécifique (°) à la "fin" de mon paragraphe, avant que ça recommence en A avec un "-";"+"; ou "*".

Je cherche donc à regrouper sur une ligne ce qui se trouve entre "-";"+"; ou "*", et "°".

J'ai lu que rien n'est impossible avec Excel, mais là, j'avoue, je sèche complètement...
Je n'entend rien au langage VBA, même si j'arrive à reproduire certaines choses quand je tombe sur un exemple qui ressemble à ce que je cherche.
La formulation, c'est de la logique pure et simple, mais je ne vois pas comment mettre ça en forme.


In fine, le plan est de sortir un fichier CSV qui me permettra d'afficher sur un fond cartographique les informations (il y a des coordonnées dans le tas) des lignes en B...


Si une âme charitable passait dans le coin...
https://www.dropbox.com/scl/fi/52883hwq1l2vvo9zesz88/4-colonnes.xlsx?dl=0&rlkey=uuw47oz7ij8avliflpxoojkz1

Merci et bon week-end.

Stéphane

Configuration: Windows / Chrome 93.0.4577.63
A voir également:

7 réponses

Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
Modifié le 11 sept. 2021 à 16:17
Bonjour,
Si je prends les 3 premier paragraphes est-ce bien ceci que vous désirez comme résultat:


1
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 669
11 sept. 2021 à 16:19
Bonjour à tous,

Une proposition :
https://www.cjoint.com/c/KIlosz8z2BY

Crdlmt
1
tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
12 sept. 2021 à 11:13
Bonjour DjiDji59430,
Je me suis penché sur ta formule "TRANSPOSE/DECALER", et bien que je n'en saisisse pas toute la subtilité (ça va venir, je me fais confiance) je chercherais, (du coup on en veut toujours plus...), à y ajouter une condition "si contient ") LF", alors rien"...
Mais je ne sais pas trop où ajouter le § si(nb.si(D3;"*) LF*";"") §.
Du coup, je tatonne, mais la méthode de la découverte donne parait-il de bons résultats.

Encore merci
0
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 669 > tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
12 sept. 2021 à 11:39
"si contient ") LF", alors rien"...
Où ça, soit plus précis, donne un exemple

Crdlmt
0
tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022 > DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024
12 sept. 2021 à 14:04
Salut,
Dans ton fichier, à partir de la colonne E, tu reprends, cellule après cellule au sein de la ligne, chaque ligne de la colonne D.
C'est exactement ce que je cherchais à faire, mais du coup, il arrive qu'il y ai des données qui ne m'interesse pas (le "A) LFCT" de la cellule D3) par exemple, mais qui n'apparaissent pas systématiquement dans chaque paragraphe.
Du coup, j'essaie de modifier ta formule
=SI(ET($C3=$B3;D3<>"");TRANSPOSE(DECALER($D3;0;0;NB.SI($C$2:$C$8116;$C3);1));"")
en SI D* contient ") LF"; n'affiche rien; sinon applique la formule.

Le gros soucis de mon projet, c'est que je pars de données aéronautiques quotidiennes, dont je ne maitrise pas le formatage, qui ne sont pas systématiquement identiques, et dont chaque paragraphe contient des informations dont je peux avoir, ou non, besoin.

L'idée est de pouvoir regrouper sur une ligne, et, par la suite, de faire le tri dans les colonnes...

Cdlt
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
12 sept. 2021 à 15:11
Bonjour,

si cela peut aider, voici une macro qui va supprimer les "A) LFCT et descendre de 2 lignes le contenu de la colonne B pour l'aligner avec la colonne C:

Option Explicit
Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")
    NoCol = 3 'lecture de la colonne C
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        If Left(Var, 2) = "A)" Then
       FL1.Cells(NoLig, NoCol).ClearContents 'supprime A)
       FL1.Cells(NoLig + 2, NoCol - 1).Value = FL1.Cells(NoLig, NoCol - 1).Value 'descend 2 lignes colonne B
       FL1.Cells(NoLig, NoCol - 1).ClearContents
        End If
        Next
    Set FL1 = Nothing
End Sub


@+ Le Pivert
0
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 669 > tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
12 sept. 2021 à 15:59
et que devient
MEASURE MAST AT LEZAY RDL259/9.2NM LF DV ARP :

de la ligne 14 ??
0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
11 sept. 2021 à 18:24
Bonjour,
Merci, la proposition de DjiDji59430 devrait vous convenir.
1
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 669
13 sept. 2021 à 19:02
Bonjour à tous,

J'ai éliminé les "mauvais" LF, mais il restait des A) EGJB
Du coup, j'élimine les A)espace

https://www.cjoint.com/c/KInrazp0taY


Crdlmt
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
11 sept. 2021 à 17:58
Bonjour messieurs,

Je répond rapidement (je suis au boulot, SAMU hélico, et en préalerte pour une intervention...)

Effectivement, ce que j'ai rapidement regardé de vos 2 réponses semble combler mon souhait...
Je regarde plus en détail au plus vite, et je reviens vers vous dès que possible.

Merci beaucoup.
0
Bonsoir,

Pardon pour tout à l'heure, la journée d'astreinte a commencé très (trop?) calmement, et tout s'est enchainé rapidement.

C'est terminé pour aujourd'hui, je vais pouvoir me pencher plus avant sur la proposition de DjiDji59430, que je remercie chaleureusement, de même que Le Pingou, pour vos aides rapides.

Je vais maintenant m'attaquer a comprendre les différentes formules et continuer sur cette lancer pour pouvoir, étape par étape, arriver au .csv qui sera exploitable pour moi dans mon appli de navigation et dans mes SIG.

Encore merci et bonne soirée.
PS, si vous passez dans le secteur d'Amiens (80) ou d'Orthez (64), prévenez moi...Si possible, nous partagerons un café/bière/soda (au choix) ensemble.

Stéphane
0
tacounet Messages postés 28 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 22 octobre 2022
Modifié le 14 sept. 2021 à 21:00
Bonsoir DjiDji59430, bonsoir à tous.

Un immense merci pour le document. Comment puis-je obtenir une traduction de la formule utilisée? Car j'avoue humblement, je n'y comprends rien.

J'essaie de partir de votre document initial, pour l'adapter de manière "pérenne" à mon besoin.
Comme expliqué plus haut, je récupère quotidiennement (quand je suis de service) des données aéronautiques qui se présentent, après un copier/coller judicieux, sous la forme que j'ai transmis.
Je fais un premier copier/coller entre le site d'informations, et une feuille de mon document excel, et je voudrais via formule, que votre feuille aille chercher, dans la feuille d'à coter, les données de la colonne B (ref) et de la colonne D (texte).
Ca, c'est bon, j'y arrive. Mais au bout d'un certain nombre de lignes (la 417 pour être précis) les cellules D417, E417, F417... me renvoient systématiquement la cellule C417.

Je pense que cela fonctionne avec une logique "en ligne", alors que j'ai plutôt tendance à raisonner "en colonne".

Je vais reprendre à zéro (enfin presque) en m'appuyant sur votre nouvelle feuille de calcul

Encore mille mercis.

Bonne soirée
0
DjiDji59430 Messages postés 4117 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 3 octobre 2024 669
14 sept. 2021 à 23:57
Bonsoir,

=SI(ET(LC3=LC2;LC(-1)<>"");SI(ESTERREUR(CHERCHE("A) ";LC(-1)));TRANSPOSE(DECALER(LC4;0;0;NB.SI(L2C3:L8116C3;LC3);1));TRANSPOSE(DECALER(L(1)C4;0;0;NB.SI(L2C3:L8116C3;LC3)-1;1)));"")

La colonne(1) ajoutée permet de mesurer le nombre de lignes entre 2 ref. C'est ce nombre qui détermine la longueur de la plage créée par décaler. Cette plage verticale est transposée en plage horizontale par la fonction transpose.
Reste le A)espace
la fonction cherche regarde dans la première cellule (colonne E) si cette occurrence existe, sinon, elle renvoie "erreur".
Si c'est vrai, la plage verticale va commencer une cellule plus bas (D3==>D4) et sa longueur sera diminuée de 1, (;NB.SI(L2C3:L8116C3;LC3)-1) sinon, on transpose toute la plage.

Crdlmt
0