Concatener plusieurs cellules, avec une variable quand aux cellules

Signaler
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021
-
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021
-
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

7 réponses

Messages postés
10384
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 septembre 2021
1 197
Bonjour,
Si je prends les 3 premier paragraphes est-ce bien ceci que vous désirez comme résultat:


Salutations.
Le Pingou
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021
467
Bonjour à tous,

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

Crdlmt
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021
>
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021

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
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656 >
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021

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
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656 >
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021

un essai en vba

tout est expliqué dans le classeur


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

@+ Le Pivert
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021
467 >
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021

et que devient
MEASURE MAST AT LEZAY RDL259/9.2NM LF DV ARP :

de la ligne 14 ??
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021
>
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021

c'est bien pour ça (LFDV, comme LFCT) sont les codes OACI des terrains d'aviation, que je ne me focalise QUE sur ce qui apparait (des fois, pas tout le temps) en tête de paragraphe, d'où mon souhait de ne viser que les suites de caractères:
-> parenthèse fermée, espace, LF <-
Pour ne supprimer que les:
A) LFCT de la ligne 3, A) LFCZ de la ligne 144,.../...

Dans mon document, il ne semble pour l'instant y avoir que des A) LF.. mais je me méfie des administrations, elles pourraient trouver 25 opportunités de mettre une autre lettre que le A...
Messages postés
10384
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 septembre 2021
1 197
Bonjour,
Merci, la proposition de DjiDji59430 devrait vous convenir.
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021
467
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
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021

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.
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
Messages postés
23
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
14 septembre 2021

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
Messages postés
3290
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
17 septembre 2021
467
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