VBA - Erreur d'exécution "91"

Résolu/Fermé
Trekiros Messages postés 6 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 10 juillet 2012 - 7 juin 2012 à 16:24
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 - 15 juin 2012 à 22:06
Bonjour,
J'essaie d'ouvrir 106 images avec un nom normalisé en "Image (i).png" dans un dossier "images" dans le bureau, et d'en placer une toutes les 5 cases à la ligne 3 sur un fichier excel. Voici comment je m'y suis pris, en m'inspirant beaucoup de morceaux de codes sur internet puisque mes cours de VBA n'ont pas duré jusqu'à l'utilisation de classes ni d'images :

Sub CLICIMAGES()
    Dim i As Integer
    Dim Sh As Shape

'Suppression des images déjà présentes
    For Each Sh In Worksheets(1).Shapes
        If Sh.Type = msoPicture Then Sh.Delete
    Next

'Création des nouvelles
    For i = 1 To 53 * 2
        Sh = Worksheets(1).Shapes.AddPicture("C:\Users\Valentin\Desktop\images\Image (" & i & ").png", True, True, Range("C3").Offset(0, i - 1).Left, Range("C3").Top, Range("C3").Width * 4, Range("C3").Height)
    Next i
End Sub


Avec le code ci-dessus, la première image apparait, mais c'est la seule. Le programme me renvoie ensuite le message d'erreur suivant, et les différentes solutions trouvées sur internet n'ont pas abouties

"Erreur d'exécution "91" :
Variable objet ou variable de bloc With non définie."

Le message d'erreur propose de passer au débogage, il surligne la ligne commençant par Sh =, et m'annonce que i=1.

Que dois-je modifier et pourquoi mon code est-il faux ?
Merci d'avance pour toute réponse.

7 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 7/06/2012 à 23:17
Bonjour,
Essayer de remplacer la ligne juste après :
 For i = 1 To 53 * 2
Par la suivante et sans le [Sh =]
Worksheets(1).Shapes.AddPicture("C:\Users\Valentin\Desktop\images\Image" & i & ".png"), True, True, Range("C3").Offset(0, i - 1).Left, Range("C3").Top, Range("C3").Width * 4, Range("C3").Height

Salutations.
Le Pingou
1
Trekiros Messages postés 6 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 10 juillet 2012
7 juin 2012 à 23:47
Merci beaucoup, ça a réglé le problème et j'ai repéré ce que j'avais mal fait grâce à toi.
0
Trekiros Messages postés 6 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 10 juillet 2012
13 juin 2012 à 23:34
Bonjour, petit bump pour poser une autre question sur le même morceau de code.
Ce que je voulais faire avec cette fonction n'était pas juste d'afficher 106 images, mais aussi de les mettre à jour si elles étaient déjà présentes.
Je n'ai pas trouvé de méthode pour mettre à jour une image donc j'ai pensé que les supprimer puis les recréer au même endroit serait le moyen le plus simple.

Or en testant aujourd'hui mon programme que je pensais avoir terminé, je me suis rendu compte que cette 'mise à jour' des images ne fonctionne pas. Lorsque je modifie une image, l'image correspondante est bien supprimée, lorsqu'elle est recréée, Excel semble restaurer l'ancienne version de l'image. Le seul moyen que j'ai trouvé pour mettre à jour mes 106 images est de fermer Excel, rouvrir mon fichier, et relancer la fonction, ce qui n'est pas ergonomique.

Si quelqu'un connait l'origine de ce problème et une solution, je veux bien son aide.
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 14/06/2012 à 09:52
Bonjour,
Je viens de faire un test, si je modifie une image, je supprime les existantes et je remets, j'obtiens sans problème les images avec les modifications.
Tout ceci sans avoir fermé et ou enregistré le classeur.
Avez-vous contrôlé que les anciennes soient bien supprimées ?


Salutations.
Le Pingou
0
Trekiros Messages postés 6 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 10 juillet 2012
14 juin 2012 à 10:16
Bonjour,
Oui, j'ai un bouton pour les supprimer indépendamment de cette fonction et j'ai fait le test de les supprimer d'abord puis de les recréer après et Excel a quand même restauré la version supprimée.

Même chose si je supprime à la main les images une par une.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
14 juin 2012 à 14:25
Bonjour,
Vous avez contrôlé que l'image mise à jour est bien dans le dossier utilisé par la procédure ?
0
Bonjour,
Oui, c'est bien le cas, sinon elle ne serait pas mise à jour lors de la réouverture d'excel.
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
15 juin 2012 à 22:06
Bonjour,
Merci pour l'information.
Avec mon fichier test basé sur votre premier code cela fonctionne à tous les coups.
Dans le sens ou vous supprimez les images insérées dans votre classeur, la procédure ne peut pas les reprendre que vous fermiez le classeur ou pas.
Je n'arrive pas à comprendre ce qui ce passe chez vous et sans votre fichier c'est impossible dans faire plus.
0