Trier et insérer des titres

Résolu/Fermé
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020 - 22 juin 2019 à 17:57
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020 - 17 avril 2020 à 20:30
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

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
22 juin 2019 à 19:34
bonjour, utilises-tu Excel?
as-tu de l'expérience en VBA?
0
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
22 juin 2019 à 19:43
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
22 juin 2019 à 20:37
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
22 juin 2019 à 20:56
merci pour la piste, je vais creuser en ce sens
0
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
Modifié le 23 juin 2019 à 15:02
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 23 juin 2019 à 17:29
"ç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

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

Posez votre question
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
23 juin 2019 à 20:56
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
Modifié le 23 juin 2019 à 22:49
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 juin 2019 à 08:55
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
26 juin 2019 à 09:10
ton soucis avec l'insertion de ligne entre les "TT" est-il résolu?
0
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
Modifié le 26 juin 2019 à 09:37
impeccable ça marche
merci à toi
0
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
24 juin 2019 à 00:29
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 juin 2019 à 08:58
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
26 juin 2019 à 10:15
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 26 juin 2019 à 12:50
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
Modifié le 26 juin 2019 à 13:14
à 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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
26 juin 2019 à 13:56
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
24 juin 2019 à 09:57
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 26 juin 2019 à 09:16
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
24 juin 2019 à 20:49
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
24 juin 2019 à 22:11

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



marche pas non plus....
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
26 juin 2019 à 09:13
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
guillaume gdco Messages postés 68 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 30 août 2020
26 juin 2019 à 10:17
je n'avais pas vu que tu avais répondu aux messages précédent, merci à toi
0