VBA double critère via dropdown liste = runtime errors 91 et 1004

Bonjour à tous,

Je suis en train de me taper la tête contre un mur.

Le but de la macro: Filtrer puis copier/coller des données depuis un tableau général ("shtGen") vers un tableau 'sur-mesure' ("shtTotal").

Il y a deux critères en shtTotal B6 et B7, où se trouvent deux listes dropdown (data validation).

Le critère en B6 ("Dir") regroupe les départements, celui en B7 regroupe les types de transactions.

1. La macro filtre le tableau de shtGen et cache les lignes qui ne correspondent pas.

2. Elle copie la plage de données de manière dynamique et la colle dans shtTotal

3. Elle est censée ensuite montrer les lignes qui ont été cachées dans shtGen afin de réinitialiser le tableau.

Le problème: shtGen.ShowAllData marche de manière très incohérente. 80% du temps, ça me retourne une erreur 1004, des fois ça marche, et des fois ça copie/colle l'entièreté du tableau shtGen dans shtTotal...

Je crois que le meilleur, c'est les fois où la macro marche à l'envers et que ça me copie/colle tout le tableau dans shtTotal mais que ça laisse les bons filtres dans shtGen

De plus, et là encore pas à chaque fois, la ligne shtGen.AutoFilter.Range.Copy shtTotal.Range("A16") me sort une erreur 91.

Cerise sur le tas de fumier, la ligne MsgBox "Non-existent combination" n'apparaît jamais, même quand je tente de filtrer deux critères qui sont incompatibles (par exemple "Boulangerie" et "Audiovisuel"). Dans ce cas précis, soit ça cache tout le tableau de shtGen, soit ça copie/colle tout le tableau dans shtTotal, soit les deux...

Aidez-moi, par pitié

Sub iNeedHelpForTheLoveOfGod()

' PART ONE: Multi-criteria export
' Sheets
    Dim shtGen As Worksheet
    Dim shtTotal As Worksheet
    Dim shtVar As Worksheet
    Set shtGen = ActiveWorkbook.Worksheets("Tab_Général")
    Set shtTotal = ActiveWorkbook.Worksheets("RECAP_TOTAL")
    Set shtVar = ActiveWorkbook.Worksheets("Variables")
'
' Arrays
    Dim arrDir As Variant, sDir As Variant
    Dim arrType As Variant, sType As Variant
    arrDir = Array("DICOM", "DAP", "DSJ", "DPJJ", "PVAM")
    arrType = Array(shtVar.Range("C2:C19"))
'
' Dynamic Range
    Dim LastRowGen As Long
    Dim LastRowTotal As Long
    Dim LastColumn As Long
    LastRowGen = shtGen.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastRowTotal = shtTotal.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'
    Dim RngGen As Range
    Dim RngTotal As Range
    Set RngGen = shtGen.Range("A16:P" & LastRowGen)
    Set RngTotal = shtTotal.Range("A16:P" & LastRowTotal)
'
' Criteria
    Dim StartCell As Range
    Dim cDir As Range
    Dim cType As Range
    Dim lr As Long
    Set StartCell = shtGen.Range("A16")
    Set cDir = shtTotal.Range("B6")
    Set cType = shtTotal.Range("B7")

'
' Filter
  If shtGen.AutoFilterMode Then shtGen.AutoFilterMode = False
  lr = shtGen.Range("C" & Rows.Count).End(3).Row
  shtTotal.Range("A16:P" & Rows.Count).ClearContents
  cDir = shtTotal.Range("B6").Value
  cType = shtTotal.Range("B7").Value

  With shtGen.Range("A16:P" & lr)
    If cDir <> "" Then .AutoFilter 3, cDir Else .AutoFilter 3, "*"
    If cType <> "" Then .AutoFilter 14, cType Else .AutoFilter 14, "*"
  End With

  If shtGen.Range("C" & Rows.Count).End(3).Row > 16 Then
' Runtime error 91 here:
    shtGen.AutoFilter.Range.Copy shtTotal.Range("A15")
    ' Runtime error 1004 here:
    shtGen.ShowAllData
  Else
    MsgBox "Non-existent combination"
  End If

' Return to normal in shtGen
    Application.CutCopyMode = False
' Runtime error 1004 here:
    shtGen.ShowAllData
    shtGen.AutoFilterMode = False

End Sub

Bonjour LdVBA (c'est plus court ) et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment

  • Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).

Merci de votre participation

Cordialement

Bonsoir Lucas et bienvenu, bonsoir le forum,

Aidez-moi, par pitié

Sans le fichier qui va bien, comment t'aider...

Bonjour "YourBroLucas"

Je vous invite vievment à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment :

  • Ne postez pas la même question sur un autre forum pour éviter de faire perdre bêtement du temps aux membres sur un problème qui peut être déjà résolu sur l'autre forum. L'inverse est également valable, si vous avez déjà posé votre question sur un autre forum, ne créez pas un doublon sur ce forum (à moins d'avoir clôturé le sujet sur l'autre forum).

Je clôture donc le sujet, jusqu'à ce que vous preniez votre décision

Merci de votre compréhension et de votre participation

Rechercher des sujets similaires à "vba double critere via dropdown liste runtime errors 1004"