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 :

Problème avec filtre automatique


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Problème avec filtre automatique
    Bonjour à toutes et à tous,

    Heureux de pouvoir enfin vous retrouver après une longue période de convalescence.
    Voici mon problème : Avec le code ci-joint, je rapatrie des données venant d'un tableau général selon une lettre, pour ce code, c'est la lettre "P" inscrite dans la cellule A2 qui déclenche tout. Cependant je rencontre un petit soucis, après la dernière ligne, il m'inscrit le nombre de lignes rapatriées, comme avec un filtre automatique et ça je n'en veut pas. Le tableau doit se terminer par le dernier rapatriement trouvé, dans ce cas, la dernière ligne du tableau général comportant la lettre "P" dans la colonne "G".
    J'espère avoir été clair dans mon explication, sinon n'hésitez pas à me le dire.
    Merci par avance pour votre aide car je n'arrive pas à trouver la solution

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastLig As Long, NewLig As Long, Nb As Long
    If Target.Address = "$A$2" Then
       Union(Range("A4:H" & Rows.Count), Range("J4:K" & Rows.Count), Range("M4:M" & Rows.Count)).ClearContents
       If Target <> "" Then
          With Sheets("Général")
            .Range("A3").AutoFilter
             LastLig = .Cells(Rows.Count, "G").End(xlUp).Row
             If LastLig < 4 Then
             If .Range("A3").AutoFilter = True Then .Range("A3").AutoFilter
             Exit Sub
             End If
             With .Range("A3:N" & LastLig)
                .AutoFilter
                .AutoFilter field:=7, Criteria1:=Target
             End With
             Nb = .Range("A3:A" & LastLig).SpecialCells(xlCellTypeVisible).Count - 1
             If Nb > 0 Then
                Application.EnableEvents = False
                .Range("A4:F" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("A4")
                .Range("I4:J" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("G4")
                .Range("L4:M" & LastLig).SpecialCells(xlCellTypeVisible).Copy
                Range("J4").PasteSpecial xlPasteValues
                Application.CutCopyMode = False
                Application.EnableEvents = True
             End If
             .Range("A3").AutoFilter
            Range("A3").Select
          End With
          Range("A3").Select
        ActiveWorkbook.Worksheets("J").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("J").Sort.SortFields.Add Key:=Range("K4:K299"), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("J").Sort.SortFields.Add Key:=Range("B4:B299"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("J").Sort
            .SetRange Range("A3:L500")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A3").Select
       End If
    End If
    AutoFitSheet
    End Sub
    Bonjour,
    Apparemment je n'inspire personne, peut-être me suis-je mal expliqué ???
    Donc, j'ai une feuille dans laquelle se trouve un tableau de données saisies les unes à la suite des autres, cette feuille se nomme "Général". Ensuite, dans le même classeur j'ai d'autres feuilles dans lesquelles je rapatrie des données selon un critère précis saisi dans la cellule A2. Pour mon exemple, c'est la lettre P, et la feuille se nomme "P", lettre qui se trouve également dans le tableau de la feuille "Général" dans la colonne G. A partir de là, toutes les lignes où il y a un P sont copiées dans le tableau de la deuxième feuille, celle nommée "P". La macro devrait s'arrêter là, mais à la suite de la dernière ligne copiée, elle me met le nombre de ligne copiée et c'est ça que je souhaite supprimer.
    Merci par avance pour vos réponse
    Amicalement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Personne n'a une idée pour me venir en aide. Je rame et je viens d'attaquer la falaise.
    Merci par avance
    Amicalement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 080
    Points : 9 864
    Points
    9 864
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le seul endroit de ton code où il y a dénombrement du résultat, c'est la valeur de la variable Nb

    Or, cette variable n'est utilisée que pour tester s'il y a des données à copier. Sa valeur n'est nulle part utilisée pour l'écrire dans ta feuille

    Du coup, difficile de faire autre chose que des suppositions

    Il faudrait à minima que tu testes ton code en pas à pas afin de voir à quel moment exactement le phénomène se produit

    des idées en vrac, faute d'avoir suffisamment d'explications

    1) ce ne serait pas un sous-total ou un total que est affiché, par exemple si tu utilises un tableau structuré où la ligne des totaux est activée
    2) Pas de mises en formes conditionnelles ou de procédures évènementielles supplémentaires dans ta feuille General et ta feuille P ?
    2) ta procédure AutoFitSheet, tu peux nous la montrer ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Voici la procédure AutoFitSheet, mise dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Sub AutoFitSheet()
    If ActiveWorkbook Is Nothing Then Exit Sub
    Dim I
    If ActiveWindow.SelectedSheets.Count > 1 Then
    For I = 1 To ActiveWindow.SelectedSheets.Count
    ActiveWindow.SelectedSheets(I).Cells.EntireColumn.AutoFit
    Next
    Else
    Cells.EntireColumn.AutoFit
    End If
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    le seul endroit de ton code où il y a dénombrement du résultat, c'est la valeur de la variable Nb

    Or, cette variable n'est utilisée que pour tester s'il y a des données à copier. Sa valeur n'est nulle part utilisée pour l'écrire dans ta feuille

    Du coup, difficile de faire autre chose que des suppositions

    Il faudrait à minima que tu testes ton code en pas à pas afin de voir à quel moment exactement le phénomène se produit

    des idées en vrac, faute d'avoir suffisamment d'explications

    1) ce ne serait pas un sous-total ou un total que est affiché, par exemple si tu utilises un tableau structuré où la ligne des totaux est activée
    2) Pas de mises en formes conditionnelles ou de procédures évènementielles supplémentaires dans ta feuille General et ta feuille P ?
    2) ta procédure AutoFitSheet, tu peux nous la montrer ?
    Bonsoir,

    Il est vrai qu'il y a un peu tout ça dans mes cellules. Un total est affiché dans une cellule, une autre comporte une forme conditionnelle.
    Je vais voir si je peux faire autrement.
    Merci pour les idées
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveWorkbook Is Nothing Then Exit Sub
    force d'emblée mon admiration

    et pendant qu'on y est existent aussi, dans le genre, mais tout aussi succulents :
    - va voir dehors si j'y suis
    - les absents, levez le doigt
    - cours derrière que je t'attrape
    - etc ...

    EDIT : tu n'es pour rien dans ce genre de curiosités de VBA/Excel.
    J'aimerais pourtant savoir en raison de quoi et dans quelles circonstances tu es amené à faire un tel test
    J'aimerais également savoir si classeur protégé et/ou si addin présent
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,
    Non rien de tout ça. J'ai bêtement arrangé à mes besoins un code trouvé, je n'ai pas modifié cette partie.
    Est-ce stupide ???
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Est-ce que je dois supprimer cette partie du code ?
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

Discussions similaires

  1. Problème avec Filtre Blur sur un clip trop large
    Par gobi13 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 20/01/2008, 23h51
  2. problème de filtre automatique
    Par cladsam dans le forum Excel
    Réponses: 2
    Dernier message: 15/12/2007, 12h11
  3. [Mail] problème avec email automatique
    Par kitty2006 dans le forum Langage
    Réponses: 12
    Dernier message: 31/08/2006, 17h01
  4. [EXCEL] problème avec récupération automatique
    Par Moheva dans le forum Excel
    Réponses: 2
    Dernier message: 27/07/2006, 09h11
  5. Problème avec filtre d'un formulaire ?
    Par HookerSeven dans le forum Access
    Réponses: 3
    Dernier message: 25/02/2006, 01h59

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