Référence INDIRECT

Bonsoir,

J'ai un souci sur un tableau Excel, si quelqu'un peut m'aider...

J'essaie de m'expliquer ! :

Dans une feuille, j'ai toutes les références "articles". Chaque article, à plusieurs dimensions.

Toutes les plages sont nommées.

Dans une seconde page, j'ai mon tableau principal.

Via une macro, dans la cellule C8, s'inscrit le domaine de mon article, en C9 cela me donne une liste selon le domaine choisi.

Parallèlement à ces choix, via des formules, des références se génèrent en A10.

En C10 j'essaie alors d'obtenir la liste des dimensions pour l'article en C9 en fonction de la référence réalisé en A10...

J'ai pour cela utilisé la fonction INDIRECT, ce qui me donne le code :

With Selection.Validation

.Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:="=INDIRECT(A10)"

.IgnoreBlank = True

.InCellDropdown = True

.InputTitle = ""

.ErrorTitle = ""

.InputMessage = ""

.ErrorMessage = ""

.ShowInput = True

.ShowError = True

End With

Tout fonctionne bien, quand j'insère ma macro en C8. Mais il me faut pouvoir insérer ce groupe de lignes, n'importe où dans ma colonne C... et c'est la que cela bug, si j'insère ma macro dans une autre ligne que C8... puisqu'il cherche la référence en A10.

Si j'insère ma macro en C15 par exemple, il faudrait que la référence soit recherchée en C17, et etc.

J'espère que je suis claire !! SVP ! Si vous avez une solution.

Merci

Bonsoir, n'hésitez pas à envoyer un fichier, surtout pour des problèmes de références de cellules ! Et c'est écrit dans l'article 6 du "bien utiliser le forum" ! En plus INDIRECT ça me connaît ! Enfin presque, je commence tout juste à en comprendre le fonctionnement...

vbMBHB

Bonsoir,

Merci de votre retour.

Ci joint le fichier... Merci

8copie-16-12-17.xlsm (310.17 Ko)

Sur votre fichier vous devriez grâce à l'insertion de forme mettre des commentaires de ce qu'il y a , de ce qu'il devrait avoir...Car je ne trouve pas de donnée en C8 ni en A10...

vbMBHB

16copie-16-12-17.xlsm (310.68 Ko)

Décidément je dois être fatigué... je ne comprend pas mieux maintenant...

vbMBHB

lol !

Je pense que, je m'explique mal ! et je n'ai surement pas fait au plus simple...

Je vous propose pour visualiser :

Dans mon fichier, supprimez les lignes 8 à 10. Mettez vous en C8 et lancez la macro AERAULIQ_BIBLE,

vous allez avoir en C10 une liste déroulante, qui une fois fait un choix, va générer les références en N10 et en A10.

De là une autre liste déroulante apparaît en C11, ce qui va donner, prix, quantité...

Merci de votre patience !

Erreur, supprimez les lignes 8 à 12, vous l'aurez compris !!

Ben voilà, c'est plus clair ! Voici la formule :

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:="=INDIRECT(""" & ActiveCell.Offset(-1, -2).Range("A1").Address & """)"

vbMBHB

Effectivement, je n'ai plus de bug, mais...

cela me répète en C11 (dans le cas où la macro est lancée en C8) la référence créée en A10.

et en fait, je voudrais que cela affiche la liste déroulante nommée comme la référence en A10 (après le choix en C10)...

Après vous avez au moins la structure de la formule, ne comprenant pas forcément le déroulement du code vous allez pouvoir l'adapter à votre besoin, non ?

vbMBHB

OK, essayez ceci :

        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=INDIRECT(" & ActiveCell.Offset(-1, -2).Range("A1").Address & ")"

vbMBHB

Et puis un truc "en plus" pour être plus propre : mettez ceci Application.ScreenUpdating = False au début de votre code... Et voyez la différence !

vbMBHB

Oh GÉNIAL !!!

C'est exactement ce que je voulais !! 10000000...mercis !!!

Je vais essayer de comprendre le comment du pourquoi, pour apprendre.

Vous n'imaginez pas l'épine que vous me retirez du pied !!!

le pourquoi du comment ? Si vous écrivez INDIRECT(A10) alors vous écrivez A10 en "dur" et il sera répété, et c'était le cas ! il faut donc "sortir" le A10 de l'écriture en dur pour le passer "en variable" sous VBA c'est pourquoi : INDIRECT( " & variable & " ), il reste de plus qu'à comprendre le code pour se rendre compte que le A10 était en fait la cellule active

C8 pour votre premier lancement de la macro qui avec ActiveCell.Offset(1, 0).Range("A1").Select devient

C9 qui avec ActiveCell.Offset(0, -2).Range("A1").Select devient

A9 qui avec ActiveCell.Offset(1, 2).Range("A1").Select devient

C10 qui avec ActiveCell.Offset(0, 11).Range("A1").Select devient

N10 qui avec ActiveCell.Offset(0, -13).Range("A1").Select devient

A10 qui avec ActiveCell.Offset(1, 2).Range("A1").Select devient

C11 qui permet de dire que A10 par rapport à C11 est en fait C11 -1 ligne et -2 colonne avec ceci ActiveCell.Offset(-1, -2).Range("A1").Address, on a donc bien A10 recherché !

Du coup le A10 du Indirect devient variable en fonction de la première cellule sélectionnée en colonne C !

Voilà donc le pourquoi du comment !

vbMBHB

C'est super 😊 c'est ce que je n'arrivais pas à "traduire".

Merci beaucoup.

Merci

vbMBHB

Nota : je scrolle ici aussi...

Rechercher des sujets similaires à "reference indirect"