Formule incrémentation de cellule par clic

Bonjour à tous,

Un truc pas très compliqué à faire, je pense, mais bon j'y arrive pas.

Je souhaiterais une formule qui permette d'incrémenter chaque cellule, peu importe lesquelles, dans lesquelles je mettrais la formule d'incrémentation "+1"à chaque clic sur la cellule en question.

Si la cellule concernée est vide, un clic sur la cellule inscrit "1" dans la cellule et s'il y a déjà un chiffre ou un nombre dans la cellule, celui-ci est incrémenté d'une unité supplémentaire.

Chaque clic sur les cellules contenant la formule incrémente le chiffre ou le nombre présent dans la cellule de "+1".

En cliquant sur la cellule qui vient d'être incrémentée de "+1", si je supprime ou j'efface le nouveau chiffre ou nombre incrémenté, la cellule devient à nouveau vide et le processus redémarre.

Merci par avance et bonne fin de journée.

Bonjour fouggy, le forum,

Un essai par double-clic....

Code à placer dans le module de la feuille concernée (enregistrer le fichier au format .xlsm)...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If IsNumeric(Target) Or IsEmpty(Target) Then Target.Value = Target.Value + 1
  Cancel = True
End Sub
capture

Cordialement,

Super génial !

Exactement ce qu'il me fallait.

Un énorme merci

Oupsssssssssssssss,

En fait, je n'étais pas sûr que ce soit si facile à faire.

S'il était possible que ce code ne s'applique qu'aux 37 cellules très précisément du fichier que je joins ce serait du top classe sur mesure.

Dans le cas contraire, je me contenterais du code précédent.

Un grand merci à nouveau et bonne soirée.

Re,

Essaies ainsi:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))) Is Nothing Then

    If IsNumeric(Target) Or IsEmpty(Target) Then Target.Value = Target.Value + 1
     Cancel = True
    End If
End Sub

Cordialement,

Oky,

mais le 1er fichier avec le code s'exécute très bien sauf que ton code ne s'affiche pas dans la fenêtre des macros à exécuter.

Je pensais pouvoir accéder par cette fenêtre à ton code initial dans un module et faire un copier/coller du second sur le premier mais dans ladite fenêtre aucun non de macro à modifier ou exécuter ?

1re fois que je constate cela.

Tu as caché ton code où ? (qui fonctionne parfaitement bien au demeurant)

Tu es magicien ?

Re,

Vu que l'on utilise l'évènement double-clic de la feuille , le code est dans le module de la feuille concernée....donc Feuil1....

capture

EDIT: petite modification (qui ne change rien au fonctionnement).

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim plage As Range
  Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))            'définit les cellules sur lesquelles agit le double-clic

 If Not Intersect(Target, plage) Is Nothing Then     'si double-clic dans une des cellules définies
    If IsNumeric(Target) Or IsEmpty(Target) Then Target.Value = Target.Value + 1  'si cellule cible est numérique où vide, on incrémente de 1
     Cancel = True
    End If
End Sub

Cordialement,

Oky, Xorsankukai

Super, génial.

La dernière étape de mon projet, serait un code qui fasse l'inverse de ce qui a été demandé jusque-là.

37 cellules précises qui doivent s'incrémenter de "+1" à chaque double-clic.

Il me fallait expliquer tout cela dans un premier temps pour me faire comprendre et cela est parfait.

L' objectif final dans le même esprit serait un double-clic sur une des 37 cellules identifiées. Un double-clic sur une de ces cellules bien identifiées, remet le compteur à zéro de la cellule double-cliquée et incrémente toutes les autre cellules de "+1".

Si c'est possible, on arrive au tip top de ma démarche.

Ce sera ma dernière et définitive demande.

Quelle que soit ta réponse, un très très grand merci pour tout ce que tu as déjà fait.

A bientôt, j'espère, et bonne journée.

Bonjour fouggy,

De ce que j'ai compris....

