Nommer Plage filtrée

decid

XLDnaute Nouveau
Comment nommer automatiquement la plage de zones résultant d'un critère
dans Filtre 1 ?
Une fois nommée la plage me permet d'affecter une appelation en fonction d'une
donnée filtrée dans une colonne.

Plus explicite dans l'exemple

Decid
Yves PETIT-PIERRE
 

Pièces jointes

  • NomSelectionAutofilter.xlsm
    32.3 KB · Affichages: 131

Dranreb

XLDnaute Barbatruc
Re : Nommer Plage filtrée

Bonjour.
Feuil1.AutoFilter.Range
vous renvoit déjà une plage couvrant exactement un filtre dans une feuille. Et:
Feuil1.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
devrait vous en renvoyer la partie filtrée.
À+
 

decid

XLDnaute Nouveau
Re : Nommer Plage filtrée

Bonjour,
Merci de votre participation mais :
La macro

'Nommer PlageGE et affectation intitulé mois 1
Private Sub AffectGEM1()
Application.ScreenUpdating = False
Range(Range("A5"), Range("A7").End(xlDown).Offset(0, 4)).Select
Selection.AutoFilter
Dim c As Range
ActiveSheet.Range(Range("A5"), Range("A5").End(xlDown)).AutoFilter Field:=1, Criteria1:="GE"
ActiveWorkbook.Names.Add Name:="PlageGE", _
RefersTo:="=TraitementBalance!" & TraitementBalance.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address
For Each c In Range("PlageGE")
' Structure
If Mid(c.Value, 1, 4) = "6061" Then
c.Select
Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
ActiveCell.FormulaR1C1 = "Pétrole"
End If
If Mid(c.Value, 1, 4) = "6132" Then
c.Select
Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
ActiveCell.FormulaR1C1 = "Location"
End If
Next
End Sub
et
ActiveWorkbook.Names.Add Name:="PlageGE", _
RefersTo:="=TraitementBalance!" & TraitementBalance.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address
ne fonctionne pas (voir macro fichier exemple)
Decid
 

tototiti2008

XLDnaute Barbatruc
Re : Nommer Plage filtrée

Bonjour decid, Bonjour Dranreb,

Je ne crois pas que l'on puisse donner de noms à une plage discontinue si elle dépasse un certain nombre de zones discontinues (je dirais 30 mais je ne suis pas sûr)
Il faudrait que tu nous expliques pourquoi tu veux absolument donner un nom à cette plage
Tu peux boucler sur les cellules sans nommer la plage

si j'ai compris

Code:
Private Sub AffectGEM1()
Application.ScreenUpdating = False
    Range(Range("A5"), Range("A7").End(xlDown).Offset(0, 4)).Select
    Selection.AutoFilter
Dim c As Range
ActiveSheet.Range("A5").AutoFilter Field:=1, Criteria1:="GE"
 
 For Each c In Application.Intersect(Columns("B"), Sheets("TraitementBalance").AutoFilter.Range.SpecialCells(xlCellTypeVisible))
   ' Structure
          If Mid(c.Value, 1, 4) = "6061" Then
           c.Select
           Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
           ActiveCell.FormulaR1C1 = "Pétrole"
       End If
           If Mid(c.Value, 1, 4) = "6132" Then
           c.Select
           Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
           ActiveCell.FormulaR1C1 = "Location"
           End If
Next
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Nommer Plage filtrée

Comme ça, ça à l'air de marcher:
VB:
Private Sub AffectGEM1()
Dim PlgFlt As Range, Lig As Range
Application.ScreenUpdating = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.Cells.AutoFilter
Set PlgFlt = ActiveSheet.Range("A5:E" & ActiveSheet.Range("A7").End(xlDown).Row)
PlgFlt.AutoFilter Field:=1, Criteria1:="GE"
Set PlgFlt = PlgFlt.SpecialCells(xlCellTypeVisible)
For Each Lig In PlgFlt.Rows
   Select Case Left$(Lig.Columns(2).Value, 4)
      Case "6061": Lig.Columns(5).Value = "Pétrole"
      Case "6132": Lig.Columns(5).Value = "Location"
      Case Else:   Lig.Columns(5).Value = "???" ' Prévoir le cas non ?
      End Select
   Next Lig
