Désactivé clic souris dans colonne

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

Lu K

XLDnaute Occasionnel
Bonjour à tous,

Dans un fichier, j'ai créé une macro permettant après avoir saisi une information dans une cellule de la colonne "J" d'installer certaines formules et mise en forme de la ligne correspondante.
Mon problème et que moi en général, après avoir saisi une info, j'appui sur Entrer. Mais mes collègues non ! Il mette l'info et clic n'inporte où pour valider. Ce qui fait que les formules ce retrouve n'inporte où, vu que je travail avec la cellule active.

Je voudrais savoir s'il est possible de désactivé les clics de la souris tant que l'info n'as pas été validé par Entrer ou forcer l'utilisateur à appuyer sur Entrer ?

Je sais pas si beaucoup de personne vont comprendre ma charabia !!!

Merci d'avance pour vos réponse.
 
Re : Désactivé clic souris dans colonne

Bonjour,

Pour ce que je comprends de ton problème, il me semble que la solution passe par une macro de type

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
...La gestion de ce qu'ont rentré tes collègues
end sub
car dans ce cas, Target n'est pas la cellule de destination mais celle qui contient les données modifiées.
 
Re : Désactivé clic souris dans colonne

Salut Lu K et le forum
Personnellement, interdire une manip parce qu'elle gène mes macros... me fait les refaire 😀. Si tu interdis le clic, va falloir interdire tous les autres moyens de changer de cellules, et il y en aura toujours un pour faire une manip à laquelle tu n'as pas pensé.

Utiliser la cellule active dans une macro n'est jamais une bonne idée : ça crée souvent des problèmes, ralentit la macro et n'a pas d'utilité.
Si tu n'y arrives pas, mets ta macro dans un poste, on t'aidera à la nettoyer.
A+
 
Re : Désactivé clic souris dans colonne

Bonjour tototiti 2008, softmama et Gorfael.

Tout d'abord merci de vos réponses.

Comme le propose Gorfael, ci joint mon code :


Code:
Private Sub Worksheet_change(ByVal Target As Range)
Application.ScreenUpdating = False

On Error GoTo 0
On Error Resume Next


If Not Intersect(Target, [q6:q109]) Is Nothing And Target.Count = 1 Then
       If Target = 1 Then
           Range(Target, Target.Offset(0, -8)).Font.ColorIndex = 3
       Else
         Range(Target, Target.Offset(0, -8)).Font.ColorIndex = 0
       End If
End If


If Not Intersect(Target, [i6:i500]) Is Nothing And Target.Count = 1 Then
   ActiveCell.Offset(-1, 0).Activate
      If Target = "" Then
         Exit Sub
      Else
         Call Phase 
      End If
End If

If Not Intersect(Target, [j6:j500]) Is Nothing And Target.Count = 1 Then
     Call Sousphase
End If

End Sub
 
Re : Désactivé clic souris dans colonne

Bonsoir

obligé de broder sans tes macros appelées, vois si cela peut t'inspirer :
Code:
Option Explicit
Dim Li As Long
Private Sub Worksheet_change(ByVal Target As Range)
  Application.ScreenUpdating = False

  If Not Intersect(Target, [q6:q109]) Is Nothing And Target.Count = 1 Then
    Range(Target, Target.Offset(0, -8)).Font.ColorIndex = IIf(Target = 1, 3, 0)
  End If
  If Not Intersect(Target, [i6:i500]) Is Nothing And Target.Count = 1 Then
    Li = Target.Row
    If Target <> "" Then phase
  End If
  If Not Intersect(Target, [j6:j500]) Is Nothing And Target.Count = 1 Then
    Li = Target.Row
    sousphase
  End If
End Sub

Sub phase()
  'exemple de formule
  Dim col
  For col = 1 To 4: Cells(Li, col).FormulaR1C1 = "=" & col: Next
End Sub
Sub sousphase()
  'exemple de formule
  Dim col
  For col = 1 To 4: Cells(Li, col).FormulaR1C1 = "=" & col * 2: Next
End Sub
 
Re : Désactivé clic souris dans colonne

Bonjour SI...

Merci pour ton code, mais celui-ci ne fonctionne pas non plus. Quand je saisi une nouvelle info dans une cellule et que je clic n'importe où, il me dit : espace pile insufisant et ensuite quand je clique sur débogage il dit : Erreur d'exécution '-2147417848 (80010108) : La méthode'_Default' de l'objet 'Range' a échoué.
 
Re : Désactivé clic souris dans colonne

Bonjour

