Macro incomplète qui finie par planter

Bonjour à tous,

afin d'afficher sur un téléviseur une cartographie créée dans excel, j'utilise une macro qui copie en image une feuille excel et qui la colle dans une nouvelle.

Mon problème est que dans cette macro, quand je viens coller la nouvelle image, elle se superpose aux autres déja présentes (du fait d'une précédente utilisation) sur cette même feuille et du coup au bout d'un certain temps la macro plante:

Sub ImagePlageCellules()

' JLL Complet

Worksheets("JLL Complet").Unprotect ("prout")

Worksheets("JLL Complet").Range("A1:M41").CopyPicture

Worksheets("Feuil1").Paste

Dim Pict As Picture

Dim Nb As Byte

Application.ScreenUpdating = False

For Each Pict In Worksheets("Feuil1").Pictures

Pict.CopyPicture

Pict.Name = "JLL Complet"

With Worksheets("Feuil1").ChartObjects.Add(0, 0, Pict.Width, Pict.Height).Chart

.Paste

.Export ThisWorkbook.Path & "\" & Pict.Name & ".jpeg", "JPEG"

End With

Nb = Worksheets("Feuil1").ChartObjects.Count

Worksheets("Feuil1").ChartObjects(Nb).Delete

Next Pict

Application.ScreenUpdating = True

Worksheets("Feuil1").Pictures.Delete

Worksheets("JLL Complet").Protect ("prout")

End Sub

Avez-vous une idée pour me solutionner cela?

D'avance merci,

Bonne journée,

N.

Bonjour,

Si le soucis c'est le fait que tu aies trop d'images au bout d'un moment, il faudrait initialiser ton fichier au lancement du programme, il est possible de parcourir l'ensemble des images qui se trouvent dans une feuille, puis de les supprimer ensuite, il faut faire une boucle for each.

Mais sans fichier difficile d'aider plus, on aime pas trop avoir uniquement des programmes sur le forum

Tu peux chercher comment supprimer toutes les images d'une feuille excel sinon sur internet, je pense que tu trouveras des sujets qui en parlent déjà.

Si tu trouves seulement des sujets qui permettent de parcourir toutes les images, sache que pour supprimer un objet type image tu peux utiliser son nom, avec l'instruction .delete

Bonjour Ausecour, et merci pour ta réponse.

Pour la première solution: je ne sais pas faire, je vais chercher.

La deuxième: le fichier est assez confidentiel, je vais regarder ça...

Enfin, je pensais que c'etait la fonction de :

Nb = Worksheets("Feuil1").ChartObjects.Count

Worksheets("Feuil1").ChartObjects(Nb).Delete

Next Pict

Application.ScreenUpdating = True

Worksheets("Feuil1").Pictures.Delete

Mais cela n emarche pas...

Merci encore pour ton aide.

N.

Bonjour,

C'est normal que ton programme ne marche pas,

si on relit ton code...

Nb = Worksheets("Feuil1").ChartObjects.Count
 Worksheets("Feuil1").ChartObjects(Nb).Delete
Next Pict

 Application.ScreenUpdating = True
 Worksheets("Feuil1").Pictures.Delete

Tu enregistres dans une variable le nombre d'images que tu as dans ta Feuille 1, et ensuite tu veux supprimer l'objet qui se trouve à l'index nb, donc le nombre d'images que tu as, ce n'est pas très logique de faire ça...

Pour supprimer chaque image de ta feuille il faut parcourir la collection ChartObjects pour supprimer chacun des objets, je vais donc t'expliquer comment procéder car la manoeuvre m'est revenue:

Sub test()
    For each image in Worksheets("Feuil1").ChartObjects
        image.Delete
    Next image
End Sub

On va utiliser une boucle un peu spéciale, for each, en général on connait mieux les boucles de type for i = 1 to 3 qui va faire prendre les valeurs 1,2, puis 3 à la variable i (comme l'incrémentation par défaut est de 1, modifiable avec l'argument Step : "for i = 1 to 3 step 2"). Cette boucle un peu spéciale n'incrémente pas vraiment une variable numérique, elle va parcourir des objets (tous les objets) qui se trouvent dans une collection, tu peux un peu voir ça comme une collection de cartes, un paquet en clair, dont tu parcours chacune des cartes pour chercher l'as de pique par exemple.

Donc ici on parcourt chaque ChartObject qui se trouve dans la collection ChartObjects, on nomme ces objets image, mais on peut leur donner le nom que l'on veut (dans la limite de ce que permet le language de programmation bien sûr).

Ensuite quand on a notre objet image, on décide de faire image.Delete pour le supprimer, puis on passe à l'objet suivant avec le Next image.

Tu devrais essayer ces quelques lignes de code pour voir si ça te convient ou non.

Rechercher des sujets similaires à "macro incomplete qui finie planter"