Finalement, j'ai créé un boîte de dialogue pour recueillir les valeurs en entrée et le code que j'avais du mal à faire fonctionner dans la worksheet se comporte comme attendu dans la dialogbox !
1) la feuille "Data" existe t elle bien?
2) FirsEmptyCodeRow te renvoie quoi comme valeur?
3) la cellule cible n'est elle pas affublée d'une liste de validation ( dans laquelle Test n'est pas autorisée)
sans fichier exemple pour voir, aucune autre idée..
1) la feuille "Data" existe t elle bien?
2) FirsEmptyCodeRow te renvoie quoi comme valeur?
3) la cellule cible n'est elle pas affublée d'une liste de validation ( dans laquelle Test n'est pas autorisée)
sans fichier exemple pour voir, aucune autre idée..
1 : oui, puisque je parviens à lire la valeur d'une cellule sans problème
2 : la variable vaut 2, soit la première ligne puisque la colonne est vide à part le label "Code" en B1
3 : non, il n'y a aucun format...
Comme il n'y a rien de secret, j'attache le fichier directement !
Bonsoir.
Dans une Function, pas une Sub ?
Si oui, comment est elle invoquée ?
Si c'est depuis une cellule c'est cuit, parce qu'on est forcément en plein calcul de la feuille, opération durant laquelle Excel ne procède à aucune modification du classeur. Il faudrait déjà noter les infos en consigne dans une collection VBA, et vider celle ci en appliquant les changements dans une Sub Worksheet_Calculate ou Workbook_SheetCalculate
d'après mes essais, je rejoins donc Dranreb que je salue
une fonction "personalisée" n'est donc pas autorisée à modifier le contenu d'autres cellules du classeur
si tu commentes les 2 dernières lignes, la fonction donne bien le résultat attendu
Cela voudrait dire que :
1. je dois créer une Sub et non une Function ?
2. je ne peux pas modifier le contenu d'une cellule dans une fonction appelée par une autre cellule ?
Comment invoquer une Sub à partir d'une cellule, aussi simplement que =CreateCode(C2) ?
On ne peut pas modifier le classeur pendant les calculs. Mais juste après, si, dans une Sub Worksheet_Calculate du module de la feuille. Sinon, une macro classique qui modifie quelque chose s'affecte généralement à un bouton de formulaire.
Le plus classique c'est quand même plutôt de réagir au changement de contenu d'une cellule dans une Private Sub Worksheet_Change(ByVal Target As Range) du module de l'objet Worksheet représentant la feuille.
Ça s'arrange en effet en travaillant dans Worksheet_Change ! En revanche, j'ai un souci curieux : je cherche à connaitre la première cellule vide de la colonne B et j'ai écrit
Finalement, j'ai créé un boîte de dialogue pour recueillir les valeurs en entrée et le code que j'avais du mal à faire fonctionner dans la worksheet se comporte comme attendu dans la dialogbox !