Un clic dans la cellule incrémente toutes les autres cellules définies de 1 et remet à zéro la cellule cible....

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

 Application.ScreenUpdating = False     'évite le scintillement de l'écran

 Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))              'définit les cellules sur lesquelles on agit

 If Not Application.Intersect(Target, plage) Is Nothing Then   'si double-clic dans une des cellules définies
   For Each cel In plage          'boucle sur toutes les cellules définies
    If IsNumeric(cel) Or IsEmpty(cel) Then cel.Value = cel.Value + 1  'incrémente de 1
   Next cel
     Target.Value = 0      'remise à zéro de la cellule cible
     Cancel = True
    End If
End Sub

Cordialement,

Salut fouggy,

Salut Xorsankukai,

en supposant que les cellules-cible resteront colorées avec, en prime, une désincrémentation par clic-droit.

Public Sub Calcul(ByVal sAdr$, iIdx%)
'
Dim rCel As Range
'
For Each rCel In Range("C3:AM5")
    If rCel.Interior.ColorIndex > 2 Then
        If rCel.Address = sAdr And iIdx < 2 Then rCel.Value = WorksheetFunction.Max(0, CInt(rCel.Value) + iIdx)
        If iIdx = 2 Then rCel.Value = IIf(rCel.Address = sAdr, 0, CInt(rCel.Value) + 1)
    End If
Next
'
End Sub

A+

30fouggy.xlsm (23.47 Ko)

Salut Xorsankukai,

Franchement du top.

Est-ce que cette incrémentation peut se faire, pour chaque cellule concernée, en fonction du chiffre contenu dans la cellule précédente ?

Dans le fichier joint, les incrémentations sont de +1 sauf pour L4C4 (+2) ; L3R3 (+8) ; L4X4 (+6) et L5AJ5 (+3).

Le changement d'incrémentation se ferait alors manuellement.

Bonne journée

15fouggy.xlsm (16.63 Ko)

Bonjour fouggy, le forum,

Un essai.....de ce que j'ai compris...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim plage As Range
  Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))            'définit les cellules sur lesquelles agit le double-clic

 If Not Intersect(Target, plage) Is Nothing Then     'si double-clic dans une des cellules définies
    If IsNumeric(Target) Or IsEmpty(Target) Then   'si cellule cible est numérique où vide, on incrémente
     Select Case Target.Address
      Case Is = "$C$4"
       Target.Value = Target.Value + 2     ' si cible=C4 on incrémente de 2
      Case Is = "$R$3"
       Target.Value = Target.Value + 8     ' si cible=R3 on incrémente de 8
      Case Is = "$X$4"
       Target.Value = Target.Value + 6     ' si cible=X4 on incrémente de 6
      Case Is = "$AJ$5"
       Target.Value = Target.Value + 3     ' si cible=AJ5 on incrémente de 3
      Case Else
       Target.Value = Target.Value + 1     ' pour toutes les autres, on incrémente de 1
      End Select
    End If
 End If
 Cancel = True
End Sub

Pour le cas inverse....un essai également.....

Spoiler
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim plage As Range, cel As Range

 Application.ScreenUpdating = False     'évite le scintillement de l'écran

 Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))              'définit les cellules sur lesquelles on agit

 If Not Application.Intersect(Target, plage) Is Nothing Then   'si double-clic dans une des cellules définies
   For Each cel In plage          'boucle sur toutes les cellules définies
    If IsNumeric(cel) Or IsEmpty(cel) Then
     Select Case cel.Address
      Case Is = "$C$4"
       cel.Value = cel.Value + 2     ' si cible=C4 on incrémente de 2
      Case Is = "$R$3"
       cel.Value = cel.Value + 8     ' si cible=R3 on incrémente de 8
      Case Is = "$X$4"
       cel.Value = cel.Value + 6     ' si cible=X4 on incrémente de 6
      Case Is = "$AJ$5"
       cel.Value = cel.Value + 3     ' si cible=AJ5 on incrémente de 3
      Case Else
       cel.Value = cel.Value + 1     ' pour toutes les autres, on incrémente de 1
      End Select
     End If
   Next cel
     Target.Value = 0      'remise à zéro de la cellule cible
     Cancel = True
 End If
End Sub

Cordialement,

Bonjour xorsankukai,

