Incapable d'utiliser cellule nommée

Fermé
Denis - Modifié le 12 mai 2019 à 18:37
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 - 13 mai 2019 à 19:26
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
A voir également:

4 réponses

via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 736
Modifié le 12 mai 2019 à 23:58
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

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

Cordialement,
Denis
0
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
0
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 736
12 mai 2019 à 19:03
Bonjour Denis

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

Cdlmnt
Via
0
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 12 mai 2019 à 19:21
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
0
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!
).
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié le 12 mai 2019 à 20:08
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

0
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?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié le 13 mai 2019 à 00:03
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.
0
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!
0
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 736
13 mai 2019 à 19:26
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

0