Changement de valeur dans une plage de cellules

Bonjour,

J'ai une plage de cellule dans une colonne dont les valeurs sont la recopie d'autre cellule

Exemple

D10=A10

D11=A20

J'ai utilisé le code suivant

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D10:D11")) Is Nothing Then
    MaProcédure
En If
End Sub

Mais le Le If … is Nothing ne détecte pas la plage

Comment faire pour détecter le changement de valeur dans D10:D11 ?

Bonjour,

Avez-vous testé sans "Intersect" car l'événement Worksheet change se suffit à lui-même ?

Si les contenu des cellules est modifié, alors on lance la procédure.

Intersect est surtout utile pour faire fonctionner une macro depuis une cellule particulière ou autre par action de la souris sur ladite cellule ou si modif (Autre condition : du type SI telle cellule est différente de telle valeur ) mais alors inutile de mettre ce code dans l'évènement Change.

Si incompréhension, merci de me fournir un exemple de fichier.

CDT

Juste un ptit fichier en PJ, par action sur les cellules concernées (uniquemement) en rentrant des données ou en les effacant votre code fonctionne.

Maintenant si vous supprimez le IF....End IF mais que vous laissez uniquement maprocédure le message apparaitra à chaque modif de n'importe quelle cellule de la feuille1.

39test-0.xlsm (15.41 Ko)

Cdt

Bonjour,

C'est vrais, j'aurai du joindre un fichier d'exemple

J'ai modifié le votre, pour qu'il corresponde à ma demande

En D10 et D11, les valeurs ne sont plus saisies, mais sont recopiées à partir de respectivement H04 et H15

A ce moment là, j'ai bien l'événement CHANGE, mais le test INTERSECT ne détecte pas de changement dans D10 et D11

J'ai volontairement pris comme origine H04 et H15, car sinon on faisais INTERSECT sur celles-ci

Comment faire un INTERSECT sur des cellules non contiguës ?

10test-0.xlsm (17.35 Ko)

BOnjour

Une formule se mettant à jour en raison du calcul n'est pas un changement pour Excel d'où ton problème.

C'est le changement des cellules sources qu'il faut gérer.

J'ai trouvé une solution sur le NET

Effectivement, c'est le changement des cellules sources qu'il faut surveiller

Je ne déclenche la procédure que si une cellule surveillée est modifiées

Voici le fichier

Mais maintenant, j'ai un autre problème !!!

Ma cellule destination n'est pas mise à jour !!!

Je ne sait pas maitriser les évènements

Pouvez-vous m'aider ? Merci

21test-0.xlsm (17.76 Ko)

@scn68100

alors, petit canaillou ? on veut corrompre Excel et empêcher l'utilisateur de saisir une donnée en H4 et H15 ?

mais tu sais qu'c'est pas bien, ça ? non, non, vraiment pas bien ! bon allez, j'vais quand même t'aider :

10test-0.xlsm (17.77 Ko)

j'crois bien qu'c'est c'que tu veux, sinon : adaptation possible ; et à tout hasard, par précaution, j'vais ouvrir

un "Bureau des plaintes" pour tous les utilisateurs mécontents qui arrivent plus à modifier H4 et H15 !

(on sait jamais, hein ? j'vais p't'être faire fortune, grâce à toi ! )


oh, j'oubliais un léger p'tit détail : bonjour quand même, Sauveur, et j'te souhaite un bon weekend !

(mais tu peux m'répondre avant lundi, si t'as envie)

dhany

Bonjour DHANY,

Sauf erreur de ma part, je ne vois aucun changement ....

Les cellules de destination ne sont toujours pas mise à jour !!!

Ce que j'ai fait était surtout pour le Intersect : ça détecte bien H4 et H15 avec cette ligne de code :

If Intersect(Target, Range("H4, H15")) Is Nothing Then Exit Sub

Et quel est le travail à faire au juste ? 1) empêcher la modif de H4 et H15 : c'est fait ; 2) tu veux dire que même si on empêche une modif de H4 et H15, faut que la modif qui y aurait été faite si ça avait pas été annulée soit faite en D10 et D11 respectivement ?


Je crois que ça serait donc ceci (à confirmer) :

1) Pour H4 : l'utilisateur tente de modifier 450 en 100 (par exemple) :

tu veux que D10 (450) devienne 100 et que H4 reste 450.

2) Pour H15 : l'utilisateur tente de modifier 600 en 200 (par exemple) :