End Sub
À+
 

decid

XLDnaute Nouveau
Re : Nommer Plage filtrée

Bonjour tototiti2008, Bonjour Dranreb,

tototiti2008 : tu as parfaitement compris, j'étais parti sur une mauvaise piste !
Objectif est d'extraire dans la colonne affectation des intitulés qui possedant un même compte comptable, n'ont pas les mêmes appelations en fonction de la section analytique.

en un mot en filtrant les appelations, je peux obtenir les composantes des lignes du Compte de résultat.

J'ai adapté la réponse pour l'intégrer dans mon apllication de Report.

Pour info : Decid - Controle de gestion | Business plan | Budget | Report CR | Diagnostic | Frais de Mission | Kit Organise - Le prt classer

MERCI A TOUS ET BONNE JOURNEE
Yves PETIT-PIERRE
 

decid

XLDnaute Nouveau
Re : Nommer Plage filtrée

Merci Dranred,

J'ai retenu et adpaté la solution de tototiti2008 car les recherches se font également en fonction du nombre de caracteres des comptes comptables ce qui permet des regroupements.
Voila la solution proposée par tototiti2008 qui me satisfait et que j'ai adaptée :
Objectif est d'extraire dans la colonne affectation des intitulés qui possedant un même compte comptable, n'ont pas les mêmes appelations en fonction de la section analytique.

en un mot en filtrant les appelations, je peux obtenir les composantes des lignes du Compte de résultat.

J'ai adapté la réponse pour l'intégrer dans mon application de Report.

Pour info : Decid

MERCI A TOUS ET BONNE JOURNEE
Yves PETIT-PIERRE
 

decid

XLDnaute Nouveau
Re : Nommer Plage filtrée

Re bonjour tototiti2008,
Encore merci pour l'aide
pour améliorer le systeme et ne pas recopier 12 fois les 120 "If Mid(....), j'amerais pouvoir passer ("B") en variable de façon réduire de beaucoup la taille du code.
Merci d'avance - Decid


Private Sub AffectGEM1()
Application.ScreenUpdating = False
Range(Range("A5"), Range("A7").End(xlDown).Offset(0, 4)).Select
Selection.AutoFilter
Dim c As Range
ActiveSheet.Range("A5").AutoFilter Field:=1, Criteria1:="GE"

For Each c In Application.Intersect(Columns("B"), Sheets("TraitementBalance").AutoFilter.Range.SpecialCells(xlCellTypeVisible))
' Structure
If Mid(c.Value, 1, 4) = "6061" Then
c.Select
Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
ActiveCell.FormulaR1C1 = "Pétrole"
End If
If Mid(c.Value, 1, 4) = "6132" Then
c.Select
Range(ActiveCell.Offset(0, 4), ActiveCell.Offset(0, 7)).Select
ActiveCell.FormulaR1C1 = "Location"
End If
Next
End Sub
 

decid

XLDnaute Nouveau
Re : Nommer Plage filtrée

Bonjour,
Les bretons sont réactifs (Rennes et Nantes on été sur mon site !)
J'ai trouvé la solution :
dans la macro :
ColCptMois = Range("B1").Column
Range("NumColCpt") = ColCptMois
me copie le N° de la colonne souhaitée dans l'application
Puis :

For Each c In Application.Intersect(Columns(Range("NumColCpt")), Sheets("TraitementBalance").AutoFilter.Range.SpecialCells(xlCellTypeVisible))

et la tout fonctionne
Bon dimanche à tous
Decid
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 893
Membres
103 982
dernier inscrit
krakencolas