Cherche aide pour simplifier une macro

INFINITY100

XLDnaute Occasionnel
Bonsoir tout le monde

Voila j'ai la macro ci-dessous créée par un débutant que je trouve un peu longue du coup je cherche à la rendre simple pour quel soit assez facile à comprendre

voici la macro

Code:
Sub auto_open()

    Sheets("Bilan").Select
    
    Application.ScreenUpdating = False
    Sheets("Bilan").Unprotect Password:="123456789"
    Range("B6").Select
    ActiveCell.FormulaR1C1 = "=SUM(BD!R[-4]C[6]:R[1048570]C[6])"
    Range("B8").Select
    ActiveCell.FormulaR1C1 = "=SUM(encaissement!R[-6]C:R[1048568]C)"
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "=SUM(Creances!R[-8]C[3]:R[1048566]C[3])"
    Range("B12").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(SUM(R[-6]C[2]:R[-2]C[2])>SUM(R[-6]C:R[-2]C),SUM(R[-6]C[2]:R[-2]C[2])-SUM(R[-6]C:R[-2]C),0)"
        
    Range("D6").Select
    ActiveCell.FormulaR1C1 = "=SUM(BD!R[-4]C[2]:R[1048570]C[2])"
    Range("D8").Select
    ActiveCell.FormulaR1C1 = "=SUM(Charges!R[-6]C:R[1048568]C)"
    Range("D10").Select
    ActiveCell.FormulaR1C1 = "=SUM(Dettes!R[-8]C[1]:R[1048566]C[1])"
    Range("D12").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(SUM(R[-6]C[-2]:R[-2]C[-2])>SUM(R[-6]C:R[-2]C),SUM(R[-6]C[-2]:R[-2]C[-2])-SUM(R[-6]C:R[-2]C),0)"
    Range("B14").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-2]C)"
    Range("D14").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-2]C)"
    Range("A15:D15").Select
    Sheets("Feuille démarrage").Select
    
    Sheets("Bilan").Protect Password:="123456789"
    
    Sheets("Divers").Select
    
    Application.ScreenUpdating = False
    Sheets("Divers").Unprotect Password:="123456789"
    Range("A2").Select
        ActiveCell.FormulaR1C1 = "=TODAY()"
    Range("B2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(SUM(BD!R2C6:R1048576C6)>0,SUM(BD!R2C6:R1048576C6),0)"
    Range("C2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(SUM(BD!R2C8:R1048576C8)>0,SUM(BD!R2C8:R1048576C8),0)"
    Range("D2").Select
        ActiveCell.FormulaR1C1 = "=IF((R2C3-R2C2)<>0,(R2C3-R2C2),0)"
    Range("E2").Select
        ActiveCell.FormulaR1C1 = "=IF(R2C2<>0,AVERAGE(BD!R2C10:R1048576C10),0)"
    Range("F2").Select
        ActiveCell.FormulaR1C1 = _
             "=SUMIF(Dettes!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
    Range("G2").Select
        ActiveCell.FormulaR1C1 = _
            "=SUMIF(Dettes!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
    Range("H2").Select
        ActiveCell.FormulaR1C1 = "=R2C6+R2C7"
    Range("I2").Select
        ActiveCell.FormulaR1C1 = _
            "=SUMIF(Creances!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
    Range("J2").Select
        ActiveCell.FormulaR1C1 = _
            "=SUMIF(Creances!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
    Range("K2").Select
        ActiveCell.FormulaR1C1 = "=R2C9+R2C10"
    Range("L2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(SUM(Charges!R2C4:R1048576C4)<>0,SUM(Charges!R2C4:R1048576C4),0)"
    Range("P2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(SUM(encaissement!R2C2:R1048576C2)<>0,SUM(encaissement!R2C2:R1048576C2),0)"
    Range("S2").Select
        ActiveCell.FormulaR1C1 = "=R2C3-R2C16"
    Range("T2").Select
        ActiveCell.FormulaR1C1 = "=IF(Bilan!R12C2<>"""",Bilan!R12C2,0)"
    Range("U2").Select
        ActiveCell.FormulaR1C1 = "=IF(Bilan!R12C4<>"""",Bilan!R12C4,0)"
    Range("V2").Select
        ActiveCell.FormulaR1C1 = "=R2C3+R2C16+R2C11+R2C20"
    Range("W2").Select
    ActiveCell.FormulaR1C1 = "=R2C2+R2C12+R2C8+R2C21"

    Sheets("Divers").Protect Password:="123456789"
    Menu.Show
    Application.ScreenUpdating = True
    
    Range("A1").Select
End Sub

Merci pour votre aide

Cordialement
 

INFINITY100

XLDnaute Occasionnel
Re : Cherche aide pour simplifier une macro

hhhhh oui gosselien tu as raison

voici donc en pièce jointe le fichier exemple
 

Pièces jointes

  • Exemple.xlsm
    60.4 KB · Affichages: 45
  • Exemple.xlsm
    60.4 KB · Affichages: 50
  • Exemple.xlsm
    60.4 KB · Affichages: 48

Victor21

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Re, bonsoir gosselien :)

Il semble que vous n'avez pas vu ce conseil :
- ILLUSTREZ VOTRE DEMANDE : Afin de faciliter la compréhension de votre demande il est conseillé de joindre un PETIT fichier qui illustre votre question précise et montre les résultats que vous cherchez à obtenir.

Pour le module 1, je vous propose dans un premier temps :
VB:
Sub auto_open()
    Application.ScreenUpdating = False
    With Sheets("Bilan")
        .Unprotect Password:="123456789"
        .Range("B6").FormulaR1C1 = "=SUM(BD!R[-4]C[6]:R[1048570]C[6])"
        .Range("B8").FormulaR1C1 = "=SUM(encaissement!R[-6]C:R[1048568]C)"
        .Range("B10").FormulaR1C1 = "=SUM(Creances!R[-8]C[3]:R[1048566]C[3])"
        .Range("B12").FormulaR1C1 = _
        "=IF(SUM(R[-6]C[2]:R[-2]C[2])>SUM(R[-6]C:R[-2]C),SUM(R[-6]C[2]:R[-2]C[2])-SUM(R[-6]C:R[-2]C),0)"
        .Range("D6").FormulaR1C1 = "=SUM(BD!R[-4]C[2]:R[1048570]C[2])"
        .Range("D8").FormulaR1C1 = "=SUM(Charges!R[-6]C:R[1048568]C)"
        .Range("D10").FormulaR1C1 = "=SUM(Dettes!R[-8]C[1]:R[1048566]C[1])"
        .Range("D12").FormulaR1C1 = _
        "=IF(SUM(R[-6]C[-2]:R[-2]C[-2])>SUM(R[-6]C:R[-2]C),SUM(R[-6]C[-2]:R[-2]C[-2])-SUM(R[-6]C:R[-2]C),0)"
        .Range("B14").FormulaR1C1 = "=SUM(R[-8]C:R[-2]C)"
        .Range("D14").FormulaR1C1 = "=SUM(R[-8]C:R[-2]C)"
        .Protect Password:="123456789"
    End With
    With Sheets("Divers")
        .Unprotect Password:="123456789"
        .Range("A2").FormulaR1C1 = "=TODAY()"
        .Range("B2").FormulaR1C1 = _
        "=IF(SUM(BD!R2C6:R1048576C6)>0,SUM(BD!R2C6:R1048576C6),0)"
        .Range("C2").FormulaR1C1 = _
        "=IF(SUM(BD!R2C8:R1048576C8)>0,SUM(BD!R2C8:R1048576C8),0)"
        .Range("D2").FormulaR1C1 = "=IF((R2C3-R2C2)<>0,(R2C3-R2C2),0)"
        .Range("E2").FormulaR1C1 = "=IF(R2C2<>0,AVERAGE(BD!R2C10:R1048576C10),0)"
        .Range("F2").FormulaR1C1 = _
        "=SUMIF(Dettes!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
        .Range("G2").FormulaR1C1 = _
        "=SUMIF(Dettes!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
        .Range("H2").FormulaR1C1 = "=R2C6+R2C7"
        .Range("I2").FormulaR1C1 = _
        "=SUMIF(Creances!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
        .Range("J2").FormulaR1C1 = _
        "=SUMIF(Creances!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
        .Range("K2").FormulaR1C1 = "=R2C9+R2C10"
        .Range("L2").FormulaR1C1 = _
        "=IF(SUM(Charges!R2C4:R1048576C4)<>0,SUM(Charges!R2C4:R1048576C4),0)"
        .Range("P2").FormulaR1C1 = _
        "=IF(SUM(encaissement!R2C2:R1048576C2)<>0,SUM(encaissement!R2C2:R1048576C2),0)"
        .Range("S2").FormulaR1C1 = "=R2C3-R2C16"
        .Range("T2").FormulaR1C1 = "=IF(Bilan!R12C2<>"""",Bilan!R12C2,0)"
        .Range("U2").FormulaR1C1 = "=IF(Bilan!R12C4<>"""",Bilan!R12C4,0)"
        .Range("V2").FormulaR1C1 = "=R2C3+R2C16+R2C11+R2C20"
        .Range("W2").FormulaR1C1 = "=R2C2+R2C12+R2C8+R2C21"
        .Protect Password:="123456789"
    End With
    
    Menu.Show
    Application.ScreenUpdating = True
End Sub
Je n'ai pas pû tester, faute d'infos dans votre fichier, mais si cela vous convient, vous saurez sûrement appliquer la méthode aux autres codes :)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Bonsoir.
Je vois dans ce code beaucoup de IF(x>y,x-y,0) où x et y sont d'assez longues expressions, qui pourraient être avantageusement remplacées par MAX(x-y,0)
Ou des IF(x>0,x,0) par MAX(x,0)
 

Dranreb

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Bonjour.

Par exemple au lieu de
.Range("B12").FormulaR1C1 = _
"=IF(SUM(R[-6]C[2]:R[-2]C[2])>SUM(R[-6]C:R[-2]C),SUM(R[-6]C[2]:R[-2]C[2])-SUM(R[-6]C:R[-2]C),0)"
Ceci :
.Range("B12").FormulaR1C1 = _
"=MAX(SUM(R[-6]C[2]:R[-2]C[2])-SUM(R[-6]C:R[-2]C),0)"

et au lieu de :
.Range("B2").FormulaR1C1 = _
"=IF(SUM(BD!R2C6:R1048576C6)>0,SUM(BD!R2C6:R1048576C6),0)"
ceci :
.Range("B2").FormulaR1C1 = _
"=MAX(SUM(BD!R2C6:R1048576C6),0)"

 
Dernière édition:

INFINITY100

XLDnaute Occasionnel
Re : Cherche aide pour simplifier une macro

Merci mon ami

Mais tu sera super gentil si tu me modifie le reste des formules ci-dessous car étant débutant je me pers sur les autres formules hhhh:)

Code:
With Sheets("Divers")
        .Unprotect Password:="123456789"
        .Range("A2").FormulaR1C1 = "=TODAY()"
        .Range("B2").FormulaR1C1 = _
        "=MAX(SUM(BD!R2C6:R1048576C6),0)"
        .Range("C2").FormulaR1C1 = _
        "=MAX(SUM(BD!R2C8:R1048576C8),0)"
        .Range("D2").FormulaR1C1 = "=IF((R2C3-R2C2)<>0,(R2C3-R2C2),0)"
        .Range("E2").FormulaR1C1 = "=IF(R2C2<>0,AVERAGE(BD!R2C10:R1048576C10),0)"
        .Range("F2").FormulaR1C1 = _
        "=SUMIF(Dettes!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
        .Range("G2").FormulaR1C1 = _
        "=SUMIF(Dettes!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
        .Range("H2").FormulaR1C1 = "=R2C6+R2C7"
        .Range("I2").FormulaR1C1 = _
        "=SUMIF(Creances!R2C5:R1048576C5,"">=0"",Dettes!R2C5:R1048576C5)"
        .Range("J2").FormulaR1C1 = _
        "=SUMIF(Creances!R2C5:R1048576C5,""<=0"",Dettes!R2C5:R1048576C5)"
        .Range("K2").FormulaR1C1 = "=R2C9+R2C10"
        .Range("L2").FormulaR1C1 = _
        "=IF(SUM(Charges!R2C4:R1048576C4)<>0,SUM(Charges!R2C4:R1048576C4),0)"
        .Range("P2").FormulaR1C1 = _
        "=IF(SUM(encaissement!R2C2:R1048576C2)<>0,SUM(encaissement!R2C2:R1048576C2),0)"
        .Range("S2").FormulaR1C1 = "=R2C3-R2C16"
        .Range("T2").FormulaR1C1 = "=IF(Bilan!R12C2<>"""",Bilan!R12C2,0)"
        .Range("U2").FormulaR1C1 = "=IF(Bilan!R12C4<>"""",Bilan!R12C4,0)"
        .Range("V2").FormulaR1C1 = "=R2C3+R2C16+R2C11+R2C20"
        .Range("W2").FormulaR1C1 = "=R2C2+R2C12+R2C8+R2C21"
        .Protect Password:="123456789"
    End With
 

Victor21

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Bonsoir, INFINITY100

Je trouve que Dranreb est déjà super gentil :
Il vous a expliqué le principe en post 7, et l'a clairement explicité à l'aide de plusieurs exemples en post 9.

Si vous désirez progresser, je vous conseille de faire l'effort de comprendre la simplification.
Vous pourrez alors l'appliquer par vous-même aux autres lignes.
;)