...
obligé de broder sans tes macros appelées,...
Si l'une d'elles change le contenu d'une des cellules des plages testées, il aura des appels de la macro évènementielle jusqu'à ce que la pile soit saturée.
Tu n'as pas relevé que, dans mes exemples, j'avais choisi 4 : un nombre inférieur à 9 (pour la colonne I).
Cette introduction t'incitait à nous donner plus de détails sur les routines manquantes !
Sans elles, tu risques de continuer à tourner en rond !
 
Re : Désactivé clic souris dans colonne

Re-bonjour SI...,

Désolé je n'avais pas compris.

Voici mes codes :

Code:
Private Sub Worksheet_change(ByVal Target As Range)
Application.ScreenUpdating = False

On Error GoTo 0
On Error Resume Next


If Not Intersect(Target, [q6:q109]) Is Nothing And Target.Count = 1 Then
       If Target = 1 Then
           Range(Target, Target.Offset(0, -8)).Font.ColorIndex = 3
       Else
         Range(Target, Target.Offset(0, -8)).Font.ColorIndex = 0
       End If
End If


If Not Intersect(Target, [i6:i500]) Is Nothing And Target.Count = 1 Then
   ActiveCell.Offset(-1, 0).Activate
      If Target = "" Then
         Exit Sub
      Else
         Call Phase 
      End If
End If

If Not Intersect(Target, [j6:j500]) Is Nothing And Target.Count = 1 Then
     Call Sousphase
End If

End Sub



Sub Phase()
Dim Ligne As String, Hierarchie As String
Dim Datedebut As String, Datefin As String, P As String
Dim Nbrejour As String, Datedebutphase As String, Datefinphase As String, Etat As String

        Ligne = "=(INDIRECT(ADDRESS((ROW()-1),6,1,1))+1)"
        Hierarchie = "=Hierarchie"
        P = "=Phase"
        
    
    ' Phase--------------------------------------------------------------
    Nbrejour = "=Nbrejour"
    Datedebutphase = "=Datedebutphase"
    Datefinphase = "=Datefinphase"
    Etat = "=Etat"



With ActiveCell

    ActiveCell.Offset(0, -3) = Ligne
    ActiveCell.Offset(0, -2) = P
    ActiveCell.Offset(0, -1) = Hierarchie
    ActiveCell.Offset(0, 5) = Nbrejour
    ActiveCell.Offset(0, 6) = Datedebutphase
    ActiveCell.Offset(0, 7) = Datefinphase
    ActiveCell.Offset(0, 8) = Etat
    

Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 8)).Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    With Selection.Interior
        .ColorIndex = 15
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With


End With

    ActiveCell.EntireRow.Cells(1, 1).Activate
    ActiveCell.Offset(0, 8).Activate
        
Exit Sub
End Sub





Sub Sousphase()
Dim Ligne As String, Hierarchie As String
Dim Datedebut As String, Datefin As String, P As String

       Ligne = "=(INDIRECT(ADDRESS((ROW()-1),6,1,1))+1)"
        Hierarchie = "=Hierarchie"
        P = "=Phase"
        
    ' Sous phase-------------------------------------------------------------
    Datedebut = "=Datedebut"
    Datefin = "=Datefin"
   

With ActiveCell.Offset(-1, 0).Activate
      
    ActiveCell.Offset(0, -4) = Ligne
    ActiveCell.Offset(0, -2) = Hierarchie
    ActiveCell.Offset(0, 6) = Datefin
    ActiveCell.Offset(0, 7) = "0"
    
    If ActiveCell.Offset(-1, -3) > 0 Then
         ActiveCell.Offset(0, 5) = ""
    Else
         ActiveCell.Offset(0, 5) = Datedebut
    End If
    
    If ActiveCell.Offset(0, -3) >= 1 Then
       Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, 7)).Select
        With Selection.Font
             .Name = "Arial"
             .FontStyle = "Normal"
             .Size = 8
             .Strikethrough = False
             .Superscript = False
             .Subscript = False
             .OutlineFont = False
             .Shadow = False
             .Underline = xlUnderlineStyleNone
             .ColorIndex = xlAutomatic
       End With

    Selection.Interior.ColorIndex = xlNone
    ActiveCell.Offset(0, -0) = ""
    ActiveCell.Offset(1, -2) = ""
    ActiveCell.Offset(1, 5) = ""
    ActiveCell.Offset(1, 8) = ""
    ActiveCell.EntireRow.Cells(1, 1).Activate
    ActiveCell.Offset(1, 9).Activate

      End If

