Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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?
 

job75

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

Re,

mais la macro rapatrie l'intégralité des données, elle ne prend pas en compte le critrèe satisfaisant



Ben voir fichier joint, je n'ai rien changé...

A+
 

Pièces jointes

  • test(1).xls
    25.5 KB · Affichages: 81
  • test(1).xls
    25.5 KB · Affichages: 85
  • test(1).xls
    25.5 KB · Affichages: 91

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

Salut Staple

Bien, mais j'avais mis aussi cette ligne, que tu as oubliée :

Code:
.Range("A:B").Clear

Elle est pourtant indispensable...

A+
 

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 , 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 )
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…