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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…