Je viens de me relire et c'est moi qui n'ai pas été très clair sur ce coup là.Tout d'abord on reste définitivement sur l'incrémentation inverse et jusque-là tout est au poil.

Après je sais pas si la suite est possible :

Il faudrait que cette incrémentation se fasse en fonction du chiffre contenu dans la cellule précédente, lequel chiffre peut-être différent. Le schéma serait le suivant :

Pour incrémenter la cellule L4C4, on regarde d'abord le chiffre contenu dans la cellule précédente et donc L4B4 et on incrémente en fonction de ce chiffre.

Par exemple, dans la cellule L4B4 on va trouver (x1), on incrémente donc L4C4 de 1.

On passe ensuite à la seconde cellule à incrémenter et donc la L3F3. Pour se faire on regarde d'abord le contenu de la cellule L3E3. Par exemple, dans la cellule L3E3 on va trouver (x4), on incrémente donc L3F3 de 4.

On passe ensuite à la 3me cellule à incrémenter et donc la L4F4. Pour se faire on regarde d'abord le contenu de la cellule L4E4. Par exemple, dans la cellule L4E4 on va trouver (x2), on incrémente donc L4F4 de 2.

On passe ensuite à la 4me cellule à incrémenter et donc la L5F5. Pour se faire on regarde d'abord le contenu de la cellule L5E5. Par exemple, dans la cellule L5E5 on va trouver (x5), on incrémente donc L5F5 de 5.

Et ainsi de suite.

Sachant que :

l'incrémentation de la cellule L4C4 se fera toujours en fonction du chiffre trouvé dans la cellule L4B4

l'incrémentation de la cellule L3F3 se fera toujours en fonction du chiffre trouvé dans la cellule L3E3

l'incrémentation de la cellule L4F4 se fera toujours en fonction du chiffre trouvé dans la cellule L4E4

l'incrémentation de la cellule L5F5 se fera toujours en fonction du chiffre trouvé dans la cellule L5E5

l'incrémentation de la cellule L3I3 se fera toujours en fonction du chiffre trouvé dans la cellule L3H3

l'incrémentation de la cellule L4I4 se fera toujours en fonction du chiffre trouvé dans la cellule L4H4

l'incrémentation de la cellule L5I5 se fera toujours en fonction du chiffre trouvé dans la cellule L5H5

l'incrémentation de la cellule L3O3 se fera toujours en fonction du chiffre trouvé dans la cellule L3N3

l'incrémentation de la cellule L4O4 se fera toujours en fonction du chiffre trouvé dans la cellule L4N4

l'incrémentation de la cellule L5O5 se fera toujours en fonction du chiffre trouvé dans la cellule L5N5

l'incrémentation de la cellule L3R3 se fera toujours en fonction du chiffre trouvé dans la cellule L3Q3

l'incrémentation de la cellule L4R4 se fera toujours en fonction du chiffre trouvé dans la cellule L4Q4

l'incrémentation de la cellule L5R5 se fera toujours en fonction du chiffre trouvé dans la cellule L5Q5

l'incrémentation de la cellule L3U3 se fera toujours en fonction du chiffre trouvé dans la cellule L3T3

l'incrémentation de la cellule L4U4 se fera toujours en fonction du chiffre trouvé dans la cellule L4T4

l'incrémentation de la cellule L5U5 se fera toujours en fonction du chiffre trouvé dans la cellule L5T5

l'incrémentation de la cellule L3X3 se fera toujours en fonction du chiffre trouvé dans la cellule L3W3

l'incrémentation de la cellule L4X4 se fera toujours en fonction du chiffre trouvé dans la cellule L4W4

l'incrémentation de la cellule L5X5 se fera toujours en fonction du chiffre trouvé dans la cellule L5W5

l'incrémentation de la cellule L3AA3 se fera toujours en fonction du chiffre trouvé dans la cellule L3Z3

l'incrémentation de la cellule L4AA4 se fera toujours en fonction du chiffre trouvé dans la cellule L4Z4

l'incrémentation de la cellule L5AA5 se fera toujours en fonction du chiffre trouvé dans la cellule L5Z5

