[VBA Excel] Ecrire dans des cellules [Fermé]

Signaler
Messages postés
21
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
13 juin 2005
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
Bonjour,

Je travaille sous Windows 2000 et Excel 2000.

J’utilise fréquemment les formules sous Excel. J’ai étudié pas mal de langages de programmation mais pas le VBA.

Je fais un mini générateur de planning sous excel. Le but est de positionner une action dans le planning du formateur si celui-ci est libre, sinon d’afficher une boite de message et d’effacer l’action tapée.
J’ai tapé la formule : =SI(S78="";S7;oqp()) dans laquelle la fonction oqp() écrite en VBA(langage de programmation que je découvre).

Function oqp() As String
' Affiche une boîte de message ;
' Efface le contenu de la cellule active
' Affecte la chîne cc à la cellule S9

Dim Msg, Style, Title, Help, Ctxt, Response, MyString, cel_edt
Msg = "F oqp"
Style = vbOKOnly + vbCritical
Title = "Occupé "
Help = "DEMO.HLP"
Ctxt = 1000

Response = MsgBox(Msg, Style, Title, Help, Ctxt)
ActiveCell.Value = ""
Worksheets("essais").Range("S9").Value = "cc"
Range("S7").Clear
oqp = "cc"

End Function


Cette fonction est appelée dans la cellule S41 via la formule : =SI(S78="";S7;oqp())

Ce que je trouve étrange est que lorsque je tape une chaîne dans S7, la boîte de message apparaît mais
· le contenu de S7 ne s’efface pas ;
· cc n’est pas écrit dans S9 ;
· dans S41, je vois apparaître #VALEUR!
Alors que lorsque je clique sur le bouton exécuter de l’éditeur vba : cc s’écrit dans S9 mais par contre les autres points restent inchangés.

Bien sûr ceci n’est qu’un exemple pour vérifier que la fonction oqp fonctionne.
Les lignes qui sont d’après moi la cause de ces erreurs sont :
ActiveCell.Value = ""
Worksheets("essais").Range("S9").Value = "cc"
Je me demande s’ il ne manque pas un « include » pour les entrée /sortie mais je n’ai rien trouvé dans l’aide , ni sur internet.


Je vous remercie d’avance de votre aide.

Shp

4 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 078
bonjour

Les lignes qui sont d’après moi la cause de ces erreurs sont :
ActiveCell.Value = ""
Worksheets("essais").Range("S9").Value = "cc"


à mon avis ce n'est pas là qu'il faut chercher.

ta fonction ne correspond pas au but que tu lui assigne.

il serait plus judicieux de tester et de controler les modifs.

Bonjour,

Je mets ce que les instructions sont sensées faire (pour moi, novice en VBA !).

‘mettre la chaîne " " dans la cellule active
ActiveCell.Value = " "

‘affecter la chaîne cc dans la cellule S9
Worksheets("essais").Range("S9").Value = "cc"

Si tu vois une erreur de traduction dans ces instructions, dis-moi laquelle car, à mon avis, c’est la source de mon problème.

Merci de ton aide.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 078
bonjour

Efface le contenu de la cellule active

pour cela c'est : ActiveCell.Value = ""
car si tu mets un espace la cellule ne sera pas vide

Par contre, je n'ai peut-être pas compris ton problème
mais à mon avis ta fonction n'est pas adaptée
et je pense que tu aurais plus facilement la solution
avec une procédure :

Private Sub Worksheet_Change(ByVal celmod As Range)
if ...

End Sub

Bon même si ce post est assez vieux, je vais tenter de répondre à la question car j'ai eu un problème similaire.

En fait, il est impossible de modifier une cellule à partir de fonctions appelées dans une autre cellule. Bref, si c'est possible, c'est vraiment complexe et désagréable à programmer.

Excel a une protection qui assure que les formules inscrites dans les cellules peuvent seulement modifier leurs propres résultats. Par contre, si tu roule la fonction dans VBA directement via un

Public sub

FonctionTest( toto1, toto2)

End sub

Tes modifications vont se faire. C'est triste mais il faut programmer toutes les cellules une à la fois alors dans le cas présent, la cellule à modifier dans OCP devra avoir sa propre fonction qui pourra modifier la valeur de sa cellule propre.

En gros, si la fonction dans A1 essaie de modifier B1, ça marche pas!

A+
Messages postés
54
Date d'inscription
jeudi 17 mai 2012
Statut
Membre
Dernière intervention
27 octobre 2015

Bonjour,

Le sujet date un peux mais peux être que j'y trouverai ma réponse étant du même thème:

on peux voir le poste ici:
https://forums.commentcamarche.net/forum/affich-26710568-demander-a-k5-d-ecrire-m5-dans-h5-sans-mettre-de-formule-ds-h5

où je dis:

Bonjour à tous,

Est ce que vous savez comment on peux demander à une cellule exemple K5 d'écrire le contenue d'une autre cellule M5 dans une troisième cellule H5 si certaine condition sont réuni?

C'est à dire si K5 constate que les condition demandé sont réuni alors le contenu de M5 est recopié dans H5.

A savoir qu'il ne dois pas y avoir de formule dans H5 car si H5 est pas vide il ne se passe rien si H5 est vide et que les condition sont réuni alors le contenue de M5 doive apparaître dans H5.

Perso j'ai rien trouvé sur google. Merci de vos réponse précieuse, elle sont toutes bienvenue :-)

Si vous avez une proposition à me faire je suis preneur :-)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 078
Bonjour,

C'est tout à fait possible, mais pour te fournir un code, il faudrait connaitre les conditions :
- est-ce une saisie dans une cellule ou un calcul qui crée les conditions ?
- est-ce propre à la ligne 5 ou à reporter dans toutes les lignes ?
- qu'elles sont les conditions ?