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.

9sudoku-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

3sudoku-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.

pour m'amuser, une solution pour 3 des 5 sudokus en moins de 10 sec, le 4ème n'est pas possible et le 5ème n'est pas complet.

3sudoku-vba-2.xlsb (70.44 Ko)

Bonsoir à tous,

J'adore !!!

C'est vraiment une bonne idée.

Comment fait-on pour mettre en pause la construction d'une grille automatique ?

MErci

Bonne soirée

Bonsoir,

merci Jurassic Porc pour l'écriture du code que j'imaginais !

Ravis que la solution collective vous convienne Yvouille.

@ bientôt

LouReeD

@vodoraix,

c'est plus difficile de ralentir la macro au lieu de l'accèlerer, maintenant 2 vitesses

5sudoku-vba-2.xlsb (91.42 Ko)

Bonjour et merci beaucoup Bart'

Cool, ça me permet de mieux comprendre (enfin légèrement mieux car ça va vite quand même) les chiffres qui sont éliminés au fur et à mesure

Bonne soirée

à bientôt

re, avec le frein à main, pour mieux te montrer, mais il y a encore un bug ... .

donc ceci est uniquement une démonstration lente, la version précédente est mieux.

1sudoku-vba-2.xlsb (66.61 Ko)

je vois, je vois

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