Erreur macro

GUY rrr

XLDnaute Occasionnel
Bonjour le forum,

Je cherche à extraire de mon onglet "Banque" des données correspondant à deux critères (C1 et C2) situés dans mon onglet Transfert.
J'ai tenté d'adapter une macro qui me correspond récupérée je ne sais plus où ... :rolleyes:, mais n'arrive pas à l'adapter.
Quelqu'un pourrait-il jeter un œil dessus afin que je puisse finaliser mon fichier ?

Merci pour les solutions que vous pourrez me fournir.
 

Pièces jointes

  • Mvts.xlsm
    100.1 KB · Affichages: 19

Staple1600

XLDnaute Barbatruc
Bonjour le fil, GUY rrr

•>GUY rrr
Quand survient l'erreur, alors illico ma souris, je retourne caresser ;)
Et ici donc, la dite souris me sers à faire un filtre élaboré manuellement.
Ce qui permet de voir comment est agencée la zone de critère
Je te laisse donc déduire où le bât blesse dans ton AdvancedFilter "vbaistique" ;)
01ERR.jpg
 

GUY rrr

XLDnaute Occasionnel
Bonjour Staple1600, le forum,

Merci pour votre retour et pour votre suggestion d'agencement de la zone de critère :).
J'ai beau me creuser les méninges, tout tourner dans tous les sens, je ne comprends pas :oops:.
Je ne comprends pas que ma zone critère dans votre image soit dans l'onglet "Banque", dans cette plage et disposée de cette manière.
Je ne comprends pas que ma formule en "Transfert" O1 se copie automatiquement en "Banque" O1.
Je ne comprends pas que Criteres et Extraire apparaissent dans mon gestionnaire de noms ...
Je ne comprends pas que si je change manuellement mes références de Criteres, elles se remettent aux anciennes références (surement dû à l'action de la macro ...) et pour couronner le tout, je ne comprends rien au langage utilisé dans une macro. Il m'arrive d'adapter pour mes besoins des macros simples, mais là, je sèche. Pour moi, on est au niveau supérieur de la macro simple (simple +) o_O, la logique m'échappe.
Je trouve la procédure intéressante mais n'arrive pas à l'adapter :mad:.

Staple1600, je comprends votre raisonnement, mais là, je me suis fait un noeud au cerveau ...
Pourriez-vous, sans forcément me donner une solution clé en main, détailler votre explication ?

Merci pour votre retour.
 

GUY rrr

XLDnaute Occasionnel
Bonjour laurent950, Staple1600, le forum,

Je ne sais pas si le con finement :oops: m'a eu, mais là, je n'arrive plus à suivre ...

@laurent950,

Passé par une formule c'est obligatoire !

Si les formules sont pour l'extraction, je préfère les éviter car elles ralentissent considérablement le recalcul, d'ou mon appel à macro.

Dans le cas contraire il y a d'autres solutions

Je suis ouvert à tout type de solution, du moment ou elles me correspondent ;)

@Staple1600,

Bonnes lectures et bon appétit ;)

Bon appétit également ;)

Merci pour vos suggestions et propositions
 

Staple1600

XLDnaute Barbatruc
Re

