Trier et insérer des titres [Résolu]

Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
- - Dernière réponse : guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
- 26 juin 2019 à 21:17
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
Afficher la suite 

10 réponses

Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436
0
Merci
bonjour, utilises-tu Excel?
as-tu de l'expérience en VBA?
Commenter la réponse de yg_be
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
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.
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
merci pour la piste, je vais creuser en ce sens
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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..
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
"ç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
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
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
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
ton soucis avec l'insertion de ligne entre les "TT" est-il résolu?
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
impeccable ça marche
merci à toi
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
Range("A3:E250").Select = titre
With Selection
.Font.Bold = True
End With


erreur exécution 424
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 > guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
merci d'utiliser le choix "basic" avec les balises de code.
merci aussi, en cas d'erreur, d'indiquer à quelle ligne de code l'erreur se produit.
suggestion (non testée), juste après la ligne 27:
ex.Cells(ligne + 2, 3).Font.Bold = True
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
j'ai essayé en l'incorporant ligne 52 mais rien ne se passe, pas de message d'erreur, le texte n'est pas en gras

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 Left(texte, 2) = "VO" Then
        texte = "VO"
    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 = "&BRéférentiel"
                Case "VO":
                    titre = "Référentiel Voyageur (VO)"
                Case "DTER ":
                    titre = "Direction TER Pays de la Loire (DTER PDL)"
                Case "EIC B":
                    titre = "EIC Bourgogne Franche Comté (EIC BFC)"
                Case "ERLN ":
                    titre = "Etablissement Régional Lignes Normandes (ERLN)"
                Case "ETER ":
                    titre = "d'établissement de ETER Centre Val de Loire (ETER CVL)"
                Case "TER H":
                    titre = "Direction TER Hauts de France (TER HDF)"
                Case "TER A":
                    titre = "Direction TER Auvergne Rhône Alpes (TER AURA)"
                Case "TER G":
                    titre = "Direction TER Grand Est (TER GE)"
                Case "TER N":
                    titre = "Direction TER Nouvelle Aquitaine (TER NA)"
                Case "TER O":
                    titre = "Direction TER Occitanie (TER OC)"
                Case "DJ TT":
                    titre = "Référentiel de la région de Dijon (DJ)"
                Case "MR TT":
                    titre = "Référentiel de la région de Marseille (MR)"
                Case "RN TT":
                    titre = "Référentiel de la région de Rennes (RN)"
                Case Else:
                    titre = "?"
            End Select
                ex.Cells(ligne + 2, 2) = titre
                ex.Cells(ligne + 2, 3).Font.Bold = True
        End If
        ancientexte = texte
    End If
Next ligne
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
il faut sans doute changer le 3 en 2 en ligne 52, puisque c'est la seconde colonne qu'il faut mettre en gras.
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
effectivement, gros comme une maison
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
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?
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
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?
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci

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



marche pas non plus....
yg_be
Messages postés
8759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2019
436 -
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.
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
je n'avais pas vu que tu avais répondu aux messages précédent, merci à toi
Commenter la réponse de guillaume gdco