erreur vba sur sheets.select et criteriarange

bugg

XLDnaute Junior
Bonjour,
En débutante,
Ca fait plusieurs jours que je bloque sur ce code, et je ne comprends pas pourquoi,

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("a4")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("Feuil3").Select
Sheets("Feuil3").Range("a19:e" & [a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("a5:a6"), CopyToRange:=Range("g4:j4"), Unique:=False
End If
End Sub


pourriez-vous m'aider
merci d'avance
 

Pièces jointes

  • olliv3b.xlsm
    73.8 KB · Affichages: 77
  • olliv3b.xlsm
    73.8 KB · Affichages: 80
  • olliv3b.xlsm
    73.8 KB · Affichages: 81

Fred0o

XLDnaute Barbatruc
Re : erreur vba sur sheets.select et criteriarange

Bonjour bugg,

Ton code n epeut pas fonctionner : Tu fais référence à "Feuil3" qui n'existe pas dans ton fichier. En imaginant que "Feuil3" correspond à "HIST Factures", tu appliques un filtre sur le champ "a19:e7" qui est vide d'une part et qui ne correspond à rien d'autre part. Ensuite, la zone de critères est "a5:a6" à priori de la feuille en cours "Hist Client", ces celluless contenant RIEN et "Nom :". Bien sûr, ceci n'est pas compris par le VBA.

En espérant t'avoir aidé à y voir plus clair,

A+
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : erreur vba sur sheets.select et criteriarange

Bonjour Bugg

La "feuille3" n'existant pas il y a lieu tout d'abord de remplacer
Sheets("Feuil3")
par
Sheets("Hist Factures")

mais ça ne solutionne pas le problème car ça beuge encore ici:

Sheets("Hist Factures").Range("a19:e" & [a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("a5:a6"), CopyToRange:=Range("g4:j4"), Unique:=False


........... je n'ai pas compris exactement ce que tu veux faire

à+
Philippe

Édit: Bonjour Fred00
 

bugg

XLDnaute Junior
Re : erreur vba sur sheets.select et criteriarange

Bonjour,
merci pour la rapidité,
je me suis trompée dans l'envoi fichier
voilà le nouveau fichier (qui ne fonctionne pas)
merci d'avance
 

Pièces jointes

  • olliv3b.xlsm
    41.3 KB · Affichages: 87
  • olliv3b.xlsm
    41.3 KB · Affichages: 87
  • olliv3b.xlsm
    41.3 KB · Affichages: 88

Pierrot93

XLDnaute Barbatruc
Re : erreur vba sur sheets.select et criteriarange

Bonjour à tous,

petite remarque au passage, ne précisant pas la feuille auquels les objets "range" font référence, comme le code est dans un module de feuille, cela s'appliquera à la feuille dans lequel se trouve le code...

bon après midi
@+
 

Fred0o

XLDnaute Barbatruc
Re : erreur vba sur sheets.select et criteriarange

Bonsoir bugg, Pierrot,

Voici le fichier corrigé. Plusieurs erreurs sur la référence aus feuilles de calcul. Ensuite, il y avait incohérence entre le critère "A3" dans "Histo Client" et le champ "A1" dans la feuille "Histo fournisseurs".

A+
 

Pièces jointes

  • olliv3b_V2.xlsm
    40.6 KB · Affichages: 130
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : erreur vba sur sheets.select et criteriarange

Salut bugg,
voici la macro commentée et modifiée quelque peu. Je me suis permis de faire une ou deux petites modifications sur le code de Fred0o (que je salue au passage :) )

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh As Worksheet 'Déclare la variable sh qui représente le nom d'une feuille
    Dim DL As Integer 'Déclare une variable de type integer
    Application.ScreenUpdating = False
    If Not Application.Intersect(Target, Range("a4")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Application.EnableEvents = False 'On enlève les événements pour ne pas redéclencher la macro
        'événementielle lors du clearcontents qui suit
        Range("G3:K" & Range("G65000").End(xlUp).Row).ClearContents 'Efface le contenu du range
        Application.EnableEvents = True 'remet les événements
        Set sh = Sheets("HIST Factures") 'Set la variable sh
        DL = sh.Range("A65000").End(xlUp).Row 'Détermine la dernière ligne
        sh.Range("A1:E" & DL).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A3:A4"), CopyToRange:=Range("G4"), Unique:=False 'Set le filtre
    End If
    Set sh = Nothing 'Vide la slut de mémoire
End Sub

En espérant que cela t'éclaires un peu,

Cordialement,

Étienne
 

Grand Chaman Excel

XLDnaute Impliqué
Re : erreur vba sur sheets.select et criteriarange

Bonsoir bugg, bonsoir le forum

et puis-je abuser et te demander l'explication du dim sh,sh que je ne connais pas.

Dans le code, il y a :

Code:
Dim sh, dl

Ce qui correspond à la déclaration des variables sh et dl.
Ici, sh est une feuille (sheet) et dl est pour la "dernière ligne".
Personnellement, j'aurais défini les variables de cette façon :

Code:
Dim sh as Worksheet
Dim dl as Integer

car sinon elles sont de type Variant.
Un peu de documentation sur le sujet ici : Utiliser les variables en VBA Excel

A+

Edit: Bonsoir Etienne
 

bugg

XLDnaute Junior
Re : erreur vba sur sheets.select et criteriarange

bonjour, je viens d'essayer le dernier code, mais ça ne marche pas
où ai-je encore fait une (ou des)erreur(s)
merci d'avance,
voir pièce jointe
 

Pièces jointes

  • testCLTS bab4.xlsx
    31.9 KB · Affichages: 66
Dernière édition:

Grand Chaman Excel

XLDnaute Impliqué
Re : erreur vba sur sheets.select et criteriarange

Bonjour bugg,

J'ai trouvé 3 problèmes, en commentaire dans le code :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh As Worksheet 'Déclare la variable sh qui représente le nom d'une feuille
   Dim DL As Integer 'Déclare une variable de type integer
   Application.ScreenUpdating = False
    If Not Application.Intersect(Target, Range("a4")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Application.EnableEvents = False 'On enlève les événements pour ne pas redéclencher la macro
       'événementielle lors du clearcontents qui suit
       
       'Problème 1 : Plage a changé, maintenant en G4
       Range("G4:K" & Range("G65000").End(xlUp).Row).ClearContents 'Efface le contenu du range
       Application.EnableEvents = True 'remet les événements
       
       
       'Problème 2 : Nom de la feuille a changé
       Set sh = Sheets("Histo") 'Set la variable sh
       DL = sh.Range("A65000").End(xlUp).Row 'Détermine la dernière ligne
       
       'Problème 3 : Pour que le filtre fonctionne, il faut que la cellule A3 dans
       'la feuille HistCLTS soit appelé comme la cellule A1 dans Histo, sinon
       'le CriteriaRange ne fonctionne pas.
       'Donc, appeler la cellule A3 Code Clts
       sh.Range("A1:E" & DL).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A3:A4"), CopyToRange:=Range("G4"), Unique:=False 'Set le filtre
   End If
    Set sh = Nothing 'Vide la slut de mémoire
   
  
End Sub

A+
 

bugg

XLDnaute Junior
Re : erreur vba sur sheets.select et criteriarange

Alors là, je me suis arrachée les cheveux,
c'est pas manque de l'avoir eu devant les yeux depuis des jours, mais je n'avais pas remarqué "Code Clts" ds A3
merci, merci beaucoup à vous tous, maintenant ça fonctionne!!!!

ci-joint le grrr "Code Clts" modifié

merci encore pour votre patience et toutes vos explications !
 

Pièces jointes

  • testCLTS bab6.xlsx
    32.5 KB · Affichages: 100

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 637
Membres
104 234
dernier inscrit
boulayy