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

comment inverser Cette formule

ExcelDZ

XLDnaute Junior
bonjour
je veux inverser la première opération.
-par exemple je mets le nombre de jours de congé en cellule (G4) il me donne le dernier jour de congé maladie en (F4)
 

Pièces jointes

  • pointage.xlsx
    18 KB · Affichages: 81
  • pointage.xlsx
    18 KB · Affichages: 82

Jocelyn

XLDnaute Barbatruc
Re : comment inverser Cette formule

Bonjour le Forum,
Bonjour Katib,

Il me semble qu'un simple =E4+G4 devrait donner le résultat ou alors je n'ai pas compris la demande

Cordialement
 

job75

XLDnaute Barbatruc
Re : comment inverser Cette formule

Bonjour katib, Jocelyn, Papou-net, MOMO42,

Dans le fichier joint, quand 2 cellules en colonnes E F G sont renseignées, la 3ème est calculée.

La macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, P As Range, vide, n, a(), col
Set r = Intersect(Target, Range("E3:G" & Rows.Count), Me.UsedRange.EntireRow)
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées multiples(copier-coller)
  If CStr(r) <> "" And Not IsNumeric(r.Value2) Then Application.Undo: End
  Set P = Intersect([E:G], r.EntireRow)
  vide = Application.CountBlank(P) 'nombre de cellules vides
  If vide = 0 Then
    If P(2) <> P(1) + P(3) Then Application.Undo: End 'annulation
  ElseIf vide = 1 Then
    n = n + 1
    ReDim Preserve a(1 To 2, 1 To n)
    For col = 1 To 3
      If P(col) = "" Then Exit For
    Next col
    a(1, n) = P(col).Address
    Select Case col
      Case 1: a(2, n) = P(2) - P(3)
      Case 2: a(2, n) = P(1) + P(3)
      Case 3: a(2, n) = P(2) - P(1)
    End Select
  End If
Next r
For col = 1 To n
  Range(a(1, col)) = a(2, col)
Next col
End Sub
A+
 

Pièces jointes

  • pointage(1).xlsm
    23.1 KB · Affichages: 55
  • pointage(1).xlsm
    23.1 KB · Affichages: 56
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment inverser Cette formule

Re,

La macro précédente pouvait beuguer, utilisez celle-ci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, P As Range, col, vide, n, a()
Set r = Intersect(Target, Range("E3:G" & Rows.Count), Me.UsedRange.EntireRow)
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées multiples(copier-coller)
  Set P = Intersect([E:G], r.EntireRow)
  For col = 1 To 3
    If Not IsNumeric(P(col).Value2) Then Application.Undo: End 'annulation
  Next col
  vide = Application.CountBlank(P) 'nombre de cellules vides
  If vide = 0 Then
    If P(2).Value2 <> P(1).Value2 + P(3).Value2 Then Application.Undo: End 'annulation
  ElseIf vide = 1 Then
    n = n + 1
    ReDim Preserve a(1 To 2, 1 To n)
    For col = 1 To 3
      If P(col).Value2 = "" Then Exit For
    Next col
    a(1, n) = P(col).Address
    Select Case col
      Case 1: a(2, n) = P(2).Value2 - P(3).Value2
      Case 2: a(2, n) = P(1).Value2 + P(3).Value2
      Case 3: a(2, n) = P(2).Value2 - P(1).Value2
    End Select
  End If
Next r
For col = 1 To n
  Range(a(1, col)) = a(2, col)
Next col
End Sub
Edit: .Value2 est nécessaire partout si l'on entre des grands nombres...

Fichier (2).

Bonne nuit.
 

Pièces jointes

  • pointage(2).xlsm
    23.5 KB · Affichages: 46
  • pointage(2).xlsm
    23.5 KB · Affichages: 37
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : comment inverser Cette formule

Bonsoir Jocelyn, MOMO42, job75,
Bonsoir katib,

Une autre méthode plus courte:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("E3:G" & Rows.Count), Target) Is Nothing Then
    Application.EnableEvents = False
    Select Case Target.Column
      Case 5: If Target.Value = "" Then Range(Target.Offset(, 1), Target.Offset(, 2)).ClearContents
      Case 6: Target.Offset(, 1) = IIf(Target <> "", Target - Target.Offset(, -1), "")
      Case 7: Target.Offset(, -1) = IIf(Target <> "", Target + Target.Offset(, -2), "")
    End Select
    Application.EnableEvents = True
  End If
End Sub
A +

Cordialement.
 

Pièces jointes

  • pointage(2).xlsm
    19 KB · Affichages: 43
  • pointage(2).xlsm
    19 KB · Affichages: 48

job75

XLDnaute Barbatruc
Re : comment inverser Cette formule

Bonjour Papou-net, le forum,

Ta macro beugue si l'on efface ou entre une valeur dans une plage (G3:G4 par exemple).

Et les évènements sont alors désactivés...

Bonne journée.
 

Papou-net

XLDnaute Barbatruc
Re : comment inverser Cette formule

Bonjour à tous,

C'est tout-à-fait exact job75, je n'avais pas prévu cette éventualité.

Voilà comment y remédier:

Code:
Option Explicit
Dim Cel As Range

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("E3:G" & Rows.Count), Target) Is Nothing And Selection.Columns.Count = 1 Then
    Application.EnableEvents = False
    For Each Cel In Target
      Select Case Target.Column
        Case 5: If Cel.Value = "" Then Range(Cel.Offset(, 1), Cel.Offset(, 2)).ClearContents
        Case 6: If Not Cel.Offset(, -1) = "" Then Cel.Offset(, 1) = IIf(Cel <> "", Cel - Cel.Offset(, -1), "")
        Case 7
          If Not Cel.Offset(, -2) = "" Then Cel.Offset(, -1) = IIf(Cel <> "", Cel + Cel.Offset(, -2), "") Else Cel = ""
      End Select
    Next
    Application.EnableEvents = True
  End If
End Sub
Voir fichier en PJ.

Cordialement.
 

Pièces jointes

  • pointage(3).xlsm
    21.7 KB · Affichages: 48

Discussions similaires

Réponses
10
Affichages
398
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…