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

  • Initiateur de la discussion Initiateur de la discussion jaba
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jaba

Guest
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

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+
 
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?
 
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

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
 
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+
 
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+
 
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
 
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:
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:
Re : Macro:rapatriement de données selon une condition

La macro marche parfaitement.. et en plus j'ai compris comment elle marche...

Merci beaucoup et bonne soirée.
 
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!
 
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 😉 )
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
376
Réponses
7
Affichages
676
Réponses
2
Affichages
168
Réponses
18
Affichages
514
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…