tu veux que D11 (600) devienne 200 et que H15 reste 600.


À te lire pour la suite.

dhany

Bonjour,

Il te manque une ligne :

                    Target = Nouvelle_valeur

Cordialement.

@Sauveur

Si c'que j'ai proposé dans mon post de 07:22 est exact, voici la nouvelle version du fichier :

16test-0.xlsm (18.04 Ko)

En résumé : changements en H4 et H15 annulés, mais répercutés respectivement en D10 et D11.

Tu pourras voir que le travail supplémentaire est fait dans Worksheet_Change() et juste avant appel de ta sub MaProcédure.

Mais peut-être aurais-tu préféré que ce soit fait juste après l'appel ? ou peut-être même dans ta sub MaProcédure ?

À te lire pour avoir ton avis.

dhany

Bjr,

J'ai 2 cellules, D10 et D11, dont les valeurs sont la recopie respective de H4 et H15

Je veut détecter les changement en H4 et H15, (Puisque l'on ne peut les détecter en D10 et D11, puisqu'elle proviennent de formule), et si changement de valeur lancer une macro

Mais conserver la recopie en D10 ou D11

Exemple 10 en H4 et D10

Je remplace 10 par11 en H4 La macro doit être lancée, et H4 et D10 sont à la valeur 11

Je retape 11 en H4, rien ne doit se passer

Dans le fichier joint modifié, au changement de valeur la macro est bien lancée, la cellule de destination est bien mise à jour, mais la cellule concernée reste inchangée !!!

@Sauveur et MFerrand

C'est fait ! voici la nouvelle version :

46test-0.xlsm (17.85 Ko)

MFerrand avait raison dans son message de 07:30 : il manquait bien une instruction Target = Nouvelle_valeur ; je l'aurais trouvé tout seul, mais il l'a quand même noté en premier. par contre, il a commis une faute impardonnable pour un Fanatique d'Excel : il n'a pas précisé où fallait la mettre, cette fichue instruction, lolllll !

Bon, t'inquiètes pas : j'ai trouvé l'bon endroit et ça marche impeccable, exactement comme tu veux ; si j'ai été très long, c'est pas pa'c'que j'ai eu du mal à trouver, mais pa'c'que j'ai eu une longue réponse urgente à écrire pour un autre dossier que le tien.

Mais tout est bien qui finit bien, it's a Happy End :

screen

dhany

il n'a pas précisé où fallait la mettre, cette fichue instruction, lolllll !

C'est parfait

Merci beaucoup

pssst, Sauveur !

j'suis bien content d't'avoir aidé à résoudre ton problème, mais j'crois qu't'as oublié d'télécharger mon fichier !

il a été téléchargé qu'une seule fois, et j'pense que c'est l'Maréchal qui l'a uploadé, car c'était avant ton retour.

screen

tu devrais regarder mon code VBA pour le comparer avec le tien, car j'ai fait plusieurs modifs : y'a pas que l'ajout d'l'instruction sus-mentionnée dans mon précédent post. (c'est juste une invitation : rien t'y oblige !)


ah, y'a autre chose, aussi : pour passer un sujet en résolu, faut pas afficher l'joli p'tit panneau sympa mais faire c'qu'y'a noté dessus ! il suffit juste (3 fois rien) de cliquer sur la coche V située près du bouton EDIT ; tu sauras qu't'as réussi quand tu verras un joli p'tit rond vert avec une coche, comme ceci :

sujet

c'est grâce à Sébastien qu'y'a plein d'si jolies choses sur ce merveilleux forum ! malheureusement, y'en a beaucoup d'autres qui font la même confusion et affichent le panneau problème résolu, alors qu'il est normalement réservé à ceux qui aident ... pour réclamer aux demandeurs, justement, de cliquer sur le bouton V ; ne m'demande pas comment faire en sorte que les demandeurs évitent de faire cette malencontreuse confusion : c'est un problème VBA bien trop ardu pour mon goût, qui dépasse complètement mes capacités !

peut-être que si Sébastien précise sur le panneau qu'le bouton V est près du bouton EDIT ça marcherait mieux ? j'en sais rien, hein, moi ! j'suis pas spécialiste diplômé en constructions d'forums, ni en sciences cognitives sur la psychologie comportementale des internautes qui surfent sur des forums !!!

dhany

Bjr,

J'ai bien téléchargé le bon fichier

Effectivement, je n'avais pas vu la "double détente" pour passer en résolu

Rechercher des sujets similaires à "changement valeur plage"