[Excel VBA] Colonne modifiable par clic + Changement auto signe cellule

Bonjour,

- Je souhaite créer une feuille excel pour faire mes comptes dans laquelle il y a une colonne (colonne E) avec flèche haut ("Ç" = flèche haut en police Wingdings 3) ou flèche bas ("È" = flèche bas police Wingdings 3), et une colonne (colonne F) avec le montant de l'opération en €). Avec des macros je souhaite :

1/ Colonne E : pouvoir faire un double clic pour changer l'orientation de la flèche (haut ou bas, en police Wingdings 3)

2/ Colonne F : ajuster le signe du chiffre entré en fonction de l'orientation de la flèche (nombre positif si flèche vers le haut, nombre négatif si flèche vers le bas)

- Vous trouverez ci-dessus les macros que j'ai faite. C'est fonctionnel, mais j'aurai 2 questions s'il vous plait :

1/ Dans "Public Function cellule_nombre_positif_negatif_fleche", si je met un "If Not Intersect" ça ne fonctionne pas. Si je l'enlève (il est en commentaire), ça fonctionne. Savez-vous pourquoi ?

2/ C'est mon principal problème que je n'arrive pas à résoudre : si je supprime une colonne (qui ne sont pas les colonnes E et F), ça "plante". Côté débogage ça arrive dans la fonction "Public Function cellule_nombre_positif_negatif_fleche", sur la ligne : "If Target.Offset(0, -1).Value = "Ç" Then"

Savez-vous comment résoudre ce problème s'il vous plait ?

- Voici les macros que j'ai faite (dans l'onglet correspondant) :

' >>> FONCTION Case fleche haut bas

'Ç -> fleche haut police Wingdings 3

'È -> fleche bas police Wingdings 3

Public Function cellule_fleche_haut_bas(ByVal Target As Range, num_ensemble_de_cellules As String)

If Not Intersect(Target, Range(num_ensemble_de_cellules)) Is Nothing Then

If Target.Value = "Ç" Then

Target.Value = "È"

Target.Offset(0, 1).Value = -Abs(Target.Offset(0, 1).Value)

Else

Target.Value = "Ç"

Target.Offset(0, 1).Value = Abs(Target.Offset(0, 1).Value)

End If

Target.Offset(1, 0).Select

End If

End Function

' >>> FONCTION Signe nombre (positif ou negatif) en fonction de fleche (haut ou bas)

'Ç -> fleche haut police Wingdings 3

'È -> fleche bas police Wingdings 3

Public Function cellule_nombre_positif_negatif_fleche(ByVal Target As Range, num_ensemble_de_cellules As String)

'If Not Intersect(Target, Range(num_ensemble_de_cellules)) Is Nothing Then

If Target.Offset(0, -1).Value = "Ç" Then

Target.Value = Abs(Target.Value)

ElseIf Target.Offset(0, -1).Value = "È" Then

Target.Value = -Abs(Target.Value)

Else

Exit Function

End If

Target.Offset(1, 0).Select

'End If

End Function

' >>> FONCTION LORSQU'ON MODIFIE LA CELLULE

Private Sub Worksheet_Change(ByVal Target As Range)

Call cellule_nombre_positif_negatif_fleche(Target, "E:F")

End Sub

' >>> FONCTION LORSQU'ON DOUBLE CLIC SUR UNE CELLULE

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Call cellule_fleche_haut_bas(Target, "E:E")

End Sub

Bonjour,

A mon avis le problème vient du fait que tu n'as pas mis Application.EnableEvents = False, et donc tu fais un appel infini sur tes fonctions.

Ci-après ton code un peu revu, je pense qu'il est plus clair ainsi.

' MODULE DE CODE VBA

' >>> FONCTION Case fleche haut bas
'Ç -> fleche haut police Wingdings 3
'È -> fleche bas police Wingdings 3
Public Sub ChangerFlecheEtSigne(ByVal Target As Range)
  With Target
    If .Value = "Ç" Then
      .Value = "È"
    Else
      .Value = "Ç"
    End If
    ChangerSigneDe .Offset(0, 1)

    .Offset(1, 0).Select
  End With
End Sub

' >>> FONCTION Signe nombre (positif ou negatif) en fonction de fleche (haut ou bas)
'Ç -> fleche haut police Wingdings 3
'È -> fleche bas police Wingdings 3
Public Sub ChangerSigneDe(ByVal Target As Range)
  With Target
    If .Offset(0, -1).Value = "Ç" Then
      .Value = Abs(.Value)
    ElseIf .Offset(0, -1).Value = "È" Then
      .Value = -Abs(.Value)
    Else
      Exit Sub
    End If
  .Offset(1, 0).Select
  End With
End Sub

' MODULE DE CODE FEUILLE

' >>> FONCTION LORSQU'ON MODIFIE LA CELLULE
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Columns("E:F")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  ChangerSigneDe Target
  Application.EnableEvents = True
End Sub

' >>> FONCTION LORSQU'ON DOUBLE CLIC SUR UNE CELLULE
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  ChangerFlecheEtSigne Target
  Application.EnableEvents = True
End Sub

ça fonctionne, merci beaucoup !! :)

Bonne journée.

Merci pour votre retour, content d'aider.

N'oubliez pas de cloturer le post, bonne journée

Bonjour,

J'essaie de faire la même chose que pour les colonnes E;F, mais aussi pour les colonnes G:H (en plus). Je n'arrive pas à le faire fonctionner (j'ai fait plusieurs tests en rajoutant le même code en plus pour les colonnes G et H mais ça ne fonctionne pas).

Sauriez-vous comment faire s'il vous plaît ?

Merci.

Bonjour,

En suivant la même logique, ceci devrait fonctionner

' >>> FONCTION LORSQU'ON MODIFIE LA CELLULE
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("E:F,G:H")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  ChangerSigneDe Target
  Application.EnableEvents = True
End Sub

' >>> FONCTION LORSQU'ON DOUBLE CLIC SUR UNE CELLULE
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("E:E,G:G")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  ChangerFlecheEtSigne Target
  Application.EnableEvents = True
End Sub
Rechercher des sujets similaires à "vba colonne modifiable clic changement auto signe"