Macro VBA L'indice n'appartient pas à la sélection

avaya

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de créer une macro sur Excel mais étant novice en la matière, j'ai un problème que je n'arrive pas à régler.
J'ai mis en fichier joint une version simplifiée des feuilles de calcul concernées par la macro.

Objectif: Lorsqu'on sélectionne un cost center dans la fenêtre s'ouvrant au début de la macro, mettre dans Feuil3 -> Colonne Value les valeurs correspondant à chaque cost element (sous-catégorie) de ce cost center (catégorie).
Problème: lors de l'exécution de la macro, j'ai un message d'erreur m'indiquant que "l'indice n'appartient pas à la sélection". Une ligne de mon détail de la macro se met en jaune et je ne vois pas où est l'erreur dans cette ligne.

Je vous mets ci-dessous la macro en question, avec la ligne jaune (en gras ici).
J'espère que l'un ou l'une d'entre vous saura m'aider!
Merci d'avance.


Sub Macro1()
Dim CellCostCenter As Range
Dim CellCostElement As Range
'Donner la référence de la cellule du cost center
Set CellCostCenter = Application.InputBox("Cellule cost center", "Cost center", Type:=8)
Set CellCostElement = CellCostCenter.Offset(0, 2)
'Sélectionne tous les cost elements du cost center de référence
Sheets("Feuil15").Select
Dim PlageCostCenter0 As Range
Dim PlageCostElement As Range
Set PlageCostCenter0 = Nothing
With ActiveSheet.Range("A:A")
Set PlageCostCenter = .Find(what:=CellCostCenter.Value, LookIn:=x1Values)
If Not PlageCostCenter Is Nothing Then
FirstAddress = PlageCostCenter.Address
Set PlageCostCenter0 = PlageCostCenter.Offset(0, 3)
Do
Set PlageCostCenter = .FindNext(PlageCostCenter)
Set PlageCostCenter0 = Union(PlageCostCenter0, PlageCostCenter.Offset(0, 3))
Loop While Not PlageCostCenter Is Nothing And PlageCostCenter.Address <> FirstAddress
End If
End With
'Elargit la plage qui inclue maintenant les Values correspondantes à chaque cost element de lancienne sélection
Set PlageCostCenter0 = Union(PlageCostCenter0, PlageCostCenter0.Offset(0, 4))
'Recherche dans la plage la Value pour chaque cost element indiqué dans Feuil3
Do Until CellCostElement = ""
CellCostElement.Offset(0, 1).Value = WorksheetFunction.VLookup(CellCostElement.Value, PlageCostCenter0, 2, False)
Set CellCostElement = CellCostElement(1, 0)
Loop
Sheets("Feuil3").Select
CellCostCenter.Select
End Sub
 

Pièces jointes

  • Costcenters.xlsm
    17.2 KB · Affichages: 30
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Macro VBA L'indice n'appartient pas à la sélection

Bonjour avaya et bienvenue,

Pas ouvert ton fichier, mais vérifie déjà si le "x1Values", au bout de la ligne concernée, ne contiendrait pas un '1', en lieu et place de la lettre 'L' (ce devrait être XLVALUES!)

... il sera toujours temps de voir s'il y a un autre souci, une fois que tu auras modifié (et puis on verra aussi si tu repasses par ici!?) :)
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Macro VBA L'indice n'appartient pas à la sélection

SLt à Vous
Modeste a raison , quand on a l'habitude on voit : Met un L et pas un 1 ( XLVALUES) d'ailleurs si tu mets en Maj il remet auto le L en l
ça aussi c'est un indice pour la syntaxe avec les Maj / Min si t'es pas sûr et que ça se transforme c'est que c'est OK , il a reconnu le code VBA c'est aussi valable pour tes variables ; ex : si tu déclares Toto et que plus loin tu ecris ToTo il te remettra
Toto ( le T change)
A+
 

avaya

XLDnaute Nouveau
Re : Macro VBA L'indice n'appartient pas à la sélection

Merci à vous deux, vous m'avez sauvée!

C'est effectivement une erreur de débutant...

J'ai vu qu'il y avait d'autres petites erreurs, mais j'ai pu les modifier moi-même.
Je pars du principe que ça n'intéresse que moi mais comme on ne sait jamais, je mets ma macro corrigée en-dessous.

Encore merci et puis oui, si j'ai encore des problèmes et que je n'arrive vraiment pas à trouver la solution, je ferai appel à vous à nouveau!


Sub Macro1()
Dim CellCostCenter As Range
Dim CellCostElement As Range
'Donner la référence de la cellule du cost center
Set CellCostCenter = Application.InputBox("Cellule cost center", "Cost center", Type:=8)
Set CellCostElement = CellCostCenter.Offset(0, 2)
'Sélectionne tous les cost elements du cost center de référence
Sheets("Feuil15").Select
Dim PlageCostCenter0 As Range
Dim PlageCostElement As Range
Set PlageCostCenter0 = Nothing
With ActiveSheet.Range("A:A")
Set PlageCostCenter = .Find(what:=CellCostCenter.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not PlageCostCenter Is Nothing Then
FirstAddress = PlageCostCenter.Address
Set PlageCostCenter0 = PlageCostCenter.Offset(0, 3)
Do
Set PlageCostCenter = .FindNext(PlageCostCenter)
Set PlageCostCenter0 = Union(PlageCostCenter0, PlageCostCenter.Offset(0, 3))
Loop While Not PlageCostCenter Is Nothing And PlageCostCenter.Address <> FirstAddress
End If
End With
'Elargit la plage qui inclue maintenant les Values correspondantes à chaque cost element de lancienne sélection
Set PlageCostCenter0 = Union(PlageCostCenter0, PlageCostCenter0.Offset(0, 1), PlageCostCenter0.Offset(0, 2), PlageCostCenter0.Offset(0, 3), PlageCostCenter0.Offset(0, 4))
PlageCostCenter0.Select
'Recherche dans la plage la Value pour chaque cost element indiqué dans Feuil3
Do Until CellCostElement = ""
CellCostElement.Offset(0, 1).Value = WorksheetFunction.VLookup(CellCostElement.Value, PlageCostCenter0, 5, False)
Set CellCostElement = CellCostElement.Offset(1, 0)
Loop
Sheets("Feuil3").Select
CellCostCenter.Select
End Sub
 

Discussions similaires

Réponses
1
Affichages
122
Réponses
0
Affichages
83

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33