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

Macros et VBA Excel Discussion :

Tri colonne avec longueur variable sous Macro VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Par défaut Tri colonne avec longueur variable sous Macro VBA
    Bonjour à tous,

    J'ai actuellement 3 colonnes Où se trouvent le "nom prénom" ( colonne A ), "l'adresse" ( colonne B ), et le "code Postal ville" ( colonne C ). Ces 3 colonnes sont bien triées par ordre alphabétique de la colonne A.
    Ce tri a été fait sur un listing de l'année précédente. Chaque année de nouveaux noms ( et adresses ) peuvent être ajoutés.

    J'ai enregistré une macro avec l'éditeur afin de refaire un tri automatique à chaque nouveau nom entré. Même quand je sélectionne les colonnes entières au moment de l'enregistrement avec l'éditeur, le programme tient compte seulement de la plage écrite et me donne le code ci-dessous :
    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
     
    Sub Tri()
        Columns("A:C").Select
        ActiveWorkbook.Worksheets("Noms").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Noms").Sort.SortFields.Add Key:=Range("A1:A60"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Noms").Sort
            .SetRange Range("A1:C60")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A1").Select
    End Sub
    Mon problème est donc : Comme remplacer les plages en fin de lignes 5 et 8 afin que ce soit des variables ( puisque des noms seront ajoutés ).


    En espérant être clair, je vous souhaite une bonne journée.

    Novice72

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 562
    Par défaut
    Bonjour

    Soit tu mets tes données sous forme de tableau et le problème ne se pose plus car on fait référence au tableau et à ses colonnes dont Excel connait à tout moment le nombre de lignes...
    Soit tu remplaces tes références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1:A60")
    Range("A1:C60")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A:A")
    Range("A:C")
    et je te conseille de mettre plutôt que

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    ou encore en respectant simplement le modèle objet d'Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Tri()
        With ActiveWorkbook.Worksheets("Noms").UsedRange
            .Sort .Cells(1), xlAscending, Header:=xlYes
        End With
    End Sub
    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par Novice72 Voir le message
    Mon problème est donc : Comme remplacer les plages en fin de lignes 5 et 8 afin que ce soit des variables
    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
    33
    34
    Sub Tri()
     
    Set f = ActiveWorkbook.Worksheets("Noms")
     
    Set LesColonnes = f.Columns("A:C")
     
    Set apres = LesColonnes.Cells(1)
    Set RechercheDonnee = LesColonnes.Cells.Find(what:="*", after:=apres, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
    DerniereLigne = RechercheDonnee.Row
     
    Set tout = f.Range("A1:C" & DerniereLigne)
     
    f.Sort.SortFields.Clear
     
    Colonne = 1
     
          f.Sort.SortFields.Add Key:=tout.Cells(1, Colonne), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
    Colonne = 2
     
          f.Sort.SortFields.Add Key:=tout.Cells(1, Colonne), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
    With f.Sort
            .SetRange tout
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
    End With
     
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Par défaut
    Bonjour et merci à vous tous.

    Je retrouve un peu de temps à consacrer à mon programme. Je vais donc mettre en application vos conseils.

    A bientôt


    NOVICE72

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Par défaut
    Bonsoir,

    C'est tout bon.



    Encore Merci

    Novice72

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

Discussions similaires

  1. [XL-2007] range de colonne variable dans macros vba
    Par Lbn23 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/03/2012, 15h03
  2. [XL-2003] Plage de recherche variable dans macro VBA
    Par CampaSC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2011, 18h27
  3. Lire un fichier texte avec colonnes de longueur variable
    Par Jack_nicholson dans le forum SAS Base
    Réponses: 5
    Dernier message: 07/03/2011, 15h03
  4. [XL-2007] Valeur textbox dans une colonne de longueur variable
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 14h42
  5. [Unix][9i] insert avec des variable ($) sous Korn Shell
    Par weejungle dans le forum Oracle
    Réponses: 1
    Dernier message: 20/09/2006, 12h41

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