Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2011, 23h05   #1
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Par défaut Filtre élaboré + Formule

Bonjour à tous,

J'aimerais filtré les données en colonne A, dans la colonne E et cela selon la formule :
en C1:C2
Code :
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Count = 1 Then
        [A1:A5000].AdvancedFilter Action:=xlFilterCopy, Criteriarange:=[C1:C2], CopyToRange:=[E1], Unique:=True
 
        [E16:E100].Sort Key1:=[E2]
    End If
End Sub
Mais je n'arrive toujours pas

Merci d'avance.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 09h54   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 207
Points : 7 207
Bonjour,

Pas sur d'avoir bien compris.

Le code ci dessous copie toutes les occurrences de la colonne A dans la E si celles ci commence par "T100"

Code :
1
2
3
4
5
6
7
8
9
10
11
Dim i As Long
 
'Efface le précédent filtrage
Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row).ClearContents
 
'Filtres les données
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
    If Left(Range("A" & i).Value, 4) = "T100" Then
        Range("E" & Range("E" & Rows.Count).End(xlUp).Row + 1).Value = Range("A" & i).Value
    End If
Next i
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 09h56   #3
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 693
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 693
Points : 1 445
Points : 1 445
Bonjour,

J’obtiens le résultat avec le filtre élaboré suivant :
Copier vers un autre emplacement
Plages : $A$1:$A$5000
Zone de critères : $C$1:$C$2
Copier dans : $E$1
Extraction sans doublon

En A1, C1 et E1 les en-têtes.
En C2 la formule
L’enregistreur de macro indique
Code :
1
2
Range("A1:A5000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "C1:C2"), CopyToRange:=Range("E1"), Unique:=True
Cordialement
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 08h03   #4
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Bonjour Jérôme, gFZT82

Je n'obtiens que les "T100-*", or j'aimerais obtenir tout les 4 caractères de la plage (A1:A5000)

Colonne A

T100-2
T101-12
T102-5
T100-14
T101-1
T101-11
T221-4

Colonne E

T100
T101
T102
T221

apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 10h50   #5
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 693
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 693
Points : 1 445
Points : 1 445
Bonjour,

Essaie avec ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Option Explicit
Sub Liste_SansDoublons()
Dim DerLig As Long
Dim Plage As Range
Dim Cell As Range
Dim Un As Collection
Dim i As Long
    With Worksheets("Feuil1") 'A adapter
        DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
        Set Plage = .Range("A2:A" & DerLig)
        Set Un = New Collection
        On Error Resume Next
        'Boucle sur la plage
        For Each Cell In Plage
            ' Ajoute le contenu de la cellule dans la collection
            If Cell <> "" Then Un.Add Left(Cell, 4), Left(CStr(Cell), 4)
        Next Cell
        On Error GoTo 0
        'Efface le précédent filtrage
        .Range("E2:E" & .Range("E" & .Rows.Count).End(xlUp).Row).ClearContents
        'Boucle sur les éléments de la collection.
        For i = 1 To Un.Count
            'Ecrit le résultat dans la colonne E
            .Range("E" & i + 1) = Un.Item(i)
        Next i
    End With
    Set Un = Nothing
    Set Plage = Nothing
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 14h02   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 207
Points : 7 207
Citation:
Je n'obtiens que les "T100-*", or j'aimerais obtenir tout les 4 caractères de la plage (A1:A5000)
Avec quel code??
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 00h25   #7
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Bonsoir gFZT82,

Citation:
Envoyé par gFZT82 Voir le message
Bonjour,
Essaie avec ce code
Ca marche très bien.

Mais, est-ce la Collection peut fonctionner pour deux colonnes A et B ?

Comme ce post ICI
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 00h32   #8
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Bonsoir Jérôme,

Citation:
Envoyé par jfontaine Voir le message
Avec quel code??
pour vos deux codes en premiere réponse
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 10h49   #9
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 693
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 693
Points : 1 445
Points : 1 445
Bonjour,

Citation:
Mais, est-ce la Collection peut fonctionner pour deux colonnes A et B ?
Indirectement, oui.
Si j’ai bien compris, tu souhaites associer le nom à la référence.
Pour cela, dans la collection, il suffit de mémoriser l’adresse de la cellule correspondant à la référence (et non plus le contenu de la cellule).
Connaissant cette adresse, il est facile d’aller rechercher le contenu de la cellule en colonne A (référence) et celui de la cellule adjacente (nom).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
Sub Liste_SansDoublons()
Dim DerLig As Long
Dim Plage As Range
Dim Cell As Range
Dim Un As Collection
Dim i As Long
    With Worksheets("Feuil1") 'A adapter
        DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
        Set Plage = .Range("A2:A" & DerLig)
        Set Un = New Collection
        On Error Resume Next
        'Boucle sur la plage
        For Each Cell In Plage
            If Cell <> "" Then
                'Si la cellule n'est pas vide, on mémorise l'adresse de la cellule
                Un.Add Cell.Address, Left(CStr(Cell), 4)
            End If
        Next Cell
        On Error GoTo 0
        'Efface le précédent filtrage
        .Range("E2:E" & .Range("E" & .Rows.Count).End(xlUp).Row).ClearContents
        'Boucle sur les éléments de la collection.
        For i = 1 To Un.Count
            'Ecrit la référence dans la colonne E
            .Range("E" & i + 1) = Left(Range(Un.Item(i)), 4)
            'Ecrit le nom dans la colonne F
            .Range("E" & i + 1).Offset(0, 1) = Range(Un.Item(i)).Offset(0, 1)
            Next i
    End With
    Set Un = Nothing
    Set Plage = Nothing
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 00h26   #10
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Salut gFZT82,

Ca marche.

Merci.

Cordialement.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h41.


 
 
 
 
Partenaires

Hébergement Web