IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Classement chronologique d'un tableau par heure [WD-2013]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Classement chronologique d'un tableau par heure
    Bonjour à tous,

    Je me permet d'utiliser le forum pour poser ma problématique :
    Je récupère un document Word ou ce trouve un tableau au nb de ligne variable et 2 colonnes, dans cette 2ème colonne se trouve au milieu d'un texte, l'heure d'un RDV.
    J'aimerais classer les lignes du tableau par ordre chrono des heures de RDV. Actuellement, je sais récupérer dans le bon format l'heure de chaque ligne et déplacer et coller des lignes entres elles dans le tableau, mais mes boucles ne permettent pas d'avoir l'ordre chrono complet et j'avoue ne pas comprendre pourquoi. Je cafouille à trouver la bonne méthodologie lol.

    Toute aide est la bienvenue, merci d'avance.

    Le code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    'recherche de l'heure et classement par ordre chrono -----------------------------------------------
                For i = ActiveDocument.Tables(1).Rows.Count To 2 Step -1
                k = i
                chaine = ActiveDocument.Tables(1).Cell(i, 2)
                chaine = Right(chaine, Len(chaine) - 25)
                chaine = Left(chaine, 5)
                chaine = Replace(chaine, "H", ":")
     
                    For j = ActiveDocument.Tables(1).Rows.Count - 1 To 1 Step -1
                    chaine2 = ActiveDocument.Tables(1).Cell(j, 2)
                    chaine2 = Right(chaine2, Len(chaine2) - 25)
                    chaine2 = Left(chaine2, 5)
                    chaine2 = Replace(chaine2, "H", ":")
     
                        If chaine < chaine2 Then
                            ActiveDocument.Tables(1).Rows(k).Range.Cut
                            ActiveDocument.Tables(1).Rows(j).Range.Paste
     
                            chaine = ActiveDocument.Tables(1).Cell(k - 1, 2)
                            chaine = Right(chaine, Len(chaine) - 25)
                            chaine = Left(chaine, 5)
                            chaine = Replace(chaine, "H", ":")
     
                        End If
                    Next j
                Next i

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si le but recherché est juste un classement.
    C'est moins joli, mais il suffit de créer une colonne supplémentaire dans laquelle on met l'heure et de faire un simple tri sur cette colonne pour la table.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Si le but recherché est juste un classement.
    C'est moins joli, mais il suffit de créer une colonne supplémentaire dans laquelle on met l'heure et de faire un simple tri sur cette colonne pour la table.
    Bonsoir, merci de la réponse.

    Cependant oui c'est moins joli et surtout je ne peux pas changer la structure du tableau car document officiel de convocation. Il faut vraiment que j'arrive à trier sans ajouter de colonne. Le code actuel fait bien un tri et change l'ordre des lignes du tableau par rapport à l'heure cependant toutes les lignes ne sont pas classés correctement et je ne trouve pas pourquoi.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Dans la propostion que j'avais faite, on ajoute une colonne et on la supprime quand le tri est fait, ce qui ne devrais pas modifier l'apparence du tableau.

    Au pire, on crée un tableau supplémentaire dans le document qui sera supprimé.
    La fonction tri de Word est efficace.

    Si ça ne convient toujours pas.
    Ce que je te propose, c'est de faire un tri à bulle dans un array.

    Première étape, on fait un transfert des données du tableau word dans un tableau VBA.
    Ensuite on trie le tableau en vba avec le tri à bulle et quand le tri est fait, on remplace les valeurs du tableau dans Word par celle du tableau VBA.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Dans la propostion que j'avais faite, on ajoute une colonne et on la supprime quand le tri est fait, ce qui ne devrais pas modifier l'apparence du tableau.

    Au pire, on crée un tableau supplémentaire dans le document qui sera supprimé.
    La fonction tri de Word est efficace.

    Si ça ne convient toujours pas.
    Ce que je te propose, c'est de faire un tri à bulle dans un array.

    Première étape, on fait un transfert des données du tableau word dans un tableau VBA.
    Ensuite on trie le tableau en vba avec le tri à bulle et quand le tri est fait, on remplace les valeurs du tableau dans Word par celle du tableau VBA.
    Effectivement la méthode de tri de Word est très efficace, après une bonne nuit de sommeil j'ai effectivement appliqué la solution de la 3eme colonne pour faire le tri et ensuite la supprimer. Tout fonctionne parfaitement

    Merci de l'aide apporté.

    Le code appliqué si ça peut intéresser du monde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ' Création d'une 3eme colonne pour n'afficher que l'heure
     
    ActiveDocument.Tables(1).Columns.Add
     
     
     
     'recherche de l'heure et copie de celle ci dans la 3eme colonne -----------------------------------------------
                For i = 1 To ActiveDocument.Tables(1).Rows.Count
     
                chaine = ActiveDocument.Tables(1).Cell(i, 2).Range.Text
                chaine = Right(chaine, Len(chaine) - 25)
                chaine = Left(chaine, 5)
                chaine = Replace(chaine, "H", ":")
                ActiveDocument.Tables(1).Cell(i, 3).Range.Text = chaine
                Next i
     
     '------------------------------------------------------------------------------------------------
     
     'Tri par ordre chrono du tableau en utilisant la fonction tri de Word
            ActiveDocument.Tables(1).Select
            Selection.Sort ExcludeHeader:=False, FieldNumber:="Colonne 3", _
            SortFieldType:=wdSortFieldDate, SortOrder:=wdSortOrderAscending, _
            FieldNumber2:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _
            wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _
            wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _
            wdSortSeparateByCommas, SortColumn:=False, CaseSensitive:=False, _
            LanguageID:=wdFrench, SubFieldNumber:="Paragraphes", SubFieldNumber2:= _
            "Paragraphes", SubFieldNumber3:="Paragraphes"
     
     '------------------------------------------------------------------------------------
     
     ActiveDocument.Tables(1).Columns(3).Delete

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier un tableau par rapport à un autre tableau
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/05/2005, 09h27
  2. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04
  3. Envoi d'un tableau par pipe
    Par Chicard dans le forum Développement
    Réponses: 2
    Dernier message: 10/03/2004, 09h47
  4. Passage d'un tableau par référence?
    Par sebduth dans le forum C
    Réponses: 9
    Dernier message: 16/07/2003, 18h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo