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

Probleme avec Private Sub Worksheet_Change ='(

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

S

Skqgent

Guest
Bonjour a tous !!

je n'arrive pas a me dépatouiller avec cette fonction
Je souhaite nettoyer une cellule si la cellule a sa gauche (collone H) passe de quelque chose a vide

J'ai pensé a :
Private Sub Worksheet_Change()
Dim Cellule as Range
For each cellule in range("H1:H30")
If cellule.value = "" then
Cellule.offset(0,1).clearcontents
End if
Next cellule
End sub

avec différentes variantes, dans le module dans la feuil concernée, dans le workbooks rien y fait

Quel est le probleme ?🙁
Merci d'avance 🙂
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Bonsoir Skqgent,

Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
    [COLOR=NAVY]If[/COLOR] Target.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]   [COLOR=GREEN]'Ne gère pas le traitement de plages[/COLOR]
    [COLOR=NAVY]If Not[/COLOR] Application.Intersect(Target, Range("H1:H30")) [COLOR=NAVY]Is Nothing Then
        If[/COLOR] Target.Value = "" [COLOR=NAVY]Then[/COLOR] Target.Offset(0, 1).ClearContents
    [COLOR=NAVY]End If
End Sub[/COLOR]
Si tu souhaites pouvoir gérer l'effacement de plages dans la colonne H, le code doit être adapté en conséquence, dis-le nous.

Cordialement,
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Bonsoir à tous les deux, au forum!

J'aurai une question par rapport au code que tu donnes Didier.

J'ai essayé de l'adapter pour une macro relativement proche (empêcher une cellule vide après modification) qui fonctionne :

Code:
'For i = 8 To 12
'If IsEmpty(ActiveSheet.Cells(i, 10)) Then
'Cells(i, 10) = "xxx"
'End If
'Next i

Qui devient :

Code:
If Not Application.Intersect(Target, Range("J8:J12")) Is Nothing Then
If Target.value="" Then Target.value="xxx"
End if

Et bien sur cela ne marche pas 😛
Saurais-tu pourquoi ? Ce serait surtout pour essayer de comprendre la difference entre les deux méthodes.

Bonne soirée et merci 🙂
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Bonjour MDF, merci pour ta réponse

Je n'arrive malheureusement pas a faire marcher ce code dans mon application, j'ai beau chercher je trouve pas 🙁
Je met mon apply en pièce jointe, j'aimerais savoir ce que je ne fait pas correctement !!

@+
Skq
 

Pièces jointes

Re : Probleme avec Private Sub Worksheet_Change ='(

Bonsoir Skqgent,

Cela marche correctement sur le fichier que tu as mis en PJ.

Lorsque tu supprimes une valeur de la colonne G, cela efface également la valeur correspondante dans la colonne H.
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Bonsoir antha,

Il y a une différence importante entre l'objectif du code que je mets plus haut et celui que tu tentes : le premier apporte une modification (clearcontents) sur une cellule externe à la plage gérée (la cellule à droite), le tien tente de modifier une cellule elle-même gérée par l'évènement Change().

En clair, l'évènement Change() se déclenche lorsque ta cellule est modifiée par l'utilisateur. Dans cet évènement, tu tentes de modifier à nouveau cette cellule par un Clearcontents, ce qui entraine d'office un autre passage de l'évènement Change(), et ainsi de suite... Ca devient une boucle sans fin et qui ne peut donc être gérée correctement par VBA sans garde-fou.

Cordialement,
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Bonsoir kjin, merci pour ta réponse
Génial ça marche 🙂🙂

Merci beaucoup, maintenant y'a plus qu'a bosser sur le code... pour comprendre un peu mieux et le ré-utilisé en temps voulu 😉😉

😀😀
 
Dernière modification par un modérateur:
Re : Probleme avec Private Sub Worksheet_Change ='(

Edition :
Bonsoir kjin,
Arf, je n'avais pas vu vos derniers échanges... comme j'avais pris le temps de préparer des explications (visiblement à tort) je les postes quand même...

Je confirme ce que dit antha : "Lorsque tu supprimes une valeur de la colonne G, cela efface également la valeur correspondante dans la colonne H."

Cela dit, si tu nous avais indiqué dans premier post que ta colonne cible (la G visiblement et non la H) contient des formules... 🙁

Pour ton information, l'évènement Change() ne se déclenche pas au recalcul d'une formule, seule une action utilisateur est "captable" par cet évènement... c'est pourquoi ça fonctionne uniquement si tu effaces manuellement une cellule en G.

2 solutions à mon avis :

  1. Tu supprimes tes formules et tu gères tout par VBA.
  2. Tu utilises le code ci-dessous qui te permet de garder tes formules. Ce code ne surveille plus la colonne G contenant la formule, mais les colonnes D à F, antécédents de cette formule.
Code:
[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
    [COLOR=NAVY]If[/COLOR] Target.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]   [COLOR=GREEN]'Ne gère pas le traitement de plages[/COLOR]
    [COLOR=NAVY]If Not[/COLOR] Application.Intersect(Target, Range("D1:F30")) [COLOR=NAVY]Is Nothing Then
        With[/COLOR] Target.EntireRow
            [COLOR=NAVY]If Not[/COLOR] .Range("D1").Value & .Range("E1").Value & .Range("F1").Value [COLOR=NAVY]Like[/COLOR] "*Attente*" [COLOR=NAVY]Then[/COLOR]
                .Range("H1").ClearContents
            [COLOR=NAVY]End If
        End With
    End If
End Sub[/COLOR]
Par ailleurs, je te confirme bien que c'est dans le module de code de la feuille que se situe ce code et non dans le module de code de l'objet ThisWorkbook (et encore moins dans les 2 !).

Cordialement,
 

Pièces jointes

Dernière édition:
Re : Probleme avec Private Sub Worksheet_Change ='(

Merci Didier, ça marche aussi très bien en gardant les formules =)

Désolé de ne pas avoir préciser mais je ne savais pas du tout qu'une formule donnant le résultat "" ne voulait pas pour autant dire qu'elle était réellement vide :'(

Merci a tous pour vos réponses
 
Re : Probleme avec Private Sub Worksheet_Change ='(

Re,
je ne savais pas du tout qu'une formule donnant le résultat "" ne voulait pas pour autant dire qu'elle était réellement vide :'(
C'est là que tu te trompes encore Skqgent, là n'est pas le problème. Le problème c'est que l'évènement Change() ne réagit pas au changement d'état d'une formule (quelque soit son résultat).

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

Discussions similaires

Réponses
9
Affichages
509
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
2
Affichages
411
Réponses
3
Affichages
333
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…