Une "Image" de l'appareil de photo qui ralentit une macro

Bonsoir,

Dans le fichier ci-joint, à chaque modification de la plage B2:J10, une macro événementielle actualise la plage CV100:EN128, plage sur laquelle d’intéressantes informations sont placées.

Tout fonctionnait bien jusque-là.

Afin de ne pas devoir travailler sur deux ‘’Fenêtres réorganisées’’, j’ai voulu placer une ‘’photo’’ de la plage CV100:EN128 en P1, mais cela ralenti énormément le déroulement de la macro (chez moi 3 minutes au lieu d’une fraction de seconde).

Avez-vous une idée de solution ?

Cordialement.

6sudoku-vba.xlsm (119.64 Ko)

Bonsoir,

il se peut que malgré le fait d'avoir "tout mis en veille" que le principe de l'image "appareil photo" persiste, c'est à dire que l'image se met à jour à chaque changement des cellules qu'elle contien.

L'idée : en début de code supprimez l'image de l'appareil photo, faire vos différents calculs et modifications de valeurs, puis reprendre une photo de la plage de cellules. En fait nul besoin de l'appareil photo, juste une copie en image de la plage voulue, je vous laisse le soin de chercher dans ce sens.

@ bientôt

LouReeD

bonsoir,

l'idée de LouReeD, mais un petit peu différent. On change la formule du "Camera" au début vers une cellule et puis au bout on remet la plage orginale. Chez moi, changer une chiffre dure 88 sec sans ce contournement, 24 sec avec cela, donc 3 fois plus vite.

Me.Shapes("Camera").DrawingObject.Formula = Me.Range("A1").Address

Mais, avec des macros "Find" on sait faire cela encore en moins de temps, essayez les boutons "Test Avec" (12 s) et "Test sans" (4 s) = encore 2-3 fois plus vite

2sudoku-vba.xlsm (125.00 Ko)

Hello,

En reprenant l'idée de LouReeD, c'est beaucoup plus rapide , si au lieu d'utiliser une formule pour afficher l'image de la plage, on utilise un code VBA qui à la fin des calculs , copie la plage qui nous intéresse et la colle en shape à l'endroit que l'on veut.

Sub CopierPlageEnImage()
Dim rng As Range, shp As Shape, cible As Range, nomShape As String
    nomShape = "ImagePlage"   ' Nom de la shape à remplacer
    Set rng = Feuil2.Range("$CV$100:$EN$128")
    Set cible = Feuil2.Range("P12") ' cellule de destination
    ' --- Supprimer l'image si elle existe ---
    On Error Resume Next
    Feuil2.Shapes(nomShape).Delete
    On Error GoTo 0
    ' Copier la plage en image
    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    ' Coller l'image (méthode compatible)
    Feuil2.Pictures.Paste.Select
    ' Récupérer l'objet collé
    Set shp = Selection.ShapeRange.Item(1)
    ' Positionner sur cellule cible
    With shp
        .Left = cible.Left
        .Top = cible.Top
        .Name = nomShape
    End With
End Sub

Chez moi , l'exécution de la macro est presque instantanée.

Ami calmant, J.P

Salut LouReed, salut Jurassic Pork,

La proposition de Jurassic Pork fonctionne à merveille.

Merci pour votre aide.

Bonne fin de journée.

Rechercher des sujets similaires à "image appareil photo qui ralentit macro"