PS : dans cette ligne :
.Range("D2").FormulaR1C1 = "=IF((R2C3-R2C2)<>0,(R2C3-R2C2),0)"
que se passe-t-il si vous écrivez simplement :
.Range("D2").FormulaR1C1 ="=R2C3-R2C2"
- si la différence est nulle?
- si la différence est non nulle?

 
Dernière édition:

INFINITY100

XLDnaute Occasionnel
Re : Cherche aide pour simplifier une macro

Merci victor je vais alors creuser la tête mais dés que j'aurai fini je mettrai le résultat pour correction espérant que vous serez là hhhh :)

Et pour la question au fait c'est pour un calcul d'écart entre un montant achat et un montant vente à partir d'une BD voir le fichier joint

Encore une fois s'il y a une meilleure idée elle est la bienvenue :D
 

Pièces jointes

  • Ecart.xlsx
    8.9 KB · Affichages: 25
  • Ecart.xlsx
    8.9 KB · Affichages: 32
  • Ecart.xlsx
    8.9 KB · Affichages: 28
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Bonsoir à tous.

Bonsoir, INFINITY100

Je trouve que Dranreb est déjà super gentil :
Il vous a expliqué le principe en post 7, et l'a clairement explicité à l'aide de plusieurs exemples en post 9.

