utiliser des macro pour extraire des données d un tableau

  • Initiateur de la discussion Initiateur de la discussion andre_geneva
  • 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 !

A

andre_geneva

Guest
Bonjour,

je debute dans les macros sur excel 2007 et je cherche a extraire des données en automatique (macro) d'un tableau. Voici un exemple de tableau:

Mix Max Mox
201 pp aaa
201 ppp aaa
201 pp aa
201 ppp a
202 ppp aaaa
202 pp aaa
203 p aaaa
203 pppp aaa
203 ppp aaaaa
203 ppppp aaaaaa
203 p aaa
204 ppp aaaa
204 pp aa
204 pppp a
204 pp aaa
204 p aaa


En me basant sur la premiere colonne(Mix), je désire extraire les lignes du tableau pour lesquels il n'y a pas plus de 4 attribué au meme chiffre (201,202,203,204). Dans ce cas, je désire extraire les 4 lignes 201 et les 2 lignes 202. Pour les 203 et 204, il y a 5 lignes donc sa ne m interesse pas.
J'espere que c est clair car meme moi j ai du mal🙂.

Merci pour votre aide.
Salutations
 
Re : utiliser des macro pour extraire des données d un tableau

Bonjour,

Un code vite fait....

Avec ce code, on supposes que ton tableau n'a que 3 colonnes (à adapter)

Et on extrait ce qui t'intéresse dans les colonne I, J et K

Essaie, et reviens si tu n'arrives pas à l'adapter à ton fichier original...

Code:
Sub pas_plus_de_4()
Dim DerLig As Long
DerLig = [A65000].End(xlUp).Row
Range("A1:C" & DerLig).Name = "base"
Range("A2:A" & DerLig).Name = "Col_Mix"
Range("F2").FormulaR1C1 = "=COUNTIF(Col_Mix,RC1)<=4"
Range("I1:K1").Value = Range("A1:C1").Value
Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "F1:F2"), CopyToRange:=Range("I1:K1"), Unique:=False
Range("F2").Clear
End Sub

Bon courage
 
Re : utiliser des macro pour extraire des données d un tableau

Merci beaucoup BHBH c'est exactement ce qu'il me fallait...MANY THANKS
Dernière petite chose sans vouloir abuser de ton temps, mon tableau contient 10colonnes. Pourrais tu me dire juste les changements que je dois faire?

Salutations
 
Re : utiliser des macro pour extraire des données d un tableau

Re-,

Il faut redéfinir la zone nommée "base" :

Code:
Range("A1:C" & DerLig).Name = "base"

Comme ceci :

Code:
Range("A1:J" & DerLig).Name = "base"

Ensuite, mettre la formule qui sert au filtre élaboré dans une autre cellule, exemple dans la cellule M2 :

Code:
Range("M2").FormulaR1C1 = "=COUNTIF(Col_Mix,RC1)<=4"

Et enfin extraire vers un autre emplacement (on pourrait extraire sur une autre feuille, exemple sur la feuille2 :

Code:
With Sheets("Feuil2")
    Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "M1:M2"), CopyToRange:=.Range("A1"), Unique:=False
End With

Ce qui au final, te donnerait un code comme cela :

Code:
Sub pas_plus_de_4()
Dim DerLig As Long
Dim Fbase As Worksheet, Fdest As Worksheet
Set Fbase = Sheets("Feuil1") ' onglet contenant les données
Set Fdest = Sheets("Feuil2") ' onglet de destination
Fdest.Cells.Clear
With Fbase
    DerLig = .[A65000].End(xlUp).Row 'calcul de la dernière ligne
    .Range("A1:J" & DerLig).Name = "base" 'on nomme le tableau de données
    .Range("A2:A" & DerLig).Name = "Col_Mix" 'on nomme la première colonne
    .Range("M2").FormulaR1C1 = "=COUNTIF(Col_Mix,RC1)<=4"
        'on met la formule qui sert au filtre élaboré
    .Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
        "M1:M2"), CopyToRange:=Fdest.Range("A1"), Unique:=False
        'on effectue le filtre élaboré
    .Range("M2").Clear 'nettoyage...
End With
End Sub

Bonne journée
 
Dernière édition:
Re : utiliser des macro pour extraire des données d un tableau

Hello,

J'aurais encore 2 questions:
1ere:
Comment je fais pour couper au lieu de copier? Qu'est ce que je dois changer dans ce code?
Sub pas_plus_de_4()
Dim DerLig As Long
Dim Fbase As Worksheet, Fdest As Worksheet
Set Fbase = Sheets("Feuil1") ' onglet contenant les données
Set Fdest = Sheets("Feuil2") ' onglet de destination
Fdest.Cells.Clear
With Fbase
DerLig = .[A65000].End(xlUp).Row 'calcul de la dernière ligne
.Range("A1:J" & DerLig).Name = "base" 'on nomme le tableau de données
.Range("A2:A" & DerLig).Name = "Col_Mix" 'on nomme la première colonne
.Range("M2").FormulaR1C1 = "=COUNTIF(Col_Mix,RC1)<=4"
'on met la formule qui sert au filtre élaboré
.Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
"M1:M2"), CopyToRange:=Fdest.Range("A1"), Unique:=False
'on effectue le filtre élaboré
.Range("M2").Clear 'nettoyage...
End With
End Sub

2eme question:
dans mon tableau d origine j'ai aussi des lignes vides que je desire supprimer, y a t il un autre code que celui la:
For Each cellule0 In Range("A1: A650")
If cellule0.Value = "" Then
cellule0.Select
ActiveCell.EntireRow.Delete
End If
Next
Le probleme avec celui la est que mes extractions ne vont pas tout le temps jusqu a A650, c est variable et s'il n y a que 300 lignes par exemple, la macro mets trop de temps a tourner?

Merci pour votre aide.
salutations
 
- 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

S
Réponses
3
Affichages
915
Retour