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

Microsoft 365 Macro: Intégrer un plage nommé dans une Formule excel

BonsoirToutLeMonde

XLDnaute Nouveau
Bonsoir,

Je souhaite créer une macro que je pourrais utiliser sur plein de document excel différent afin d'effectuer toujours la même tache. Or je suis coincé lors de l'intégration d'une plage variable dans la formule, du coup je me permet de solliciter votre aide.

Je vais vous détailler brièvement ou j'en suis dans la macro, je remplace tous les "." par des "," dans le document, puis je trie la plage de donnée (cellules non vide de la colonne B) et ensuite je souhaite appliquer une formule dans la colonne C en fonction des valeurs de la colonne B.
Dans la formule je dois récupérer des maximun et minimun de la colonne B (J'ai crée une plage nommé "NoteColonneB" (c'est toute les cellule non vide de la colonne B)), or je n'arrive pas à intégrer cette plage variable à ma formule.

VB:
Sub Harmonisation_des_notes()
' Harmonisation_des_notes Macro

'Remplacement "." par ","

Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

' Selection de la colonne B des cellules non vides

Range("B1", Range("B1").End(xlDown)).Select

'Remplacement "." par "," Bis

Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

'Tri de la colonne B influençant la colonne A

Range("B1").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add2 Key:=Range("B1", Range("B1").End(xlDown)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("B1", Range("B1").End(xlDown))
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
   
'Création d'une plage nommée

Dim NoteColonneB As Range
Set NoteColonneB = Range("B1", Range("B1").End(xlDown))

Range("B1", Range("B1").End(xlDown)).Select
ActiveWorkbook.Names.Add Name:="NoteColonneB", RefersToR1C1:="NoteColonneB"
ActiveWorkbook.Names("NoteColonneB").Comment = ""

'Création de la formule

Range("C1").Select
    ActiveCell.FormulaR1C1 = _
        "=((RC[-1]-(0.5*MIN(NoteColonneB)))*MAX(NoteColonneB))/(MAX(NoteColonneB)-(0.5*MIN(NoteColonneB)))"
       
End Sub

Je n'arrive pas à remplir le critère "RefersToR1C1:=" avec la plage "NoteColonneB"

Je ne sais pas si j'ai été très clair mais voici tout mon travail, j'espère que vous pourrez m'aider.

Merci d'avance, bien cordialement.

EDIT 1 : "RC[-1]" dans la formule équivaut à la cellule B1 de mon tableau
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

plus simplement tu peux faire :
VB:
Dim NoteColonneB As Range
Set NoteColonneB = Range("B1", Range("B1").End(xlDown))
NoteColonneB.Name = "NoteColonneB"

Remarque : évite les .Select inutiles (99%) consommateurs de temps.
eric
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…