Si vous désirez progresser, je vous conseille de faire l'effort de comprendre la simplification.
Vous pourrez alors l'appliquer par vous-même aux autres lignes.

(...)
Je le trouve d'autant plus gentil qu'on n'est même pas sûr qu'INFINITY100 prenne la peine de jeter un coup d’œil sur nos propositions...
Voir, par exemple, https://www.excel-downloads.com/threads/cherche-une-formule-avec-conditions.227791/.​


Bonne nuit.


ℝOGER2327
#7831


Samedi 14 Clinamen 142 (Sortie d’Albrecht Dürer, hermétiste - fête Suprême Quarte)
16 Germinal An CCXXIII, 9,1211h - laitue
2015-W14-7T21:53:26Z
 

Victor21

XLDnaute Barbatruc
Re : Cherche aide pour simplifier une macro

Re, hhhh :)

le montant des achats peut-il être négatif ?
Si ce n'est pas le cas, votre test :
=SI(SOMME(BD!$F$2:$F$1048576)>0;SOMME(BD!$F$2:$F$1048576);0)
est inutile.
=SOMME(BD!$F$2:$F$1048576)
est suffisant.
Mais avez-vous lu -compris- ma précédente intervention ???

Bonsoir, ROGER2327
 
Dernière édition:

INFINITY100

XLDnaute Occasionnel
Re : Cherche aide pour simplifier une macro

Salut Roger

Non pour vos réponses je les suis un après l'autre sauf que ma précédente demande dont tu as mis le lien j'avoue je l'est raté en tout cas merci beaucoup pour la réponse c'est assez sympa
 

Discussions similaires