Menu

Incapable d'utiliser cellule nommée

-
Bonjour,
J'essaie désespérément depuis 5 jours de faire fonctionner un code en utilisant des cellules nommées. Je vous explique de la façon la plus claire possible :

En pensant au jeu de la "Roulette".
J'ai fait une feuille Excel, dans laquelle j'essaie de faire le décompte du nombre de fois que chacun des numéros est sorti.

J'ai donc nommé 37 cellules, en utilisant le nom "Count_0", "Count_1", "Count_2", et ainsi de suite, pour les 37 numéros. Les numéros sortis sont inscrit dans une colonne, et la colonne d'à côté contient la fonction "num_add(CelluleDesSorties*)" que j'ai créé. Donc, lorsque je copie cette cellule vers le bas, le "CelluleDesSorties" s'incrémente pour faire référence au chiffre de sortie situé juste à côté.

Maintenant, la partie qui pose problème, le code. Voici comment j'ai programmé cette fonction :

Public Function num_add(a As Variant) As Variant
If a >= 0 And a <= 36 Then
Feuil1.Range("Count_" & a).Value = Feuil1.Range("Count_" & a).Value + 1
num_add = "Fonctionne"
Else
MsgBox "Le chiffre n'est pas entre 0 et 36.", vbOKOnly, "Erreur d'entrée"
num_add = "Ne fonctionne pas"
End If

End Function


Verbalement, j'essaie d'utiliser la portion du nom "Count_" et de la concaténer avec la valeur de "a", ce qui changerait la valeur en +1 de la cellule nommée. Mais cela ne fonctionne pas. J'obtiens dans la cellule où est placé ce code un retour d'erreur
#valeur!
, et l'incrémentation de la valeur de la cellule reste à "zéro". Ce qui est fachant, c'est que si je mets la ligne "Feuil1.Range etc" en commentaire, la cellule retourne bien le mot "Fonctionne".

Est-ce que quelqu'un peut m'expliquer où se trouve mon erreur, ou comment je pourrais remédier à ce problème ?

Merci à vous!
Cordialement,
Denis
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
10623
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
22 mai 2019
1285
1
Merci
Re

Ta syntaxe est bonne mais pas utilisable dans une fonction perso, il faut l'utiliser par le biais d’une macro
exemple :
https://mon-partage.fr/f/g27qQlqJ/
Pour l'exemple je fais lancer la macro par un bouton mais elle pourrait aussi être lancée à partir d'un événement comme l'entrée d'une valeur dans une cellule

Cdlmnt
Via

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 39398 internautes nous ont dit merci ce mois-ci

Merci beaucoup Via !
Je regarderai ce fichier demain et reviendrai pour commenter mon avancée.

Cordialement,
Denis
Merci Via pour ce fichier instructif.
J'aime bien la façon que la programmation VBA fonctionne, mais le fait qu'une fonction ne puisse servir qu'à un retour dans une cellule unique (là où la fonction est invoquée dans une cellule), me laisse perplexe...
...car ça m'apparaît tellement pratique de pouvoir passer comme paramètres des noms de cellules (ou même un Range) à une fonction...

Donc, j'imagine que mon problème maintenant se situe à comprendre comment pourrait-on passer de multiples paramètres à une Macro, de la même manière que je suis en train d'essayer de le faire avec une fonction(?).

Comment peut-on lancer une macro à partir de l'entrée d'une donnée dans une cellule? (Est-ce compliqué?) Et peut-on passer plusieurs paramètres à une macro (telle les noms de diverses cellules?).

Merci beaucoup pour toute cette aide. Il semble que ce soient des choses que j'ignore même en ayant lu un cartable d'Excel, et mon cerveau doit faire le tour de cette restriction* (macro vs. fonction) pour passer de "Débutant" à "intermédiaire". :)

Encore merci !
Cordialement,
Denis
Commenter la réponse de via55
Messages postés
10623
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
22 mai 2019
1285
0
Merci
Bonjour Denis

Pour appeler une feuille ce serait plutôt
Sheets("Feuil1").Range("Count_" & a).Value

Cdlmnt
Via
Bonjour, j'ai essayé avec le code suivant :
Sheets("Feuil1").Range("Count_0").Value = Sheets("Feuil1").Range("Count_0").Value + 1

Malheureusement, ça ne fonctionne pas d'avantage. J'obtiens encore l'erreur
#valeur!
, et ce même si je simplifie le problème en inscrivant directement le nom de la cellule nommée "Count_0".

