VBA : macro qui efface trop de choses ?

Lipikar

XLDnaute Nouveau
Bonjour à tous,

C'est mon tout premier message sur le forum, je me suis inscrit il y a quelques jours parce que je trouve petit à petit pas mal d'aide ici. Je suis débutant complet en programmation et VBA. Je galère donc à faire quelques pauvres lignes de code et j'ai justement un problème :

Mon objectif : afficher une image lors de la mise à jour de la cellule A1. Dans cette cellule se trouve la référence d'un article que nous vendons et qui est également le nom de l'image qui lui correspond.

Avant d'afficher une nouvelle image, le code supprime toutes les images de la feuille (pas de problème, c'est la seule image de toute façon).

Ca c'est ok, j'y suis arrivé comme un grand ! Voici le code :

Pour lancer la macro AAAA après mise à jour de la cellule A1 :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
    AAAA
End If
End Sub

Macro AAAA pour supprimer les images de la feuille puis afficher l'image correspondante à la réf entrée en A1 :
Code:
Sub AAAA()

Dim NomImg As String
NomImg = [A1]
AccesImg = "V:\Photos Produits\Photos 72ppp\22\" & NomImg & ".jpg"

On Error GoTo suite
ActiveSheet.Shapes.SelectAll
Selection.Delete
ActiveSheet.Shapes.AddPicture AccesImg, True, True, [A4].Left, [A4].Top, 118, 83

suite:
End Sub

En cas d'erreur (par exemple si l'image est introuvable) la macro file à End Sub sans rien faire comme je lui ai demandé.

Mon problème : après une erreur, lorsque j'entre à nouveau un nom d'article valide en cellule A1, pour lequel il existe bien une image, la macro affiche bien la bonne image mais surtout efface tous les boutons de la feuille ! Je ne comprends pas du tout pourquoi ; dans la macro je ne demande qu'à effacer les images.

Bref, étant débutant, quelque chose m'échappe. Si vous pouviez m'aider ça serait sympa ! :eek:

Merci d'avance :)
 

skoobi

XLDnaute Barbatruc
Re : VBA : macro qui efface trop de choses ?

Bonjour Lipikar, bienvenue sur XLD,

Tout d'abord sache que l'objet "Shape" rassemble non seulement les images mais également les boutons, graphiques, zone de texte etc...

Donc, en faisant

Code:
ActiveSheet.Shapes.SelectAll
Selection.Delete
Il est clair que tu supprimes tout...

Si tu a bien qu'une seul image, passe par une boucle pour identifier le "shape" avant de le supprimer.
Je te donne la syntaxe pour trouver un shape image, je te laisse faire la boucle ;).

Code:
If activesheet.shapes(i).type = msoPicture
"i" correspondra un l'incrément de ta boucle for ... next

Biensûr, si tu n'arrives pas à faire le code, reviens nous voir.
 

Lipikar

XLDnaute Nouveau
Re : VBA : macro qui efface trop de choses ?

Bonjour Lipikar, bienvenue sur XLD,

Tout d'abord sache que l'objet "Shape" rassemble non seulement les images mais également les boutons, graphiques, zone de texte etc...

Salut,
Merci pour ta réponse !

En fait je me posais la question parce que, lorsque la macro fonctionne sans erreur (lorsque j'entre une réf article valide en A1), la macro efface bien l'image déjà existante mais pas les boutons présents ! Tu aurais une explication..?

Concernant la boucle, merci pour la solution, mais je ne connais même pas encore la syntaxe pour faire une boucle ! Je vais chercher ça..

Merci :)
 

Lipikar

XLDnaute Nouveau
Re : VBA : macro qui efface trop de choses ?

Je viens de chercher des infos sur les boucles (comme je l'ai dit je débute !) et je ne comprends pas ce que viens faire une boucle dans ce que je souhaite faire !

Si j'ai bien compris, une boucle sert à reproduire une action plusieurs fois (bien que je ne comprenne pas à quoi ça puisse servir !), alors que je n'ai apparemment besoin que d'identifier mon image et la supprimer ; il n'y a pas d'action à répéter ici non ?

Voilà, désolé pour mon super niveau, et merci pour le coup de pouce !
 

Lipikar

XLDnaute Nouveau
Re : VBA : macro qui efface trop de choses ?

Rien à faire, ça fait deux heures que je cherche en vain, j'en ai marre !
Je ne comprends pas comment nommer mon image puis demander à la macro de la supprimer.

Si quelqu'un a une solution je suis preneur !
Egalement si vous avez un site qui explique correctement ce que sont les boucles, à quoi elles servent, leur syntaxe, etc, ça m'intéresse.

Merci pour votre aide.
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : macro qui efface trop de choses ?

Bonjour,

pas tout suivi, mais regarde le code ci-dessous si il peut t'aider :

Code:
Dim s As Shape
For Each s In ActiveSheet.Shapes
    If s.Type = msoPicture Then s.Delete
Next s

bon après midi
@+
 

Lipikar

XLDnaute Nouveau
Re : VBA : macro qui efface trop de choses ?

Bonjour à tous,

Merci pour votre aide mais je n'y arrive toujours pas.. Avec le code suivant, ça n'efface carrément plus rien :

Code:
Sub AAAA()

Dim NomImg As String
Dim i As Shape


NomImg = [A1]

AccesImg = "V:\Photos Produits\Photos 72ppp\22\" & NomImg & ".jpg"

On Error GoTo suite

For Each i In ActiveSheet.Shapes
    If ActiveSheet.Shapes(i).Type = msoPicture Then i.Delete
Next i

ActiveSheet.Shapes.AddPicture AccesImg, True, True, [A4].Left, [A4].Top, 118, 83

suite:

End Sub

Je me suis essayé à la boucle, mais apparemment j'ai pas tout pigé !
Si vous pouvez me corriger, ça m'aide ! Je ne comprends pas quel est le problème.

Merci :)
 

Lipikar

XLDnaute Nouveau
Re : VBA : macro qui efface trop de choses ?

Ok merci, c'est ce que je vais faire !
Je joins le classeur qui contient les deux macros + 3 images.

Pour l'utilisation du classeur les images doivent être rangées directement sur le bureau. Il faut entrer en cellule A1 le nom de l'image (exemple : "220000").

Je galère vraiment alors merci pour votre aide !!
 

Pièces jointes

  • Classeur3.xlsm
    38.4 KB · Affichages: 46
  • Classeur3.xlsm
    38.4 KB · Affichages: 59
  • Classeur3.xlsm
    38.4 KB · Affichages: 62
  • 220000.jpg
    220000.jpg
    31.4 KB · Affichages: 117
  • 220001.jpg
    220001.jpg
    30.9 KB · Affichages: 106
  • 220002.jpg
    220002.jpg
    31.5 KB · Affichages: 110

Pierrot93

XLDnaute Barbatruc
Re : VBA : macro qui efface trop de choses ?

Bonjour,

modifie comme ceci, à priori fonctionne chez moi sous 2003 :

Code:
Dim s As Shape
For Each s In ActiveSheet.Shapes
    If s.Type = msoPicture Or s.Type = msoLinkedPicture Then s.Delete
Next s

bonne journée
@+
 

Discussions similaires

Réponses
12
Affichages
446

Statistiques des forums

Discussions
312 236
Messages
2 086 477
Membres
103 232
dernier inscrit
logan035