XL pour MAC Deux procédures "Private Sub" pour une feuille

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 !

ArnaudSi

XLDnaute Nouveau
Bonjour à tous

De manière indépendante ces deux procédures fonctionnent à merveille

Et lorsque j'essaye de les combiner pour une feuille, l'ensemble fonctionne de manière aléatoire (voir pas du tout...)

Y a t il une méthode pour résoudre ce problème?

Merci de votre aide

Arnaud

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
  
        If Target = [D16] Then
            [J19] = [G16]
        End If
      
    Application.EnableEvents = True
  
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Range("G3").Value
                 
                   Case "Professionnel"
                      
                        If Target.Address = "$G$3" Then
                        Application.EnableEvents = False
                        Range("L3").Value = " Autre"
                        Application.EnableEvents = True
                        End If
                      
                   Case "Public"
                 
                        If Target.Address = "$G$3" Then
                        Application.EnableEvents = False
                        Range("L3").Value = " Autre"
                        Application.EnableEvents = True
                        End If
                      
                   Case Else
                      
                        If Target.Address = "$G$3" Then
                        Application.EnableEvents = False
                        Range("L3").Value = Target.Value
                        Application.EnableEvents = True
                        End If
                      
                 End Select
 
End Sub
 

Pièces jointes

Bonjour,

On ne peut avoir deux sub du même nom, la solution est donc de les grouper en une seule.

J'ai interprété If Target = [D16] Then comme signifiant Si la cellule modifiée est la cellule D16 ( alors que le code vérifie si la valeur de la cellule modifiée et la valeur de la cellule D16 sont identiques)

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D16")) Is Nothing Then 'si on modifie D16
    Application.EnableEvents = False
    [J19] = [G16]
    Application.EnableEvents = True
End If

If Not Intersect(Target, Range("G3")) Is Nothing Then 'si on modifie G3
    Application.EnableEvents = False
    Select Case Target.Value
        Case "Professionnel" , "Public"
            Range("L3").Value = " Autre"
        Case Else
            Range("L3").Value = Target.Value
    End Select
    Application.EnableEvents = True
End If
End Sub

A+
 
Merci beaucoup, cela fonctionne parfaitement

Il y a juste un souci que je n'arrive pas à résoudre et que j'avais déjà

Lorsque j'éxecute une autre action sur la feuille, il y a le message suivant :

Erreue d'exécution " 13 ": Incompatibilité de type

Et l'action en question que j'exécute est la suivante :

VB:
Sub Effacement1()
'
Dim Reponse As Integer
'
Reponse = MsgBox("Confirmez-vous la Réinitialisation de la feuille calcul ?", vbYesNo)
If Reponse = vbYes Then
'
    Application.ScreenUpdating = False
    '
    With Sheets("Calcul")
        Range("D3:H3, J3:K3, M3, H13, J13, D16, D19, G19, J19, D22, G22, D28, F28, D31, H31, K31, D34, H34, D37, H37, D40, H40, D43, F43:G43, D46, H46, J46, D49, H49, J49, D52, H52, J52, D55, G55, D57, G57, D60, G60, D62, G62, D65:L65, D68, H68, D71, H71, D74, H74, D77, H77, D80:E80, G80, D83, F83, I83:J83, D86, F86, I86:J86, D89, F89, I89:J89, D92, D95, F95:G95, D98, F98:G98, D103:F103, D106:H106, D109:I109, D112:I112, D115:I115, D118:I118, D121:G121, D124:E124, J124, D127:H127").Select
        Selection.ClearContents
    End With
    '
    Application.ScreenUpdating = False
    MsgBox "Réeinitialisation réussit pour la feuille calcul."
    '
Else
MsgBox "Réinitialisation interrompu."
End If
'
End Sub

Il doit y avoir conflit au niveau de la cellule D16

Y a t il un moyen de résoudre ce problème?
 
Bonsoir

Il y a un conflit au niveau de la cellule D16 et G3 effectivement

Correction du code ci-dessous :

VB:
Sub Effacement1()
'
Dim Reponse As Integer
'
Reponse = MsgBox("Confirmez-vous la Réinitialisation de la feuille calcul ?", vbYesNo)
If Reponse = vbYes Then
  Application.EnableEvents = False
   Application.ScreenUpdating = False
    '
   With Sheets("Calcul")
        Range("D3:H3, J3:K3, M3, H13, J13, D16, D19, G19, J19, D22, G22, D28, F28, D31, H31, K31, D34, H34, D37, H37, D40, H40, D43, F43:G43, D46, H46, J46, D49, H49, J49, D52, H52, J52, D55, G55, D57, G57, D60, G60, D62, G62, D65:L65, D68, H68, D71, H71, D74, H74, D77, H77, D80:E80, G80, D83, F83, I83:J83, D86, F86, I86:J86, D89, F89, I89:J89, D92, D95, F95:G95, D98, F98:G98, D103:F103, D106:H106, D109:I109, D112:I112, D115:I115, D118:I118, D121:G121, D124:E124, J124, D127:H127").Select
        Selection.ClearContents
    End With
    '
    Application.ScreenUpdating = True ' Corrigé ici c'etait pas false
    MsgBox "Réeinitialisation réussit pour la feuille calcul."
    Application.EnableEvents = True
Else
     MsgBox "Réinitialisation interrompu."
     ' Inutile ici (Merci PAF)
      'Application.EnableEvents = True
End If
'
End Sub
 
Dernière édition:
Re,

Une solution consiste à empêcher le déclenchement des évènements à l'effacement des cellules dans la Sub Effacement1() :
VB:
...
   With Sheets("Calcul")
         Application.EnableEvents = False
         Range("D3:H3, J3:K3, ....D127:H127").ClearContents
        Application.EnableEvents = True
    End With
...

Une autre , au niveau de Private Sub Worksheet_Change(ByVal Target As Range), consiste à gérer si on modifie plus d'une cellule:

en tête de sub:

VB:
If Target.count > 1 Then Exit Sub

A+

Edit : Bonjour laurent950
 
Exacte Paf, Peux être mettre en tête de procédure et juste à la fin je n'avais pas vu le Else

d'aileur pour moi le Else n'a aucun interet ici

Else
MsgBox "Réinitialisation interrompu."
Application.EnableEvents = True

Merci Paf (J'ai corrigé le poste 4)
 
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

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
317
Réponses
2
Affichages
153
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Retour