Trier et insérer des titres

Résolu
guillaume gdco Messages postés 75 Statut Membre -  
guillaume gdco Messages postés 75 Statut Membre -
Bonjour,

Je souhaiterai trier mon tableau par ordre alphabétique et insérer des titres entre chaque groupe de lignes.

je vais tenter d'être plus clair...

une fois mon tableau trier, jusqu'à la je m'en sort, je souhaiterai insérer une ligne contenant un titre avant les lignes commençant par A, une ligne contenant un titre avant les lignes commençant par B etc..

j'ai bien évidement pas toute les lignes de A à Z, cela dépend du tableau exporter.

De plus, si je peux ajouter une ligne vide avant la ligne contenant le titre histoire d'aérer le tableau...

merci d'avance pour votre aide

Configuration: Windows / Internet Explorer 11.0

10 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, utilises-tu Excel?
    as-tu de l'expérience en VBA?
    0
  2. guillaume gdco Messages postés 75 Statut Membre
     
    non très peu d'expérience, je parcours les forums pour apprendre.

    un exemple pour tenter d'être plus clair

    exemple fait " a la main":

    Ce que j'ai avant



    et ce que je veux après


    Je n'ai qu'une douzaine de référence que je voudrai associées chacune à un titre

    merci d'avance pour votre aide

    Configuration: Windows / Internet Explorer 11.0
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      moi je ferais un petit programme VBA qui parcourt les lignes de bas en haut, et, quand il détecte que le contenu le la première colonne change "beaucoup", insère une ligne de titre.
      0
  3. guillaume gdco Messages postés 75 Statut Membre
     
    merci pour la piste, je vais creuser en ce sens
    0
  4. guillaume gdco Messages postés 75 Statut Membre
     
    J'ai codé ainsi pour déjà insérer une ligne avant une cellule, mais ça n'a pas l'effet voulu.


    Sub DelEditeur()
    Dim i As Integer
    With ThisWorkbook.Sheets("Export")
    'Précisez le nom de votre feuille
    For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
    'je travaille sur la colonne a
    'Rows.count permet de retourner le nombre de ligne de la plage range
    If .Range("C" & i).Value = "DJ TT" Then
    .Rows(i).Insert Shift:=xlUp
    End If
    Next i
    End With
    End Sub


    voici mon tableau


    Je pense que "DJ TT ne suffit pour faire un essai, je dois préciser que c'est le début de la référence qui doit être pris en compte.
    et ensuite ajouter une ligne pour chaque possibilité? DTER PDL, ERLN, ETER etc..
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      "ça n'a pas l'effet voulu": peux-tu en dire plus? quel est le rôle de la colonne C?
      il me semble que l'insertion fonctionne bien.
      suggestion, qui insère une ligne quand il y a un changement dans les 5 premiers caractères du texte:
      Option Explicit
      
      Sub DelEditeur()
      Dim ligne As Long, texte As String, ancientexte As String, ex As Worksheet
      ancientexte = ""
      Set ex = ThisWorkbook.Sheets("Export")
      'Précisez le nom de votre feuille
      For ligne = ex.Cells(ex.Rows.Count, 1).End(xlUp).Row To 1 Step -1
          'je travaille sur la colonne a
          'Rows.count permet de retourner le nombre de ligne de la plage range
          texte = Left(ex.Cells(ligne, 1).Value, 5)
          If texte <> ancientexte Then
              If ancientexte <> "" Then
                  ex.Rows(ligne + 1).Insert Shift:=xlUp
              End If
              ancientexte = texte
          End If
      Next ligne
      End Sub
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. guillaume gdco Messages postés 75 Statut Membre
     
    merci ça m'aide à avancer dans mon projet.

    ça marche parfaitement mais je souhaiterai faire une exclusion dans mon tri

    je souhaiterai que tout les textes commençant par TT restent "ensemble" et ne soit pas séparé par un ajout de ligne avec le tri à la 5eme lettre.

    Cela m'a donc créé des "groupes " de lignes auxquelles je souhaiterai insérer une ligne titre en lien avec les 5 premières lettres
    0
  7. guillaume gdco Messages postés 75 Statut Membre
     
    Pour mon premier point de ne pas ajouter de ligne entre le "TT" j'ai essayé de rajouter .Criteria1:="<> TT*" mais je suis en erreur de syntaxe


    Dim ligne As Long, texte As String, ancientexte As String, ex As Worksheet
    ancientexte = ""
    Set ex = ThisWorkbook.Sheets("Export")
    'Précisez le nom de votre feuille
    For ligne = ex.Cells(ex.Rows.Count, 1).End(xlUp).Row To 1 Step -1
    'je travaille sur la colonne a
    'Rows.count permet de retourner le nombre de ligne de la plage range
    texte = Left(ex.Cells(ligne, 1).Value, 5).Criteria1:="<> TT*"
    If texte <> ancientexte Then
    If ancientexte <> "" Then
    ex.Rows(ligne + 1).Insert Shift:=xlUp
    End If
    ancientexte = texte
    End If
    Next ligne
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      merci d'utiliser le type de code "basic".
      suggestion:
      texte = Left(ex.Cells(ligne, 1).Value, 5)
      if left (texte,2) = "TT" then
          texte = "TT"
      end if
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ton soucis avec l'insertion de ligne entre les "TT" est-il résolu?
      0
    3. guillaume gdco Messages postés 75 Statut Membre
       
      impeccable ça marche
      merci à toi
      0
  8. guillaume gdco Messages postés 75 Statut Membre
     
    Pour être plus clair:

    si les 5 première lettres de ma référence commence par DTERF alors je veux le titre Nord
    si les 5 première lettres de ma référence commence par ETERC alors je veux le titre Sud

    et ainsi de suite...

    Et si les deux première lettre sont TT je veux le titre: Réf

    j'ai essayé ça mais sans résultat


    For ligne = ex.Cells(ex.Rows.Count, 1).End(xlUp).Row To 1 Step -1
    texte = Left(ex.Cells(ligne, 1).Value, 5)
    If texte <> ERLN Then
    ex.Rows(ligne + 1).Insert Value = ("nord")
    Next ligne
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      le travail sur le titre a insérer doit se faire ainsi:
      ex.Rows(ligne + 1).Insert Shift:=xlUp
      ex.cells(ligne+1,3)= "titre" 'contenu de la troisième colonne de la ligne insérée
      0
    2. guillaume gdco Messages postés 75 Statut Membre
       
      j'avance mais je suis confronté à de nouveaux problèmes:

      1 - je souhaite garder une ligne vide au dessus de chaque titre pour aérer mon tableau

      2 - je souhaite que mon titre soit en rapport avec les 5 premières lettres de la référence présente en première colonne.
      je suppose que je dois écrire tous les titres possibles, les lier au 5 premières lettres de la référence correspondantes ( sauf pour mes référence commençant par TT ou là je ne prends que les deux première lettres pour lier mon titre )

      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      suggestion:
      Sub DelEditeur()
      Dim ligne As Long, texte As String, ancientexte As String, ex As Worksheet, titre As String
      ancientexte = ""
      Set ex = ThisWorkbook.Sheets("Export")
      'Précisez le nom de votre feuille
      For ligne = ex.Cells(ex.Rows.Count, 1).End(xlUp).Row To 1 Step -1
          'je travaille sur la colonne a
          'Rows.count permet de retourner le nombre de ligne de la plage range
          texte = Left(ex.Cells(ligne, 1).Value, 5)
          If Left(texte, 2) = "TT" Then
              texte = "TT"
          End If
          If texte <> ancientexte Then
              If ancientexte <> "" Then
                  ex.Rows(ligne + 1).Insert Shift:=xlUp
                  ex.Rows(ligne + 1).Insert Shift:=xlUp
                  Select Case ancientexte
                      Case "TT":
                          titre = "Réf"
                      Case "DTERF":
                          titre = "Nord"
                      Case "ETERC":
                          titre = "Sud"
                      Case Else:
                          titre = "?"
                  End Select
                  ex.Cells(ligne + 2, 3) = titre
              End If
              ancientexte = texte
          End If
      Next ligne
      End Sub
      
      0
    4. guillaume gdco Messages postés 75 Statut Membre
       
      à quoi sert la ligne Case Else?

      cette ligne est la seule prise en compte






      Dim ligne As Long, texte As String, ancientexte As String, ex As Worksheet, titre As String
      ancientexte = ""
      Set ex = ThisWorkbook.Sheets("Export")
      'Précisez le nom de votre feuille
      For ligne = ex.Cells(ex.Rows.Count, 1).End(xlUp).Row To 1 Step -1
      'je travaille sur la colonne a
      'Rows.count permet de retourner le nombre de ligne de la plage range
      texte = Left(ex.Cells(ligne, 1).Value, 5)
      If Left(texte, 2) = "TT" Then
      texte = "TT"
      End If
      If texte <> ancientexte Then
      If ancientexte <> "" Then
      ex.Rows(ligne + 1).Insert Shift:=xlUp
      ex.Rows(ligne + 1).Insert Shift:=xlUp
      Select Case ancientexte
      Case "TT":
      titre = "Référentiel"
      Case "DTER PDL":
      titre = "Direction TER Pays de la Loire (DTER PDL)"
      Case "EIC BFC":
      titre = "EIC Bourgogne Franche Comté (EIC BFC)"
      Case "ERLN":
      titre = "Etablissement Régional Lignes Normandes (ERLN)"
      Case "ETER CVL":
      titre = "d'établissement de ETER Centre Val de Loire (ETER CVL)"
      Case "TER HDF":
      titre = "Direction TER Hauts de France (TER HDF)"
      Case "TER AURA":
      titre = "Direction TER Auvergne Rhône Alpes (TER AURA)"
      Case "TER GE":
      titre = "Direction TER Grand Est (TER GE)"
      Case "TER NA":
      titre = "Direction TER Nouvelle Aquitaine (TER NA)"
      Case "TER OC":
      titre = "Direction TER Occitanie (TER OC)"
      Case "DJ":
      titre = "Référentiel de la région de Dijon (DJ)"
      Case "MR":
      titre = "Référentiel de la région de Marseille (MR)"
      Case "RN":
      titre = "Référentiel de la région de Rennes (RN)"
      Case "RN":
      titre = "Référentiel de la région de Rennes (RN)"
      Case Else:
      titre = "?"
      End Select
      ex.Cells(ligne + 2, 2) = titre
      End If
      ancientexte = texte
      End If
      Next ligne
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > guillaume gdco Messages postés 75 Statut Membre
       
      merci d'utiliser les balises de code quand tu publies du code, et d'utiliser le type de code "basic".
      tu as écrit "je souhaite que mon titre soit en rapport avec les 5 premières lettres de la référence": il faut donc que les textes qui suivent "case" aient exactement 5 caractères de long (sauf "TT")
      0
  9. guillaume gdco Messages postés 75 Statut Membre
     
    je ne comprends pas pourquoi insérer le contenu de la troisième colonne ?

    Je veux insérer un titre en rapport avec la référence comme en exemple message 2
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      l'idée est plutôt de mettre le titre en troisième colonne, non? donc de modifier le contenu de la troisième colonne de la ligne insérée. as-tu testé? cela donne quoi?
      0
  10. guillaume gdco Messages postés 75 Statut Membre
     
    besoin d'aide pour insérer des titres

    si les 5 première lettres de ma référence commence par DTERF alors je veux le titre Nord
    si les 5 première lettres de ma référence commence par ETERC alors je veux le titre Sud

    et ainsi de suite...

    Et si les deux première lettre sont TT je veux le titre: Réf

    personnes pour m'aider?
    0
  11. guillaume gdco Messages postés 75 Statut Membre
     

    ex.Rows(ligne + 1).Insert Shift:=xlUp, Criteria1:=("<>TT")



    marche pas non plus....
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      difficile de t'aider quand tu montres une seule ligne de code, que tu n'expliques pas ce que tu veux obtenir, ni ce qu'elle fait: "marche pas" est peu précis.
      0
    2. guillaume gdco Messages postés 75 Statut Membre
       
      je n'avais pas vu que tu avais répondu aux messages précédent, merci à toi
      0