Concatener plusieurs cellules, avec une variable quand aux cellules

tacounet Messages postés 28 Statut Membre -  
DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Si je prends les 3 premier paragraphes est-ce bien ceci que vous désirez comme résultat:


    1
  2. DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   718
     
    Bonjour à tous,

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

    Crdlmt
    1
    1. tacounet Messages postés 28 Statut Membre
       
      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
    2. DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   718 > tacounet Messages postés 28 Statut Membre
       
      "si contient ") LF", alors rien"...
      Où ça, soit plus précis, donne un exemple

      Crdlmt
      0
    3. tacounet Messages postés 28 Statut Membre > DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > tacounet Messages postés 28 Statut Membre
       
      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
    5. DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   718 > tacounet Messages postés 28 Statut Membre
       
      et que devient
      MEASURE MAST AT LEZAY RDL259/9.2NM LF DV ARP :

      de la ligne 14 ??
      0
  3. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci, la proposition de DjiDji59430 devrait vous convenir.
    1
  4. DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   718
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tacounet Messages postés 28 Statut Membre
     
    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
  7. tacounet
     
    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
  8. tacounet Messages postés 28 Statut Membre
     
    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
    1. DjiDji59430 Messages postés 4280 Date d'inscription   Statut Membre Dernière intervention   718
       
      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