Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Impossible de mettre à jour la valeur d'une cellule en VBA !

jlgarnier

XLDnaute Nouveau
Bonjour à tou(te)s,

Je dois passer à côté d'un truc grossier, mais dans une fonction, je tente de stocker une valeur calculée dans une cellule et obtiens une erreur :

FirstEmptyCodeRow = Worksheets("Data").Cells(2, 2).End(xlUp).Row + 1
Worksheets("Data").Cells(FirstEmptyCodeRow, 2).Value = "Test" --> ERREUR

C'est tellement simple que je ne vois pas où je me plante...

Merci d'avance pour vos conseils !
 
Solution
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 !

Problèmes résolus donc ! Merci beaucoup à tous !

vgendron

XLDnaute Barbatruc
Bonjour

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..
 

jlgarnier

XLDnaute Nouveau
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 !

Merci pour ton aide !
 

Pièces jointes

  • Customer code.xlsm
    26.5 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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
 

jlgarnier

XLDnaute Nouveau
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) ?

Merci d'avance pour vos conseils !
 

Dranreb

XLDnaute Barbatruc
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.
 
Dernière édition:

jlgarnier

XLDnaute Nouveau
Ç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
VB:
Worksheets("Data").Range("B1").End(xlDown).Activate
FirstEmptyCellRow = Worksheets("Data").Range("B1").End(xlDown).Row

mais j'obtiens une erreur "la méthode Activate a échoué". Comment est-ce possible ?
 

Dranreb

XLDnaute Barbatruc
Ne pourriez vous mettre cette plage sous forme de tableau, ce serait plus simple à gérer.
VB:
Dim RngLig As Range
Set RngLig = Workseets("Data").ListObjects(1).ListRows.Add.Range
RngLig(1, 1).Value = "Test"
 

jlgarnier

XLDnaute Nouveau
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 !

Problèmes résolus donc ! Merci beaucoup à tous !
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
720
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…