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 :

[XL-2017] Tri automatique .. VBA


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut [XL-2017] Tri automatique .. VBA
    Bonjour,
    Je m'arrache les cheveux .....

    Je souhaiterais qu'un filtre que j'ai positionné, s'ajuste automatiquement quand je modifie une donnée. Par ailleurs, cette liste finalement est basée sur une plage de donnée ce qui ne facilite pas le tout ...

    Je mets mon fichier en pièce jointe et explique mon problème :

    EN GROS :
    • Si je sélectionne Test 1 je devrais voir une seule ligne avec comme données Titre 2, puis "3"
    • Si je sélectionne Test 2 je devrais voir une seule ligne avec comme données Titre 1, puis "1"
    • Si je sélectionne Test 3 je devrais voir une seule ligne avec comme données Titre 3, puis "2"
    • Si je sélectionne Test 4 je devrais voir deux lignes, une avec Titre 2, puis "1 ET AUSSI une seconde ligne avec Titre 3 et "2" ….



    Actuellement, je vois tout … Je voudrais filtrer automatiquement quand je modifie le choix en case C2 (jaune) et que les lignes disparaissent si c'est "0" finalement. Alors qu'actuellement, le filtre choisi précédemment ne modifie pas les lignes qui s'affichent et du coup, le choix 0 reste si je modifie ... (je sais pas si je suis clair).

    J'ai bien compris qu'il fallait faire un fichier xslm, qu'il fallait faire clic droit et visualiser le code ... et mettre quelque chose qui a à voir avec du "Range"

    J'ai testé plein plein de trucs mais là ... Je suis programmeur PHP à mes heures perdues, et ne connais pas trop le VBA m'enfin ... je devrais pouvoir lire sans souci !

    Pour le moment j'ai mis ça (qui devrait ne m'afficher que quand le contenu est "3" dans la colonne C si j'ai bien compris). :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Feuil1")
        If Not .AutoFilterMode Then .Range("C5").AutoFilter Field:=1, Criteria1:="3"
    End With
    Mais bien entendu ... ça ne marche pas :'(

    HELPPPPP

    Bonne journée.
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 19/09/2019 à 22h29. Motif: Ajout des balises [CODE] mon code [/CODE] (bouton #)

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    En fait, ce n'est pas un tri ni d'un filtre qu'il vous faut, mais plutôt une extraction d'un tableau suivant le critère choisi.

    le fichier, sélectionnez le test en C2 pour obtenir le résultat
    Pièce jointe 504398

    Le code dans le module de la feuille1
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Lig As Long, c As Long
        Dim t As Object
        Application.ScreenUpdating = False '
        Application.EnableEvents = False 'pour interdire la relance à chaque modification provoquée par la macro
        Range("B6:C8").ClearContents 'on efface les précédents résultats
        Lig = 6 'première ligne de remplissage
        Test = [C2] ' on récupère le choix demandé
        Set t = Range("H10:H14").Find(Test, LookIn:=xlFormulas, LookAt:=xlWhole) 'on recherche la position du test
        If Not t Is Nothing Then 's'il existe
            For c = 9 To 11 ' de la colonne 9 à 11
                If Cells(t.Row, c) <> "" Then 'si la cellule testée n'est pas vide
                    Cells(Lig, "B") = Cells(t.Row, "H") 'on recopie le titre et la valeur
                    Cells(Lig, "C") = Cells(t.Row, c)
                    Lig = Lig + 1 'on se prépare pour écrire sur la ligne suivante
                End If
            Next
        End If
        Application.EnableEvents = True
        Set t = Nothing
    End Sub
    Cdlt

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Déjà ... UN GRAND MERCI !!!! C'est exactement ça que je voulais faire ...

    Juste une autre petite question pour avoir à 100% ce que je souhaitais). Comment mettre le "Titre" de la colonne et non le nom du Test dans la colonne "B" de chaque ligne ?

    Là il met le contenu de C2 si j'ai bien compris (ou le titre de la ligne dans le tableau de droite plutôt), pour chaque ligne affichée. Je voudrais qu'il indique le titre de la colonne du tableau de droite : ex pour le Test 4 :
    "Titre 2" suivi de 1
    et sur la ligne suivante "Titre 3" suivi de 2

    Merci encore ....

    [EDIT] : J'ai trouvé en quelques minutes !! ça me soulage
    Il fallait changer la demande du contenu pour la cellule de gauche, ce qui devient : Cells(Lig, "B") = Cells(10, c)
    Donc ...

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Lig As Long, c As Long
        Dim t As Object
        Application.ScreenUpdating = False '
        Application.EnableEvents = False 'pour interdire la relance à chaque modification provoquée par la macro
        Range("B6:C8").ClearContents 'on efface les précédents résultats
        Lig = 6 'première ligne de remplissage
        Test = [C2] ' on récupère le choix demandé
        Set t = Range("H10:H14").Find(Test, LookIn:=xlFormulas, LookAt:=xlWhole) 'on recherche la position du test
        If Not t Is Nothing Then 's'il existe
            For c = 9 To 11 ' de la colonne 9 à 11
                If Cells(t.Row, c) <> "" Then 'si la cellule testée n'est pas vide
                    Cells(Lig, "B") = Cells(10, c) 'on recopie le titre et la valeur
                    Cells(Lig, "C") = Cells(t.Row, c)
                    Lig = Lig + 1 'on se prépare pour écrire sur la ligne suibvante
                End If
            Next
        End If
        Application.EnableEvents = True
        Set t = Nothing
    End Sub

    MERCIIIIIIIIIIIIIIIIIIII

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait j'ai encore une toute petite question ..

    Comment trier automatiquement par la colonne C par exemple .... (ordre alphabétique)
    Merci !

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonsoir
    démarre l'enregistreur automatique et faire l'opération manuellement , arrêter l'enregistreur et tu aura un code sur plateau
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

Discussions similaires

  1. [XL-2003] Associer Cellule à un code VBA + tri automatique
    Par Razekiel_ dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/07/2012, 13h59
  2. Export automatique VBA dans Excel
    Par eddyG dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/12/2006, 23h34
  3. Tri automatique des mails
    Par trois_1 dans le forum Réseau
    Réponses: 7
    Dernier message: 03/08/2006, 21h53
  4. [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
  5. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19

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