Double clic pour mettre mots et formules...

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais, à nouveau, votre aide pour ce problème de double clic…

voir fichier joint…difficiles à expliquer ici.

Je vous remercie pour le temps que vous voudrez bien vouloir m'accorder.

Bien amicalement,
Christian
 

Pièces jointes

  • Mots et formules par Double clic.xlsm
    15.6 KB · Affichages: 36

job75

XLDnaute Barbatruc
Bonjour Christian,

La formule entrée en colonne C permet l'insertion de lignes :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range, a, i As Variant
Set r = [B10:B30] 'à adapter
If Intersect(r, Target) Is Nothing Then Exit Sub
Cancel = True
a = Array("Total prestation(s)", "Total matériaux", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 0
If i = 3 Then i = 0
Target = a(i)
Target(1, 2) = IIf(i = 2, "", "=SUM(" & r(0, 2).Address(1, 0) & ":OFFSET(" & Target(1, 2).Address(0, 0) & ",-1,))")
End Sub
A+
 

Christian0258

XLDnaute Accro
Re, le forum, job75

Merci, job75, pour cette macro très technique qui fonctionne parfaitement.

J'ai dans le fichier joint V02, une amélioration à vous demander…

Merci pour votre aide si précieuse.

Bien à vous,
Christian
 

Pièces jointes

  • Mots et formules par Double clic V02.xlsm
    17.9 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re,

Il faut insérer un SOMME.SI dans la formule en colonne C :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range, a, i As Variant, f1$, f2$
Set r = [B10:B30] 'à adapter
If Intersect(r, Target) Is Nothing Then Exit Sub
Cancel = True
a = Array("Total prestation(s)", "Total matériaux", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 0
If i = 3 Then i = 0
Target = a(i)
f1 = r(0, 2).Address(1, 0) & ":OFFSET(" & Target(1, 2).Address(0, 0) & ",-1,)"
f2 = r(0).Address(1, 0) & ":OFFSET(" & Target.Address(0, 0) & ",-1,)"
Target(1, 2) = IIf(i = 2, "", "=SUM(" & f1 & ") -2*SUMIF(" & f2 & ",""Total*""," & f1 & ")")
End Sub
C'est technique...

A+
 

job75

XLDnaute Barbatruc
Re,

Il suffit d'utiliser 2 Areas :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range, a, i As Variant, f1$, f2$
Set r = [B10:B30,B35:B55] 'à adapter, 2 Areas
If Intersect(r, Target) Is Nothing Then Exit Sub
Set r = r.Areas(IIf(Intersect(Target, r.Areas(2)) Is Nothing, 1, 2)) 'redéfinition de la zone
Cancel = True
a = Array("Total prestation(s)", "Total matériaux", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 0
If i = 3 Then i = 0
Target = a(i)
f1 = r(0, 2).Address(1, 0) & ":OFFSET(" & Target(1, 2).Address(0, 0) & ",-1,)"
f2 = r(0).Address(1, 0) & ":OFFSET(" & Target.Address(0, 0) & ",-1,)"
Target(1, 2) = IIf(i = 2, "", "=SUM(" & f1 & ") -2*SUMIF(" & f2 & ",""Total*""," & f1 & ")")
End Sub
A+
 

job75

XLDnaute Barbatruc
Re,

Si l'on veut pouvoir insérer ou supprimer des lignes il suffit de nommer les 2 zones :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range, a, i As Variant, f1$, f2$
Set r = [Zone1,Zone2] 'à adapter, 2 Areas nommées
If Intersect(r, Target) Is Nothing Then Exit Sub
Set r = r.Areas(IIf(Intersect(Target, r.Areas(2)) Is Nothing, 1, 2))
Cancel = True
a = Array("Total prestation(s)", "Total matériaux", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 0
If i = 3 Then i = 0
Target = a(i)
f1 = r(0, 2).Address(1, 0) & ":OFFSET(" & Target(1, 2).Address(0, 0) & ",-1,)"
f2 = r(0).Address(1, 0) & ":OFFSET(" & Target.Address(0, 0) & ",-1,)"
Target(1, 2) = IIf(i = 2, "", "=SUM(" & f1 & ") -2*SUMIF(" & f2 & ",""Total*""," & f1 & ")")
End Sub
Fichier joint, il sera utile pour l'autre fil :

https://www.excel-downloads.com/threads/ajouter-une-page-sur-un-formulaire.20025389/

A+
 

Pièces jointes

  • Mots et formules par Double clic V03.xlsm
    25.2 KB · Affichages: 29

job75

XLDnaute Barbatruc
Bonjour Christian, le forum,

Nommer les tableaux est une fausse bonne idée s'il y en a plusieurs.

Il vaut mieux rechercher les titres "DÉTAIL" et "TOTAL T.T.C" :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim col%, deb$, fin$, i As Variant, r As Range, a, f1$, f2$
col = 2 'colonne B
deb = "DÉTAIL": fin = "TOTAL T.T.C" 'titres à rechercher
If Target.Column <> col Or Target.Row = 1 Then Exit Sub
If Target = deb Or Application.CountIf(Cells(1, col).Resize(Target.Row - 1), deb) = 0 Then Exit Sub
If Target = fin Or Application.CountIf(Cells(Target.Row + 1, col).Resize(Rows.Count - Target.Row), fin) = 0 Then Exit Sub
For i = Target.Row - 1 To 1 Step -1
    If Cells(i, col) = fin Then Exit Sub
    If Cells(i, col) = deb Then Set r = Cells(i, col): Exit For
Next
Cancel = True
a = Array("Total prestation(s)", "Total matériaux", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 0
If i = 3 Then i = 0
Target = a(i)
f1 = r(1, 2).Address(1, 0) & ":OFFSET(" & Target(1, 2).Address(0, 0) & ",-1,)"
f2 = r.Address(1, 0) & ":OFFSET(" & Target.Address(0, 0) & ",-1,)"
Target(1, 2) = IIf(i = 2, "", "=SUM(" & f1 & ") -2*SUMIF(" & f2 & ",""Total*""," & f1 & ")")
End Sub
Fichier V04.

A+
 

Pièces jointes

  • Mots et formules par Double clic V04.xlsm
    25.8 KB · Affichages: 35

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260