filtre élaboré vba

  • Initiateur de la discussion albert
  • Date de début
A

albert

Guest
Bonjour à tous et à toutes, forumiens, forumiennes,

J’ai une base de données à filtrer.
Elle contient 2 fois 54 lignes à dissocier et à répartir dans deux feuilles correspondant à leurs codes respectifs : A et ABX.
Le résultat est parfait dans la feuille ABX, mais non dans la feuille A, où la série est recopiée une seconde fois sous la 1ère série… c’est pourtant le même code !!!
;)
Comment donc éviter de recopier 2 fois la série de données dans la feuille A ?

Sub filtre()
Sheets('BaseDonnées').Select
'-------------------------------------------------------------
For n = 1 To Cells(1, 10) '----Cells(1, 10)=Nombre de valeurs en cellule 'J1'
Sheets('BaseDonnées').Select
a = Cells(n + 1, 10) '--Nom de la valeur
'----------------------------Extraction des cours de la valeur
Sheets('BaseDonnées').Range('A1:H65000').AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets(a).Range('J1:J2'), _
CopyToRange:=Sheets(a).Range('A1:G65000'), Unique:=True
Next
End Sub

Merci d’avance pour toute réponse me donnant une piste
albert


[file name=FiltreElaboré_20050320132052.zip size=14760]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FiltreElaboré_20050320132052.zip[/file]
 

Pièces jointes

  • FiltreElaboré_20050320132052.zip
    14.4 KB · Affichages: 337
A

albert

Guest
File Attachment auurait échoué ? l’adresse renvoie sur 'Derniers messages Forum'
Je fais donc un nouvel essai
[file name=FiltreElaboré_20050320133215.zip size=14760]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FiltreElaboré_20050320133215.zip[/file]
 

Pièces jointes

  • FiltreElaboré_20050320133215.zip
    14.4 KB · Affichages: 226

JeanMarie

XLDnaute Barbatruc
Bonjour Albert

Ci-joint le code modifié.
Dans le nom de fichier ne met pas de caractères accentués, cela renvoi effectivement sur une page du forum, et non sur le fichier (pas pour moi, je suis sur mac).

Code:
Sub filtre()
   Application.ScreenUpdating = False

   With Sheets('BaseDonnées').Select
   
      For n = Cells(1, 10) To 1 Step -1 '----Cells(1, 10)=Nombre de valeurs en cellule 'J1'
         Sheets('BaseDonnées').Select
         a = Cells(n + 1, 10) '--Nom de la valeur
         
      'Détermine le critère du filtre, la plage du critère est K1:K2
      'La première ligne doit contenir le nom de l'entête de colonne
      Range('K2') = ''=' & a
      
      'Lancement du filtre
      .Range('A1:G65000').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range('K1:K2'), _
      CopyToRange:=.Range('M1'), Unique:=True
      
      'Copie les données filtrées
      fin = .Range('N65536').End(xlUp).Row
      Sheets(a).Range('A1:F' & fin).Value = Range('N1:S' & fin).Value
  
      'Suppression de données filtrées pour la copie
      .Range('M1:S65536').ClearContents
      Next
   End With
   Application.ScreenUpdating = True
End Sub

@+Jean-Marie [file name=FiltreElabore.zip size=17021]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FiltreElabore.zip[/file]
 

Pièces jointes

  • FiltreElabore.zip
    14 KB · Affichages: 516
  • FiltreElabore.zip
    14 KB · Affichages: 544
  • FiltreElabore.zip
    14 KB · Affichages: 557

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Albert, le Forum

Même problème pour ton second envoi de Fichier joint (qui, je le rappelle, doit être nommé sans caractères spéciaux, ni espace, et zippé avec moins de 50ko, en s'assurant que l'extension '.zip' est en minuscule)

Ici en l'occurrence c'est FiltreElaboré.zip qui pose problème.

Sinon sans le fichier difficile de te répondre

Bon Dimanche
@+Thierry
 
A

albert

Guest
Bonjour JeanMarie, @+Thierry ,le forum,

J’ai compris à présent le pb du renvoi ; sur l’ancien forum, il y avait un message qui nous indiquait qu’il ne faut pas mettre de caractères spéciaux

Merci JeanMarie, pour ta réponse rapide,
J’ai téléchargé ton fichier joint, pressé d’en voir le résultat, mais il y a un bogué sur le lancement du filtre

Range('A1:G65000').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range('K1:K2'), _
CopyToRange:=.Range('M1'), Unique:=True

Je n’arrive pas à réparer, parce que je ne comprends pas ce qui se passe en colonne K, dans la feuille BaseDonnées, j’ai A en J2 et =ABX en K2 (malgré les explications dans le code)

Sans vouloir abuser,peux-tu éclairer ma lanterne pour faire fonctionner ?

albert
 

ChTi160

XLDnaute Barbatruc
Salut le Fil
bonjour 'albert'
il te suffit de modifier la macro, je pense que Jean Marie a oublié de modifier après l'ajout de With Sheets('BaseDonnées')

il a mis With Sheets('BaseDonnées').Select
il faut
With Sheets('BaseDonnées')
.Select

Oupss et ça fonctionne impec merci Jean Marie

Message édité par: ChTi160, à: 20/03/2005 15:56
 

chappyporfaro

XLDnaute Junior
Re : filtre élaboré vba

Bonjour tout le monde ;)

Je trouve l'exemple très intéressant. Mais si dans la colonne Code j'aurais des données alphanumériques du type xyyxxxxx (x représentant les chiffres et y les caractères (ex: 5EX12345)) et que je voudrais utiliser le filtre présenté dans ce fil pour filtrer par les 3 premiers caractères du code comment devrais-je m'y prendre?

Question pour Jean-Marie. Pourquoi dans cette partie du code utilises-tu la référence "M1" alors que le tableau + les critères de filtre arrête à la colonne K?


Code:
 'Lancement du filtre
.Range('A1:G65000').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range('K1:K2'), _
CopyToRange:=.Range('M1'), Unique:=True
 
'Copie les données filtrées
fin = .Range('N65536').End(xlUp).Row
Sheets(a).Range('A1:F' & fin).Value = Range('N1:S' & fin).Value

Merci d'avance pour cet éclaircissement

Pierre
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
607

Statistiques des forums

Discussions
312 492
Messages
2 088 910
Membres
103 983
dernier inscrit
AlbertCouillard