l'incrémentation de la cellule L3AD3 se fera toujours en fonction du chiffre trouvé dans la cellule L3AC3

l'incrémentation de la cellule L4AD4 se fera toujours en fonction du chiffre trouvé dans la cellule L4AC4

l'incrémentation de la cellule L5AD5 se fera toujours en fonction du chiffre trouvé dans la cellule L5AC5

l'incrémentation de la cellule L3AG3 se fera toujours en fonction du chiffre trouvé dans la cellule L3AF3

l'incrémentation de la cellule L4AG4 se fera toujours en fonction du chiffre trouvé dans la cellule L4AF4

l'incrémentation de la cellule L5AG5 se fera toujours en fonction du chiffre trouvé dans la cellule L5AF5

l'incrémentation de la cellule L3AJ3 se fera toujours en fonction du chiffre trouvé dans la cellule L3AI3

l'incrémentation de la cellule L4AJ4 se fera toujours en fonction du chiffre trouvé dans la cellule L4AI4

l'incrémentation de la cellule L5AJ5 se fera toujours en fonction du chiffre trouvé dans la cellule L5AI5

l'incrémentation de la cellule L3AM3 se fera toujours en fonction du chiffre trouvé dans la cellule L3AL3

l'incrémentation de la cellule L4AM4 se fera toujours en fonction du chiffre trouvé dans la cellule L4AL4

l'incrémentation de la cellule L5AM5 se fera toujours en fonction du chiffre trouvé dans la cellule L5AL5

Et donc, en double-cliquant sur l'une des cellules incrémentables, le compteur de celle-ci revient à zéro et toutes les autres

s'incrémentent simultanémment, non plus de 1 mais en fonction du chiffre trouvé dans la cellule précédente ou correspondante, selon la correspondance que je viens d'établir.

Voili, voilou, j'espère avoir été plus clair

Bonne journée.

Re,

J'espère avoir compris...

On incrémente toutes les cellules des valeurs des cellules situées à leur gauche, sauf la valeur de la cellule cible qui elle revient à 0 ?

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

 Application.ScreenUpdating = False     'évite le scintillement de l'écran

 Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))              'définit les cellules sur lesquelles on agit

 If Not Application.Intersect(Target, plage) Is Nothing Then   'si double-clic dans une des cellules définies
   For Each cel In plage          'boucle sur toutes les cellules définies
    If IsNumeric(cel) Or IsEmpty(cel) Then
     cel.Value = cel.Value + cel.Offset(0, -1).Value  'valeur de la cellule incrémentée de la valeur de la cellule de gauche
     End If
   Next cel
     Target.Value = 0      'remise à zéro de la cellule cible
     Cancel = True
 End If
End Sub

Cordialement,

Juste parfait Xorsankukai,

Un immense merci pour ton aide.

Une excellente journée à toi.

Re Xorsankukai,

Je me permets de revenir vers toi.

Le code que tu m'as créé est une véritable Rolls pour ce que je compte en faire.

Je l'ai testé toute la journée. C'est du top.

Sauf que j'ai oublié que cette Rolls, il fallait la peindre, lol.

Et donc en fait, si cela est possible, il me faudrait des alertes couleur (une seule, la jaune vif).

Le truc est le suivant, sachant que ton code est parfait et qu'il ne faudrait pas que ce rajout éventuel, si tu le veux bien, modifie les résultats du code initial :

Nous sommes bien d'accord sur le fait qu'en l'état actuel des choses, un double-clic sur la cellule active remet le compteur de celle -ci à zéro et les incrémentations, pour les cellules concernées se font en fonction du chiffre contenu dans la cellule gauche de chaque cellule concernée.

Et donc en fonction de ce chiffre (de chaque cellule gauche) que je fais évoluer manuellement et qui conditionne les incrémentations suivantes, à chaque double-clic, les résultats obtenus dans chaque cellule varient tous à la hausse, sauf pour la cellule cible qui revient à zéro.

Dès lors je souhaiterais, si c'est possible, que, simultanément, lorsque une de ces cellules atteint un certain seuil, la cellule se mette en surbrillance jaune pour alerter, et ce une seule fois.

