VBA Worksheet change - Row

Bonjour ,

J'aurais aimer savoir si il etais possible de faire un sorte que excel ne calcule que la ligne qui a ete modifier lors d'un changement .

A l'heure actuel j'ai cette macro : (on modifie uniquement dans "feuille" le reste calcule")

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Feuille
Dim WS As Worksheet
If Flag = True Then Flag = False: Exit Sub
Feuille = ActiveSheet.Name
If Application.Calculation = xlCalculationManual And Feuille <> "Données" Then
    Flag = True
    On Error Resume Next
    For Each WS In Worksheets(Array("H" & Feuille, "B" & Feuille, "Bilan", Feuille))
        With WS
            .Calculate
        End With
    Next WS
    Flag = False
End If
End Sub

merci d'avance

Bonjour,

je pense que c'est possible en désignant la plage voulue avec le paramètre Calculate :

Sheets("Feuil1").Range("A1:A50").Calculate

@ vérifier...

@ bientôt

LouReeD

Bonjour,

Il suffit de consulter l'aide de la méthode Calculate pour avoir la réponse :

https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.calculate

Je vais essayer ça desuite merci de cette reponse en tous cas

Edit et je n'etais pas sur de comprendre pour comment marcher le usedrange

Pour une fois où je pense bien !

@ bientôt

LouReeD

Bon c'est fonctionnel mais pas optimal en therme de vitesse ^^"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Feuille
If Flag = True Then Flag = False: Exit Sub
Feuille = ActiveSheet.Name
If Application.Calculation = xlCalculationManual And Feuille <> "Données" Then
    Flag = True
    On Error Resume Next
            Worksheets("H" & Feuille).UsedRange.Range("B8:AF65").Calculate
            Worksheets("B" & Feuille).UsedRange.Range("B8:EG65").Calculate
            Worksheets("Bilan").UsedRange.Range("B8:DU65").Calculate
            Worksheets("B" & Feuille).UsedRange.Range("CE8:CM65").Calculate
            Worksheets(Feuille).UsedRange.Range("AL8:CT65").Calculate
    Flag = False
End If
End Sub

Bon c'est fonctionnel mais pas optimal en therme de vitesse

J'ai du mal à comprendre pourquoi tu ne calcules pas la totalité du classeur (Application.Calculate).

Car il est assez lourd en formule vraiment.

Bon c'est fonctionnel mais pas optimal en therme de vitesse ^^"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Feuille
If Flag = True Then Flag = False: Exit Sub
Feuille = ActiveSheet.Name
If Application.Calculation = xlCalculationManual And Feuille <> "Données" Then
    Flag = True
    On Error Resume Next
            Worksheets("H" & Feuille).UsedRange.Range("B8:AF65").Calculate
            Worksheets("B" & Feuille).UsedRange.Range("B8:EG65").Calculate
            Worksheets("Bilan").UsedRange.Range("B8:DU65").Calculate
            Worksheets("B" & Feuille).UsedRange.Range("CE8:CM65").Calculate
            Worksheets(Feuille).UsedRange.Range("AL8:CT65").Calculate
    Flag = False
End If
End Sub

On resume Next n'a aucune raison d'exister.

La syntaxe .UsedRange.Range("B8:AF65") est incorrecte, il faudrait au choix :

  • .UsedRange
  • .Range("B8:AF65")
  • Intersect(... , ...)

ok je note

Bonjour à tous,

tu peux aussi enlever toutes les lignes concernant flag vu que tu ne t'en sers pas.

eric

oki merci

Rechercher des sujets similaires à "vba worksheet change row"