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

Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

  • Initiateur de la discussion Initiateur de la discussion lama
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lama

Guest
Bonjour,
conceptuellement, il y a visiblement qqc qui cloche dans ces 3 lignes mais je ne vois pas quoi (d'autant qu'il parvient à exécuter le code en le forçant, mais #VALEUR subsiste dans la cellule où est fait l'appel).

Function sss(p As Range)
p.Cells(1, 1) = 0
End Function

Help please!
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Bonsoir,
quel intérêt de passer par une fonction puisque tu ne fais qu'exécuter une action (attribuer à la cellule A1 la valeur 0) ?
A+
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Bien sûr, la fonction n'a aucun intérêt en soi. Je cherche simplement à comprendre pourquoi ça ne fonctionne pas. Une idée?

(Comme cas pratique, je pourrais imaginer une fonction qui remplit un Range passé en paramètre avec des valeurs croissantes)
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

bonsoir,

Effectivement il y a problème: une fonction ne peut pas agir sur une cellule ou faire appel à une procédure agissant sur une cellule!

Une fonction ne peut que retourner une valeur!

Pour agir sur les cellules utiliser une procédure
Sub Maprocédure(plg as range)
plg(1,3)= "toto"
End Sub

A+
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Bonjour lama, David,

Le code d'une fonction ne peut pas exécuter une action de ce genre (écrire dans une cellule).

L'instruction crée donc une erreur.

Edit : salut Hasco.

A+
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Voilà, c'est qqc comme ça que je voulais lire, merci à vous deux.

Donc, conceptuellement, ça signifie:
* une fonction reçoit des arguments (possiblement plage) et renvoie une valeur. Impossible de modifier la feuille directement ou indirectement. Même en passant un Range en ByRef, c'est impossible.
* une procédure
- soit est appelée depuis un objet (bouton ou autre), dans ce cas ne reçoit pas d'arguments, mais peut agir sur la feuille
- soit est appelée depuis une autre procédure, dans ce cas peut recevoir des arguments et agir sur la feuille
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Bonsoir.

Le blocage est seulement du coté d'Excel. Une impasse totale sur toute modification de quoi que ce soit dans le classeur durant la phase de calcul. Or une fonction invoquée dans une formule est justement exécutée durant cette phase là. Mais rien n'empêcherait en principe la Function d'inscrire coté VBA une consigne dans une variable Public, qui elle sera testée et exploitée par une Worksheet_Calculate en vue de modification plus en profondeur, par exemple…

Mais en général la valeur retournée suffit dans la majeure partie des cas. De plus, puisque vous parlez de remplir une plage, si la Function retourne un tableau de Variant à 2 dimensions, elle peut être invoquée comme formule matricielle dans une plage de plusieurs cellules. Il suffit de la valider par Ctrl+Majuscule+Entrée.
 
Dernière édition:
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Merci, c'est exactement ce que je cherchais à savoir.
(mais votre exemple sur le retour en Variant demeure confus pour moi)
 
Re : Erreur de débutant: pourquoi ces trois lignes de VB plantent-elles?

Non, je parlais du renvoi d'un tableau de Variant (à la rigueur un Variant contenant un tel tableau fonctionne aussi, mais autant éviter cet intermédiaire inutile)
Pour pouvoir affecter un tableau à la plage contenant la formule matricielle, terminer l'instruction Function par: As Variant() et affectez au nom de la fonction (qui représente en son sein la valeur qu'elle retournera) un tel tableau juste avant la End Function
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…