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 sur plage vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    employé
    Inscrit en
    Mars 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2019
    Messages : 29
    Par défaut Tri sur plage vba
    Bonjour,

    J'ai un tableau dans une feuille intitulée congé annuels, le tableau est nommé tableau 5. Mon tableau est un tableau dynamique qui s'étend des colonnes A à J

    J'ai créer une macro pour faire un tri automatique lorsque l'on rentre une date en colonne A. Le problème c'est que mon tri s'étend à toutes les colonnes, hors je voudrais qu'il s'étende uniquement des colonnes A à F incluse.

    Une idée pour que le tri ne se fasse que sur la plage donnée en fonction de la colonne A ?

    Mon code est 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
    17
    18
    19
    20
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("Tableau5")) Is Nothing Then ' si la cellule modifiée fait partie du tableau5
            Application.ScreenUpdating = False ' pour éviter que le tableau "clignote" on arrête la mise à jour de l'écran
     
     
                    ActiveWorkbook.Worksheets("Congé Annuels").ListObjects("Tableau5").Sort.SortFields. _
                    Clear ' supprime les filtres éventuels
                ActiveWorkbook.Worksheets("Congé Annuels").ListObjects("Tableau5").Sort.SortFields. _
                    Add Key:=Range("Tableau5[[#All],[Date :]]"), SortOn:=xlSortOnValues, Order _
                    :=xlAscending, DataOption:=xlSortNormal ' tri par ordre croissant sur la colonne date (colonne A)
                With ActiveWorkbook.Worksheets("Congé Annuels").ListObjects("Tableau5").Sort
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
            Application.ScreenUpdating = True ' on remet en marche la mise à jour de l'écran
        End If
    End Sub
    Merci d'avance pour la lecture et bonne fin de journée.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une idée pour que le tri ne se fasse que sur la plage donnée en fonction de la colonne A ?
    C'est curieux comme demande car un tri sur une ou plusieurs colonnes DOIT être étendue sur l'ensemble de la liste donc toutes les colonnes.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, je m'associe a @Philippe Tulliez, si vous éffectuez un tri sur une partie des colonnes, quid des colonnes restantes dont les lignes ne correspondront plus du tout.
    Je vous propose donc, de faire en premier une extraction des colonnes de A a F puis ensuite de trier la nouvelle base suivant la nouvelle colonne des dates. Ainsi vous conserverez l'intégrité des données de votre tableau initial.
    Si vous ne connaissez pas les filtres élaborés, je vous invite à consulter le Tutorom de @Philippe Tulliez concernant les filtres élaborés.

    Cordialement

  4. #4
    Membre averti
    Homme Profil pro
    employé
    Inscrit en
    Mars 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2019
    Messages : 29
    Par défaut
    Bonjour,

    En fait mon soucis c'est que dans le tableau j'ai des formules dans les colonnes qui suivent mais que la formule en H2 par exemple n'est pas la même qu'en H3, H4 et suivante. Je peux toujours vous mettre mon tableau et ma feuille pour que vous y jetiez un œil éventuellement.

    Dedans je n'ai donc pas mis la macro qui est dans le premier message mais un copier-coller suffira ^^

    En bref ce que je voudrais faire, c'est dans la seconde feuille (Congé Annuels). Lorsque l'on introduit une date en colonne A, il faudrait que le tri se fasse directement après encodage. Le but étant que les dates soient classées par ordre chronologique mais que les formules qui sont en case G2, H2, I2 et J2 restent en place afin de ne pas fausser la suite des calculs. J'ai bien essayé de mettre une condition du style : (Si (ligne()<3); formule H2; formule H3) mais je n'arrive pas à l'encoder correctement.

    Et j'ai encore un autre soucis, je voudrais que si le solde d'heures devient négatif dans une des colonnes H,I, la feuille décompte le restant dans la colonne suivante, à savoir I et J et que l'affichage mentionne 0 et pas une valeur négative (mais cela je cherche encore comment faire dans mes conditions).

    En pièce jointe mon fichier.

    Merci pour la lecture déjà
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour,
    Et j'ai encore un autre soucis, je voudrais que si le solde d'heures devient négatif dans une des colonnes H,I, la feuille décompte le restant dans la colonne suivante, à savoir I et J et que l'affichage mentionne 0 et pas une valeur négative (mais cela je cherche encore comment faire dans mes conditions).
    Ci dessous la formule pour la colonne I, vous n'avez plus qu'a vous en inspirer pour la colonne J. Sous réserve que votre formule initiale soit bonne?
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(OU(MOIS(A6)>=5; H6<=0); SI(I5-F6<=0;0;I5); I5)

    Cordialement

  6. #6
    Membre averti
    Homme Profil pro
    employé
    Inscrit en
    Mars 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2019
    Messages : 29
    Par défaut
    Bonjour,

    Merci pour la formule et désolé du temps d'attente pour une réponse de ma part.

    J'ai avancé un peu dans mon fichier, mais j'ai toujours quelques soucis.

    En gros, à l'heure actuelle mon fichier fonctionne correctement jusqu'à la ligne 5 (sur la seconde feuille). En fait je voudrais que lorsque ma colonne H passe en négatif, la colonne I commence à se décompter pour le solde restant (dans mon cas, la colonne I devrait afficher 29 et non 26).

    Pour essayer d'être synthétique, lorsque que le mois dans la colonne A est < 5 on décompte dans la colonne H (tant qu'il reste des heures positives). Ensuite on décomptera dans la colonne I le reste ou toute prise d'heures après le mois d'avril.

    J'ai quelques SI imbriqués, et je me demandais si je ne rajouterais pas une conditions en colonne I, à savoir que si la case H de la ligne supérieure est négatif, on ne décompte que ce qui est en colonne F. Mais je ne vois pas où et comment l'imbriquer en plus dans le reste.

    Merci d'avance pour la lecture et bonne journée à vous
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2013] Tri sur plage variable
    Par pepesese dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/05/2015, 21h51
  2. [VBA-E]Tri sur plus de 3 colonnes
    Par jmmaugis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2007, 22h28
  3. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 19h02
  4. [VBA-E]Tri sur 4 clefs?
    Par Kyel dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/06/2006, 17h13
  5. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32

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