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

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

  • Classeur1 (4) (1).xlsm
    12.5 KB · Affichages: 50

Paf

XLDnaute Barbatruc
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+
 

ArnaudSi

XLDnaute Nouveau
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?
 

laurent950

XLDnaute Barbatruc
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:

Paf

XLDnaute Barbatruc
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
 

laurent950

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 148
Membres
112 670
dernier inscrit
Flow87