Macro:rapatriement de données selon une condition

jaba

XLDnaute Junior
Bonjour,

Je suis débutante en vba et je cherche rapatrier des données d'un onglet à un autre selon une condition ( différent de "Satisfaisant")

ci dessous un fichier qui explique ce que je veux faire.

Merci d'avance!
 

Pièces jointes

  • test 0.xls
    20 KB · Affichages: 79
  • test 0.xls
    20 KB · Affichages: 88
  • test 0.xls
    20 KB · Affichages: 83

job75

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Bonsoir jaba,

Cette macro utilise le filtre automatique :

Code:
Sub Macro1()
Dim plage As Range
With Sheets("Données")
  .AutoFilterMode = False
  Set plage = .Range("A1:C" & .Range("A65536").End(xlUp).Row)
  plage.AutoFilter Field:=3, Criteria1:="<>Satisfaisant"
  Set plage = Intersect(.Range("A:B"), plage.SpecialCells(xlVisible))
  With Sheets("Result")
    .Range("A:B").Clear
    plage.Copy .Range("A1")
  End With
  plage.AutoFilter
End With
End Sub

A+
 

jaba

XLDnaute Junior
Re : Macro:rapatriement de données selon une condition

Merci mais la macro rapatrie l'intégralité des données, elle ne prend pas en compte le critrèe satisfaisant. Y a til une autre modification à faire?
que signifie plage.AutoFilter Field:=3?
 

Staple1600

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re


la macro de job75 ( salut ;) ) fonctionne parfaitement

Voici mon interprétation de son code (histoire de raccourcir un peu ;) )

Code:
Sub Macro1()
Dim plage As Range
With Sheets("Données")
  .AutoFilterMode = False
  Set plage = .Range([A1], .[C65536].End(xlUp))
    plage.AutoFilter 3, "<>Satisfaisant"
  Set plage = _
        Intersect(.Range("A:B"), plage.SpecialCells(12))
    plage.Copy Sheets("Result").[A1]
    plage.AutoFilter
End With
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re Staple,

La copie efface les données non ?

Uniquement sur la zone de recopie.

Si auparavant une plage plus grande avait été copiée, elle ne sera pas intégralement effacée, obviously ;)

Et puis Staple, tu utilises la dernière cellule de la colonne C pour déterminer la zone filtrée : à mon avis c'est une erreur, car on peut avoir une date et un code à la fin sans rien en colonne C => ce n'est pas Satisfaisant !

A+
 

Staple1600

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re

Job75
Je suis tes recommandations sur le champ ;)

Code:
Sub Macro1_As_Job75_Said()
Dim plage As Range
Sheets("Result").Columns("A:B").Clear
With Sheets("Données")
  .AutoFilterMode = False
  Set plage = .[A1].Resize(.[C65536].End(xlUp).Row, 3)
    plage.AutoFilter 3, "<>Satisfaisant"
  Set plage = _
        Intersect(.Range("A:B"), plage.SpecialCells(12))
    plage.Copy Sheets("Result").[A1]
    plage.AutoFilter
End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re

Je viens de m'apercevoir que jaba débutait en VBA
donc voici la même macro mais avec des commentaires explicatifs

Code:
Sub Macro1_commentee()
[COLOR=SeaGreen]'Déclarations des variables[/COLOR]
Dim a As Worksheet, b As Worksheet
Dim plage As Range
[COLOR=SeaGreen]'définition des variables, ici les feuilles[/COLOR]
Set a = Sheets("Données"): Set b = Sheets("Result")
[COLOR=SeaGreen]'on efface les colonnes A et B de la feuille Result[/COLOR]
b.Columns("A:B").Clear
[COLOR=SeaGreen]'on applique le filtre sur la feuille Données[/COLOR]
With a
  .AutoFilterMode = False
  Set plage = .[A1].Resize(.[A65536].End(xlUp).Row, 3)
    plage.AutoFilter 3, "<>Satisfaisant"
    [COLOR=SeaGreen]'On définit la plage de cellules à copier[/COLOR]
  Set plage = _
        Intersect(.Range("A:B"), plage.SpecialCells(12))
       [COLOR=SeaGreen]'on copie le résultat du filtre en feuille Result[/COLOR]
    plage.Copy b.[A1]
   [COLOR=SeaGreen] 'On ôte le filtre automatique sur la feuille Données[/COLOR]
    plage.AutoFilter
End With
[COLOR=SeaGreen]'On "vide" les variables[/COLOR]
Set a = Nothing
Set b = Nothing
Set plage = Nothing
End Sub
EDITION
Désolé Job75 :eek: , ce sont les joies du copier/coller
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re,

Bon, je pinaille :

Code:
Sub Macro1_As_Job75_[COLOR="Red"]Really[/COLOR]_Said()
Dim plage As Range
Sheets("Result").Columns("A:B").Clear
With Sheets("Données")
  .AutoFilterMode = False
  Set plage = .[A1].Resize(.[[COLOR="red"]A65536[/COLOR]].End(xlUp).Row, 3)
    plage.AutoFilter 3, "<>Satisfaisant"
  Set plage = _
        Intersect(.Range("A:B"), plage.SpecialCells(12))
    plage.Copy Sheets("Result").[A1]
    plage.AutoFilter
End With
End Sub

Edit : salut néné06, sur un très grand tableau, une boucle prend beaucoup de temps, il faut au moins utiliser un tableau auxiliaire.

A+
 
Dernière édition:

jaba

XLDnaute Junior
Re : Macro:rapatriement de données selon une condition

Juste une dernière question...
Si je veux filter sur deux questions dans la macros,comment faut il l'écrir?

plage.AutoFilter 3, "<>Satisfaisant" et différent de "X".

Y a til une limite au nombre de conditions?

Merci d'avance!
 

Staple1600

XLDnaute Barbatruc
Re : Macro:rapatriement de données selon une condition

Re



Simplement comme ceci

Code:
plage.AutoFilter 3, "<>Satisfaisant", xlAnd, "<>X"

Pour plus de conditions, on peut utiliser le filtre élaboré ...
(mais ceci est une autre histoire ;) )
 

Statistiques des forums

Discussions
312 251
Messages
2 086 628
Membres
103 272
dernier inscrit
TOUFIK82