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 SubBonjour LdVBA (c'est plus court
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