>•Guy rrr
Les solutions, suggestions et propositions sont là.
Tu as cliqué sur les liens (en bleu) dans le message#4?
Il y a une façon correcte d'agencer les critères d'un filtre élaboré.
(C'est ce que voulait montrer ma copie d'écran du message#2)

PS: Laurent950 parlait de critère "formulé" (à utiliser avec le filtre élaboré)

• Tu devrais trouver des exemples de ce genre de critère dans les liens que j'ai posté dans le message#4.
 

Staple1600

XLDnaute Barbatruc
Re

Encore une fois la solution est là depuis le message#2
Il faut utiliser le filtre élaboré dans les règles de l'art
(que ce soit manuellement ou par VBA)
Et les tutoriaux distillés dans le message#4 permettent de savoir comment mettre tout cela en musique ;)
Il faut juste s'y atteler ;)
 

laurent950

XLDnaute Barbatruc
Voila
VB:
Option Base 1
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
' Nettoyage de la feuille Transfert
    Application.EnableEvents = False
    Me.Range(Me.Cells(4, 1), Me.Cells(65536, 15)).ClearContents
Dim i As Long
Dim FBanque As Worksheet
    Set FBanque = Worksheets("Banque")
Dim TbdBanque As Variant
    TbdBanque = FBanque.Range(FBanque.Cells(20, 1), FBanque.Cells(FBanque.Cells(65536, 1).End(xlUp).Row, 15))
' il suffit de remplire le tableau.
    Dim TresBanque() As Variant
        ReDim TresBanque(1)

If Not Application.Intersect(Target, Range("C1:C2")) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
        If Sheets("Transfert").Range("C1") <> "" Then
            For i = LBound(TbdBanque, 1) To UBound(TbdBanque, 1)
                If CDate(Me.Cells(1, 3)) <= CDate(TbdBanque(i, 2)) And CDate(Me.Cells(1, 3)) < CDate(TbdBanque(i, 2)) And Me.Cells(2, 3) = TbdBanque(i, 3) Then
                    TresBanque(UBound(TresBanque)) = FBanque.Range(FBanque.Cells(i + 19, 1), FBanque.Cells(i + 19, 15))
                    ReDim Preserve TresBanque(UBound(TresBanque) + 1)
                End If
            Next i
        'Else
            '.Range("O1").ClearContents
        End If
    End If
' Evite le message d'erreur si la feuille n'existe pas.
On Error Resume Next
    ReDim Preserve TresBanque(UBound(TresBanque) - 1)
        For i = LBound(TresBanque, 1) To UBound(TresBanque, 1)
            Me.Cells(i + 3, 1).Resize(UBound(TresBanque(i), 1), UBound(TresBanque(i), 2)) = TresBanque(i)
        Next i
On Error GoTo 0
Application.EnableEvents = True
End Sub
 
Dernière édition:

GUY rrr

XLDnaute Occasionnel
Bonjour laurent950, Staple1600, le forum,

@Staple1600,
En fait, je crois qu'il y a incompréhension entre nous.
J'ai été voir vos liens (même celui avec les images qui bougent ;) ) et il se trouve que vous aviez la suggestion adéquate,à savoir : Il y a une façon correcte d'agencer les critères d'un filtre élaboré.
Du coup, no comprendo ...
Le fichier, tel que présenté, ne peut être modifié car d'autres éléments doivent prendre place dans les vides au dessus des tableaux. Je pense que c'est pour cela que la macro a des ratées ...
Du coup, c'est une adaptation de la macro ou toute autre solution par macro que je souhaite.

@laurent950,
Je n'ai ni besoin du solde ni de la date banque ;)

Je n'ai besoin que d'arriver à faire fonctionner correctement cette macro :cool:

Merci pour vos suggestions et pour votre patience.

Edit: il y a eu croisement de messages, je vous tiens informés
 

Staple1600

XLDnaute Barbatruc
Re

Donc oui, tout était là à disposition
Il suffisait de bien lire et de faire les adaptations idoines.
;)
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:C2")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
    With Sheets("Banque")
        If Sheets("Transfert").Range("C1") <> "" Then
            .Range("N2") = Sheets("Transfert").Range("C2")
            .Range("O2") = ">=" & Sheets("Transfert").Range("C1")
            .Range("P2") = "<=" & Sheets("Transfert").Range("E1")
        Else
           ' .Range("O2").ClearContents
        End If
        .Range("A19:O" & .[A65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=.Range("N1:P2"), CopyToRange:=Sheets("Transfert").Range("A3:O3"), Unique:=False
    End With
End If
End Sub
Evidemment, mes critères sont conformes à ce qui se fait avec le filtre élaboré. ;)
Je te laisse les agencer correctement avant de publier un copie d'écran ;)
Faut bien que tu mouilles un peu la chemise, camarade ;)
 
Dernière édition:

GUY rrr

XLDnaute Occasionnel
Laurent950,

J'ai testé et j'ai une erreur à ce niveau ReDim Preserve TresBanque(UBound(TresBanque) - 1)
Et lorsque je veux changer mes critères plus rien ne se passe. J'ai vraiment l'impression qu'il y a quelque chose qui m'échappe ...
 

Discussions similaires

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi