Selection des cellules triées par filtre auto

  • Initiateur de la discussion Chris
  • Date de début
C

Chris

Guest
Salut le forum,



Depuis un petit moment je bidouille dans les macro mais la je bloque.

Comment faire pour selectionner une plage de cellules trié par un filtre automatique et nomé cette plage???

Voici le code que j'ai mais il ne fonctionne pas, si qqun à une idée ...

Private Sub CommandButton1_Click()
Dim opt As String

Dim i As Variant
For i = 1 To 21
opt = UserForm1.Controls('TextBox' & i).Text
If UserForm1.Controls('TextBox' & i).Text = '' Then
Exit Sub
Else
Selection.AutoFilter
Selection.AutoFilter Field:=4, Criteria1:=opt, Operator:=xlAnd
ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Select
ActiveWorkbook.Names.Add Name:=opt
Exit Sub
End If
Next i
End Sub


Merci d'avance....

@+ Chris
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Chris, le forum

un petit exemple vaut mieux qu'un long discours

ActiveWorkbook.Names.Add Name:='plage2', RefersToR1C1:='=' & _
ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address(ReferenceStyle:=xlR1C1, RowAbsolute:=True, _
ColumnAbsolute:=True, external:=True)

Cordialement, A+
 

MichelXld

XLDnaute Barbatruc
rebonsoir Yeahou

oui j'en convient : c'est l'histoire du lievre et de la tortue qui se réécrit ...;o)


lapin4.gif



bonne soiree
MichelXld
 
C

Chris

Guest
Re.


Dans l'exemple que vous m'avez donné (qui fonctionne tres bien) je ne sais pas comment faire pour controler les colones. (l'aide ne dis pas grand chose la dessus).

Pour mon application j'aurais besoin de selectionner uniquement les colones B et C



Merci d'avance.



@+

Chris
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

Et voili

ActiveWorkbook.Names.Add Name:='plage2', RefersToR1C1:='=' & _
ActiveSheet.AutoFilter.Range.Columns('B:C').SpecialCells(xlCellTypeVisible).Address(ReferenceStyle:=xlR1C1, RowAbsolute:=True, _
ColumnAbsolute:=True, external:=True)
B)
A+
 
C

Chris

Guest
Salut à tous,


Je me mefie de bien reutiliser le meme fil pour pas faire de doublons.


Ma question reste toujours sur la selection de la plage pour nommer une liste.

Comment faire pour nommer une liste dont les cellules sont comprise entre les colonnes A et C et la premiere ligne non vide?..


Malgré tous vos exemples je n'ai pas compris comment fonctione le R1C



Merci.

Chirs
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Chris

il s'agit simplement d'une adresse de plage
essaie le prog suivant pour comprendre, il te renvoie un message qui est l'adresse de plage affectée à ton name.
Ne pas oublier que l'instruction name a une syntaxe pour ses arguments. tu peux modifier pour voir les valeurs renvoyées, par exemple supprime le external.

A+

msgbox ActiveSheet.AutoFilter.Range.Columns('B:C').SpecialCells(xlCellTypeVisible).Address(ReferenceStyle :=xlR1C1, RowAbsolute:=True, _
ColumnAbsolute:=True, external:=True)
 
P

ptit.homm

Guest
Bonjour,
je suis tres tres loin d'etre un expert en excel et surtt en vba, c'est pourquoi je ne comprend pas trop vos sources.
J'aimerai récupérer apres un Autofilter les lignes qui restent dans mon cas normalement apres le filtrage il ne doit me rester qu'une ligne. Mais je vois pas comment faire pour réussir a recupérer la ligne restante pour la stocker chaque elements de la ligne dans des variables. Car pour l'instant dans mon code je n'utilise pas Autofilter mais je fais des une boucle ce qui fait que le tps de traitement est long.
Il parait qu'avec un Autofilter les tps sont réduit, le problème c'est que je comprend rien ca son fonctionnement.