End With

 End Sub
 
Re : Désactivé clic souris dans colonne

Re,

C’est bien ce que je pensais.

Pour éviter ces appels continuels, on peut utiliser, avec beaucoup de précaution, la variable « Application.EnableEvents».
A False, elle annule toutes les évènementielles et si une erreur se produit, on se retrouve coincé !
Il faut donc prévoir cette éventualité pour la remettre toujours à True.

Je n’ai pas cherché à comprendre ton projet mais vois dans le fichier joint (qui ne contient que les codes) les transformations possibles.
 

Pièces jointes

Re : Désactivé clic souris dans colonne

Re-re-bonjour Si...

Merci pour tout !!!

J'ai complètement refait mon code avec t'es indications, ça mache nickel et ça me parait plus simple à gérer !

Voici mon nouveau code :



Code:
Option Explicit
Dim Li As Long


Private Sub Worksheet_change(ByVal Target As Range)
  Application.ScreenUpdating = False
On Error Resume Next

  If Not Intersect(Target, [q6:q109]) Is Nothing And Target.Count = 1 Then
    Range(Target, Target.Offset(0, -8)).Font.ColorIndex = IIf(Target = 1, 3, 0)
  End If
  If Not Intersect(Target, [i6:i500]) Is Nothing And Target.Count = 1 Then
    Li = Target.Row
    If Target <> "" Then Phase
  End If
  If Not Intersect(Target, [j6:j500]) Is Nothing And Target.Count = 1 Then
    Li = Target.Row
    Sousphase
  End If
End Sub



Sub Phase()
Dim Ligne As String, Hierarchie As String
Dim Datedebut As String, Datefin As String, P As String
Dim Nbrejour As String, Datedebutphase As String, Datefinphase As String, Etat As String


        Ligne = "=(INDIRECT(ADDRESS((ROW()-1),6,1,1))+1)"
        Hierarchie = "=Hierarchie"
        P = "=Phase"
        
    ' Sous phase-------------------------------------------------------------
    Datedebut = "=Datedebut"
    Datefin = "=Datefin"
    
    ' Phase--------------------------------------------------------------
    Nbrejour = "=Nbrejour"
    Datedebutphase = "=Datedebutphase"
    Datefinphase = "=Datefinphase"
    Etat = "=Etat"

Application.EnableEvents = False
On Error GoTo 10

Dim col

Cells(Li, 10) = ""
Cells(Li, 6) = Ligne
Cells(Li, 7) = P
Cells(Li, 8) = Hierarchie
Cells(Li, 14) = Nbrejour
Cells(Li, 15) = Datedebutphase
Cells(Li, 16) = Datefinphase
Cells(Li, 17) = Etat
Range(Cells(Li, 6), Cells(Li, 17)).Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    With Selection.Interior
        .ColorIndex = 15
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
Cells(Li, 9).Select

Application.EnableEvents = True

Exit Sub

10  Application.EnableEvents = True
End Sub


Sub Sousphase()
Dim Ligne As String, Hierarchie As String
Dim Datedebut As String, Datefin As String, P As String

       Ligne = "=(INDIRECT(ADDRESS((ROW()-1),6,1,1))+1)"
        Hierarchie = "=Hierarchie"
        P = "=Phase"
        
    ' Sous phase-------------------------------------------------------------
    Datedebut = "=Datedebut"
    Datefin = "=Datefin"
Application.EnableEvents = False
On Error GoTo 10

Dim col

Cells(Li, 6) = Ligne
Cells(Li, 7) = ""
Cells(Li, 8) = Hierarchie
Cells(Li, 9) = ""
Cells(Li, 14) = "0"
Cells(Li, 15) = Datedebut
Cells(Li, 16) = Datefin
Cells(Li, 17) = "0"
Range(Cells(Li, 6), Cells(Li, 17)).Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 8
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
Cells(Li, 10).Select

Application.EnableEvents = True

10  Application.EnableEvents = True
End Sub

Encore Merci.
 
- 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

C
Réponses
8
Affichages
2 K
coloc52
C
C
Réponses
4
Affichages
2 K
C
K
Réponses
9
Affichages
2 K
kamyolande
K
A
Réponses
2
Affichages
1 K
A
P
Réponses
5
Affichages
1 K
primokorn
P
C
Réponses
13
Affichages
3 K
Cyrille Aix
C
S
Réponses
2
Affichages
1 K
Solis
S
P
Réponses
11
Affichages
19 K
PierreJeanPierre
P
Retour