Merci bcp de vous intéressé à mon problème,
Cordialement,
Denis
michel_m
Messages postés
15830
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 mai 2019
2725 -
Une fonction perso renvoie la donnée dans la cellule où est inscrit l'intitulé de la fonction
par exemple en B1
=ma fonction(xx) renverra Le résultat en B1 et non dans ta cellule nommée
Ton exposé est très loin d'^tre clair

Mettre le classeur sans données confidentielles en pièce jointe sur 
https://mon-partage.fr
Dans lien de téléchargement
faire un clic droit- copier l’adresse du lien et le coller dans votre message en cours sur ccm
Oui Michel, désolé si cela n'était pas assez clair. Je vais rectifier :
En fait, la donnée que renvoie la fonction (elle-même) m'indiffère ; c'est plutôt l'opération à l'intérieur de la fonction que j'essaie de faire interagir avec des cellules nommées, pour faire s'incrémenter le décompte de chaque chiffre sorti à la Roulette.. et ça ne fonctionne pas du tout, quoi que j'essaie. (J'utilise seulement le retour de la fonction pour faire s'afficher si ça a fonctionné ou non, mais j'obtient constamment le retour
#valeur!
).
Commenter la réponse de via55
Messages postés
22732
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
5473
0
Merci
Bonjour,

Déposer le fichier xls sur cjoint.com et coller ici le lien fourni.
Là on ne voit que le sommet de l'iceberg.
Ca sera plus simple que de te poser 50 questions.
Et complète tes explications...
Au passage on se demande pourquoi tu t'es embêté à nommer tes cellules plutôt que d'utiliser Cells(lig,col) =
Et ces cellules contiennent bien avec un nombre et non en texte (un nombre doit s'aligner à droite sans forcer l'alignement)
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Bonjour Éric,
Je croyais pourtant qu'une simple ligne de code pouvait être démystifiée.

1- Une colonne contient les sorties des chiffres de roulette.
2- La colonne voisine contient seulement l'appel de la fonction "num_cal(CelluleDeSortieDeChiffre)"
3- Une 3e colonne contient 37 cellules, nommées une à une "Count_0", "Count_1", Count_2".... jusqu'à "Count_36".

La fonction que j'ai programmé dans un module est la suivante :
Public Function num_add(a As Variant) As Variant
If a >= 0 And a <= 36 Then
Feuil1.Range("Count_" & a).Value = Feuil1.Range("Count_" & a).Value + 1
num_add = "Fonctionne"
Else
MsgBox "Le chiffre n'est pas entre 0 et 36.", vbOKOnly, "Erreur d'entrée"
num_add = "Ne fonctionne pas"
End If
End Function


Mais ça ne fonctionne pas. Et c'est aussi simple que ce que je viens d'écrire.
Je ne peux pas mettre en ligne mon programme.

Je demande seulement si ma syntaxe est bonne, alors que ce n'est QU'UNE SEULE feuille Excel. Incrémenter une simple valeur dans une cellule nommée ne devrait pas être si compliqué à résoudre...? Est-ce que ma syntaxe est bonne?
eriiic
Messages postés
22732
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
5473 -
Une fonction ne peut pas modifier son environnement, et donc une autre cellule comme te l'avait dit michel.
Elle retourne une valeur, c'est son seul rôle.
Donc par macro comme via.
Merci beaucoup Ériiic de cette précision.
C'est un détail qui m'était inconnu (et qui est encore un peu difficile à cerner, je dois l'avouer). J'adore l'idée que l'on puisse passer des noms de cellules en tant que paramètres à une fonction, puisque la fonction peut être invoquée dans une formule... Mais d'en retirer un résultat singulier (uniquement dans la cellule où la fonction est invoquée) me fait me tordre les méninges... Je vais regarder ce que Via m'indique. Merci encore!
Commenter la réponse de eriiic
Messages postés
10623
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
22 mai 2019
1285
0
Merci
Re,

Tu peux appeler une macro au changement de valeur dans une cellule avec l'instruction mise dans la worksheet de la feuille considérée dans l'éditeur VBA (page blanche ouverte au double-clic sur le nom de la feuille de l'arborescence à gauche de l'éditeur) :

Private Sub Worksheet_Change(ByVal Target As Range)
lignes de code à appliquer dans lesquelles tu appliquer des modifs à plusieurs cellules les unes après les autres
End Sub

Autre moyen, lancer la macro au double-clic dans une cellule avec cette fois cette macro à mettre dans le worksheet de la feuille :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
lignes de code à appliquer dans lesquelles tu appliquer des modifs à plusieurs cellules les unes après les autres
End Sub

Cdlmnt
Via

Commenter la réponse de via55