Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Nommer Plage filtrée

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

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

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.
À+
 
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
 
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
 
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
À+
 
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
 
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
 
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
 
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
 
- 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

Discussions similaires

Réponses
4
Affichages
511
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…