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
Re

Pas de pause, pour les braves !
Cette version fonctionne un peu mieux
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:C2")) Is Nothing Then
Sheets("Banque").Range("N2:P2").ClearContents
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").Value2
            .Range("P2") = "<=" & Sheets("Transfert").Range("E1").Value2
        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
 

laurent950

XLDnaute Accro
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 ...

Oui c'est sur car il y a une gestion des erreurs
' Evite le message d'erreur si le tableau est vide.
On Error Resume Next
' Le code
On Error GoTo 0

Poste #11 refaite un copier coller et faite a nouveau un essaie (c'est obligé que cela fonctionne !)

Ps : ReDim Preserve TresBanque(UBound(TresBanque) - 1) (C'est logique le tableau est vide et je veux lui enlevé la seul case du tableau donc sa plante) sauf avec la gestions des erreurs que j'ai intégré.
 

laurent950

XLDnaute Accro
Oui Staple1600,
Tu as raison il va absolument rien comprendre, d'ailleurs je sais même pas si il comprend sont premier code, attention il n'y a rien de moqueur dans ce que je dit (Car moi même j'avais pas envie d'apprendre a me servir des ces fameux filtres... Bof je me suis emmelé... ensuite c'est vrais que comme je ne suis pas vraiment dépendant de ce que tous Offre VBA pour l'application je travail beaucoup avec des variable tableaux

Mais le code lui fonctionne ont peux lui exliquer aussi en commentant le code mais d'expérience je pense pas que beaucoup sont interressé par cela !

Laurent
 

GUY rrr

XLDnaute Occasionnel
Staple1600, laurent950,

@Staple1600,

J'ai bien testé votre macro du post 18 mais rien ne fonctionne ... Êtes-vous sûr que votre macro fonctionne avec la présentation de mon fichier ou c'est moi qui doit aller dormir ?

@laurent950,

Changements effectués mais filtrage pas tout à fait au point (par ex: janvier et VE+ me renvoient VE+ de janvier et février)

Merci pour votre patience
 

Staple1600

XLDnaute Barbatruc
Re

Moi, pour le moment, je me borne à essayer de faire en sorte que le demandeur mette les mains dans le cambouis pour corriger son code initial.
Le code est déjà (+ou-) corrigé ( mon dernier message)
Il lui reste à trouver où mettre ses critères (et ce de façon orthodoxe)
C'est facile, la position est déjà dans le code VBA ;)
(>Et c'est celle du code de départ, mais légèrement modifié par bibi)
 

GUY rrr

XLDnaute Occasionnel
Laurent950,

Tu as raison il va absolument rien comprendre, d'ailleurs je sais même pas si il comprend sont premier code,

Jusque là, nous sommes tous les trois d'accords :cool:, surtout que je l'ai bien spécifié dans mon post 3 ;)

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.

Veuillez excuser mon ignorance dans ce domaine, je tente juste d'avancer avec certains outils que je ne maitrise pas forcément mais qui s'avèrent être d'une redoutable éfficacité.
 

Staple1600

XLDnaute Barbatruc
Re

Staple1600, laurent950,
@Staple1600,
J'ai bien testé votre macro du post 18 mais rien ne fonctionne ... Êtes-vous sûr que votre macro fonctionne avec la présentation de mon fichier ou c'est moi qui doit aller dormir ?

Guy rrr
Non, je poste bien sur mes réponses en les testant sur des dromadaires chiliens avec des peignes hongrois !!! :rolleyes:
Donc voila ce que tu n'as pas fait pour ce que fonctionne la macro du message#18
01GuyRRR.jpg


PS: je précise: je suis ni énervé ni quoique ce soit d'autre ;)
Le problème n'est pas d'être débutant en Excel en VBA
Ce qui est chronophage, c'est le manque d'attention du demandeur.
Depuis le début, j'ai dis que le nœud du problème se situait dans l'agencement/format des critères du filtre avancé.
Il fallait juste tout lire attentivement ;)
 
Dernière édition:

laurent950

XLDnaute Accro
Changements effectués mais filtrage pas tout à fait au point (par ex: janvier et VE+ me renvoient VE+ de janvier et février)

hello c'est un peux logique il faut tester sur le mois (Janvier ou Février)

je pense que je vais stopper ici car si non Staple1600 va me tiré les Oreilles :p :p :p

Ps : C'est complexe c'est un code de tableau emboité enfin si vous avez envie de comprendre au plaisir de vous expliquer
 

GUY rrr

XLDnaute Occasionnel
Staple1600,

J'ai lu attentivement mais je n'ai pas compris avec votre dernier code qu'il me fallait "juste mettre" à cet endroit "Type", "Date" et "Date" (N1,O1 et P1 dans "Banque") pour qu'effectivement la macro fonctionne. J'étais resté avec toute la disposition des critères que j'avais essayé d'adapter.

Du coup, le sourire me revient mais ... à l'épreuve, je constate une erreur dans par exemple "janvier" et "AC -" ou les données extraites (notamment la dernière) ne correspondent pas aux critères.

Un petit coup de pouce supplémentaire ?
 

Staple1600

XLDnaute Barbatruc
Re

Donc on est bien d'accord, depuis le message#2, tu avais la piste à suivre pour commencer à sourire ;)

Pour le reste, relire ce que j'ai écrit.
(Pas folle, la guêpe, j'avais pris soin de préciser ;))
Cette version fonctionne un peu mieux

Car au départ, je suis parti sur ton classeur, ta macro, ta façon d'agencer les données.
Donc si cela ne fonctionne pas à 100%, c'est qu'il a des choses à revoir dans ta conception du classeur ;)
 

GUY rrr

XLDnaute Occasionnel
Laurent950, Staple1600, le forum,

@laurent950,

Merci pour votre intervention, à l'occasion je me plongerai dans la compréhension du langage VBA et ferait peut-être appel à vos explications concernant votre code.

@Staple1600,

Votre macro me correspond parfaitement et je pense que cette histoire de données extraites qui ne correspondent pas aux critères de date sont dues à ma "Transfert" E1. J'adapte la formule pour clore ce sujet.

En tous cas, un très grand merci aux intervenants.
 
Dernière édition:

laurent950

XLDnaute Accro
@laurent950,

Merci pour votre intervention, à l'occasion je me plongerai dans la compréhension du langage VBA et ferait peut-être appel à vos explications concernant votre code.

Suite à la condition If juste comparer les mois avec les mois (Format)
Changements effectués mais filtrage pas tout à fait au point (par ex: janvier et VE+ me renvoient VE+ de janvier et février)

If Format(CDate(Me.Cells(1, 3)), "MMMM") = Format(CDate(TbdBanque(i, 2)), "MMMM") And Me.Cells(2, 3) = TbdBanque(i, 3) Then

Même ci cela est Résolu avec le code a Staple1600 je vous laisse cette solution
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 Format(CDate(Me.Cells(1, 3)), "MMMM") = Format(CDate(TbdBanque(i, 2)), "MMMM") And Me.Cells(2, 3) = TbdBanque(i, 3) Then
                '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:

Discussions similaires

Statistiques des forums

Discussions
312 335
Messages
2 087 386
Membres
103 531
dernier inscrit
dieubrice