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

Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

  • Initiateur de la discussion Initiateur de la discussion znmile
  • 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 !

Z

znmile

Guest
Bonjour,

Tout d'abord merci de s'intéresser au sujet.
J'ai eu du mal à le synthétiser dans le titre de façon claire.... et donc du mal à chercher dans les sujets précédents.... en bref:

J'ai trois cellules: marge en €, marge en % et prix total.

J'aimerais que l'utilisateur puisse modifier une des valeurs, et que les 2 autres se modifient en fonction.

Je pensais passer par :

If Target.Address = "$E$19" Then
marge_pourcentage
End If
If Target.Address = "$F$19" Then
marge_prix
End If etc....

Sub marge_prix()
Range("F20") = Range("F16") + Range("F19")
Range("E19") = Range("F20") * Range("F19") / 100
MsgBox ("prix de marge modifié, % et prix de vente HT modifiés en conséquence")
End Sub


Problème, lorsque je modifie une cellule, les autre se modifient donc les autres macros s’exécutent et ainsi de suite.... donc une boucle infinie pas pratique 😉

Si vous avez la moindre piste, je serais EXTREMEMENT reconnaissant!
Merci d'avance
 
Re : Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

Fais un controle avec Application.EnableEvents :
If Target.Address =...
Application.EnableEvents =False
...
end if
If Target.Address =...
Application.EnableEvents =False
...
end if
Application.EnableEvents = true
end sub
 
Re : Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

Salut znmile et le forum
Petites remarques anodines :
- Il n'y a ni devin, ni télépathe sur ce site
- Utilise les balises de code (icone # en mode avancé)
- Si tu veux de l'aide sur un code, donnes-le en entier : ce qu'on te propose dépend de tout ton code et personnellement, ça m'emm.... de revenir dessus parce que je n'avais pas les bonnes infos.

Dans ce que tu donnes, j'ai des difficultés à comprendre :
Pa principe, je dissocie les cellules qui me donnent un résulta, de celles dans lesquelles j'entre des données => ça permet d'avoir des formules.

Ce que je crois comprendre : une macro change appelle des macros de calcul en fonction de la cellule concernée.
Le problème avec EnableEvents : si Excel détecte une erreur, il arrête de travailler à partir de la ligne de code concernée et fait un exit sub => si je n'ai pas remis la gestion des évènements en route, rien ne me le dis, sauf que rien ne se passe.

Dans ton cas, une variable booléenne globale sera sans doute plus indiquée :
On la teste en début de macro, si elle est à True, on sort.
Juste derrière, on la met à True
en sortie on la met à False
et pour éviter tout problèmes, on fait une gestion des erreurs sur toutes les macros, en avertissant par MsgBox et en remettant la variable à False, puis en sortant.
A+
 
Re : Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

c😎😎l !!!

ok avec toi Gorfael concernant les #, mais à la décharge de znmile, il cherche seulement une piste...
 
Re : Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

Merci à Bond pour la piste, elle m'a sauvée la vie lol. j'ai juste modifié un peu mais l'idée était là ! merci encore!

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo Erreur
If Target.Address = "$E$19" Then
    marge_pourcentage
ElseIf Target.Address = "$F$19" Then
    marge_prix
ElseIf Target.Address = "$E$21" Then
    prix_m2
    End If
Erreur:
Application.EnableEvents = True
End Sub

@Gorfael, désolé d'avoir fait le "relou" à pas utiliser les balises code et ne pas avoir donné le code en entier, je suis tout nouveau sur le forum, et j'avoue que je suis passé à coté. Je tiens à m'en excuser. En plus mon code fait pas mal de lignes, j'ai voulu sélectionner les seules parties utiles... peut être trop. N'empêche que ces critiques sont constructives, et que je ferais attention sur mes prochains post! Mon but est de progresser constamment (en VBA autant qu'en règles d'utilisation du forum!).

De ce fait, j'aimerais comprendre un peu plus l’intérêt de la variable globale...
exemple en pseudo code:
Code:
on définit une variable globale à False en dehors de mon worksheet

A l'entré du change, si elle est à True on sort
plusieurs MsgBox pour vérifier que les chiffres sont positifs, que ce sont des chiffres etc (gestion d'erreurs)
on exécute le code
on la met à False

Du coup si on a pas pu finir le traitement à un moment, la variable sera à True, et on ne pourra plus faire de traitement...?

Merci pour ces précisions, et de me permettre de m'instruire!
 
Re : Mise à jour de cellules selon donnée d'entrée - cellules dépendantes

Salut znmile et le forum
De ce fait, j'aimerais comprendre un peu plus l’intérêt de la variable globale...
exemple en pseudo code
Un problème simple : si je rentre une valeur en A1, on la multiplie par 10.
Code:
Option Explicit
Dim Flg As Boolean 'déclarée en haut de module elle devient globale pour le module

Private Sub Worksheet_Change(ByVal Target As Range)
If Flg Then Exit Sub
If Target.Address(0, 0) = "A1" Then
'si la modif concerne A1
    Flg = True
    [A1] = [A1] * 10
    Flg = False
End If
End Sub
A1 devient 1 => Premier lancement => Flg=false => on continue => target=A1 => on exécute la partie vrai => Flg passe à True => A1 devient 10 => deuxième lancement de la macro => Flg=True => exit sub => on continue la macro initiale => Flg=False => end sub
A+
 
- 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…