Je souhaite retrouver une ligne de mon document grace a la connaissance de 2 parametres ( soit la valeur du contenu de 2 colonnes), ce qui me permet d'avoir une ligne unique, mais comment faire pour recuperer la ligne selectionné.
Je me doute que pour certain ca doit être tres élémentaire pour eux mais moi je suis un peu nul.
Merci d'avance.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re bonjour

'entre les colonnes A et C et la
premiere ligne non vide?' ????? :huh:


'la ligne restante pour la stocker chaque elements de la ligne'

tu demandais à récupérer des colonnes ????? :S

la on tourne en rond, mets un fichier exemple et explique clairement ce que tu désires, si tu veux récupérer des valeurs dans un code, mets l'extrait concerné

A+
 
P

ptit.homm

Guest
ok
Je joint mon code qui permet de faire ma recherche et recupérer les information qu'il me faut mais cela avec des boucles, et ca marche. Mais j'aimerai utiliser Autofilter pour gagner du temps de recherche.

Sub prg(IntID As Integer, IntNumber As Integer)

'déclaration des variables
Dim docexcel As Excel.Workbook

Dim xlSht
Dim NumLigne As Integer

Dim IDlu As Integer

Dim Numlu As Integer

Dim errorcode As String

Dim severity As String

Dim intitule As String

Dim cause As String

Dim remedes As String


NumLigne = 2

'le prog va aller chercher les informations du défaut dans le fichierexcel:
Set
docexcel = CreateObject('Excel.Application')
docexcel.Visible = False

docexcel.Workbooks.Open 'C:docexcel.xls'
Set
xlSht = docexcel.ActiveSheet

'tant que il y a des données ou que le code n'a pas été trouvé
Do

IDlu = xlSht.Application.Cells(NumLigne, 1)

'si le code lu est le même que celui saisi
If
IDlu = IntID Then


Do
' on parcourt tt le erreur qui on l'ID de notre erreur
Numlu = xlSht.Application.Cells(NumLigne, 3)

If
Numlu = IntNumber Then

errorcode = xlSht.Cells(NumLigne, 2)
severity = xlSht.Cells(NumLigne, 4)
intitule = xlSht.Cells(NumLigne, 5)
cause = xlSht.Cells(NumLigne, 6)
remedes = xlSht.Cells(NumLigne, 7)
Exit Do
' l'erreur a été trouvé on peut sortir de la boucle
End If


NumLigne = NumLigne + 1
Loop While
IDlu = IntID
Exit Do
'sort de la boucle si le code a été trouvé ou que l'erreur n'est pas repertoriée
End If


NumLigne = NumLigne + 1
Loop While
(xlSht.Application.Cells(NumLigne, 1) <> '')

'ferme le document excel
docexcel.Application.Quit

End Sub
----------------------------------------------------------------------------


sinon j'ai essayé de faire un essaie plus simple en vba avec autofilter est ca donne ca :


Worksheets('7d8041error').Range('A1').AutoFilter field:=1, Criteria1:='20'
Worksheets('7d8041error').Range('A1').AutoFilter field:=3, Criteria1:='15'
ActiveWorkbook.Names.Add Name:='resultat', RefersToR1C1:='=' & _
ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address(ReferenceStyle:=xlR1C1, RowAbsolute:=True, _
ColumnAbsolute:=True, external:=True)


A l'affichage j'obtiens bien une seule ligne et quand je selection dans le menu déroulant 'resultat' j'ai bien a selection mais comment fait t'ont pour recupérer la ligne selectionée, genre avoir le numéro de ligne serait suffisant mais faut encore trouver la méthode qui recupére ce numéro de ligne.

Je suis désolé si mes explications ne sont pas tres clair, mais je fais du mieux que je peux.
Merci d'avance.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re bonjour

un truc du genre

MsgBox Range(ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeLastCell).Address).Row

devrait convenir, cela renvoie la ligne de la derniére cellule du filtre, et comme tu n'en a qu'une!

B)

A+
 

Discussions similaires

Réponses
2
Affichages
168

Statistiques des forums

Discussions
312 980
Messages
2 094 128
Membres
105 941
dernier inscrit
antho_qh