Au prochain double-clic, l'alerte passée, la cellule en question redevient sans surbrillance et ce jusqu'au prochain seuil atteint.

Les seuils que j'ai définie et qui correspondent à mes besoins sont les suivants :

Seuil 1 = 31

Seuil 2 = 61

Seuil 3 = 91

Seuil 4 = 121

Seuil 5 = 151

Seuil 6 = 181

Seuil 7 = 211

Seuil 8 = 241

Seuil 9 = 271

Et donc, lorsqu'à la suite d'un nouveau double-clic sur la cellule active (qui elle revient à zéro) chaque autre cellule dont la nouvelle incrémentation apporte un résultat cumulé différent faisant dépasser l'un de ces seuils, la cellule se met en surbrillance jaune pour m'alerter. Une seule fois.

Au prochain double-clic, les alertes effectuée (une seule fois) en surbrillance disparaîssent, mais d'autres alertes appararaîssent simultanément. Celles de cellules autres qui suite à ce nouveau double-clic voient leur résultat dépasser un de ces seuils à leur tour.

Voilà, j'ai essayé de m'appliquer pour expliquer au mieux.

Alors, je ne sais pas si c'est dans tes cordes, ni si tu as le temps de rajouter de la peinture surbrillante à ma nouvelle Rolls, lol.

En tous les cas, excellente soirée à toi

Bonjour fouggy, le forum,

Un essai....

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

 Application.ScreenUpdating = False     'évite le scintillement de l'écran

 Set plage = Union(Range("C4"), _
   Range("F3:F5"), _
   Range("I3:I5"), _
   Range("L3:L5"), _
   Range("O3:O5"), _
   Range("R3:R5"), _
   Range("U3:U5"), _
   Range("X3:X5"), _
   Range("AA3:AA5"), _
   Range("AD3:AD5"), _
   Range("AG3:AG5"), _
   Range("AJ3:AJ5"), _
   Range("AM3:AM5"))              'définit les cellules sur lesquelles on agit

 If Not Application.Intersect(Target, plage) Is Nothing Then   'si double-clic dans une des cellules définies
   For Each cel In plage          'boucle sur toutes les cellules définies
    On Error Resume Next          'ignore les erreurs (si cellule de gauche non numérique par exemple)
     If IsNumeric(cel) Or IsEmpty(cel) Then
      cel.Value = cel.Value + cel.Offset(0, -1).Value  'valeur de la cellule incrémentée de la valeur de la cellule de gauche
      End If
       Select Case cel.Value
        Case Is = 31, 61, 91, 121, 151, 181, 211, 241, 271   'tes critères
         cel.Interior.ColorIndex = 6  'couleur jaune
        Case Else
         cel.Interior.ColorIndex = 48 'couleur grise
        End Select
   Next cel
     Target.Value = 0      'remise à zéro de la cellule cible
     Cancel = True
 End If
End Sub

Cordialement,

Slt xorsankukai, Slt le Forum,

Euh, non....

Rien ne se produit de mon côté.

Un petit coup de pompe ?

Re,

Rien ne se produit de mon côté.

capture capture

Alors là, je ne comprends pas, j'ai beau tester, ça fonctionne correctement chez moi...où alors je n'ai pas compris ta demande..

  • Double-clic dans la cellule remet la cellule à 0 et incrémente les autres de la valeur de la cellule de gauche.
  • Si une des cellules atteint la valeur seuil: couleur jaune sinon grise.

Cordialement,

Re,

Je viens de faire quelques tests.

En double-cliquant au hazard des alertes sont apparues notamment en ne double-cliquant que sur la cellule L3AM3 par exemple.

En ne double-cliquant que sur cette cellule L3AM3 pour faire avancer les compteurs de toutes les autres cellules, rien ne se passe jusqu'à ce que les compteurs des cellules L4L4 et L3AD3 (qui avancent au même rythme) arrivent au seuil 91. Ces deux dernières cellules se mettent effectivement en alerte, mais rien pour les seuils précédents de ces deux dernières cellules et ni pour aucun seuil des autres cellules !

Rechercher des sujets similaires à "formule incrementation clic"