Trouver une image

cs_Stef32 Messages postés 5 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 28 août 2006 - 28 août 2006 à 14:12
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 28 août 2006 à 23:45
Tcho,

Une de mes MACRO maniplue des objets image avec la méthode :

ActiveSheet.Shapes(Item$).Select
Selection.ShapeRange.Height = 132
Selection.ShapeRange.Width = 204.5
Etc....

Par contre si il n'y a pas d'image correspondant à la variable Items$, le programme se plante.

Comment faire pour tester si l'objet en question existe pour eviter les bugs ??

P.S. Est-ce que qqun connait un lexique bien foutu pour chercher toutes les fonctions VBA et leur définitions voir des exemples. En français idéalement.

Merci d'avance
Stef

8 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 août 2006 à 14:36
salutt

Je ne sais pas si cela peu t'aider mas tu peux faire un truc du style.

Tu mets cette fonction
Private Function ShapesExists(ShapeName As String) As Boolean 
On Error GoTo HandleError 
ShapesExists = True 
ActiveSheet.Shapes(Item$).Select 
Exit Function 
HandleError: 
ShapesExists = False 
End Function 

Et puis apres tu fait comme ceci

If ShapesExists(Item$) Then 
Selection.ShapeRange.Height = 132 
Selection.ShapeRange.Width = 204.5 
Etc.... 
End If 
 

@+, Julien
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 août 2006 à 14:38
Petite erreur

Il faut Ecrire
ActiveSheet.Shapes(ShapeName).Select Et NON ActiveSheet.Shapes(Item$).Select 

@+, Julien
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 août 2006 à 14:48
Salut,

"P.S. Est-ce que qqun connait un lexique bien foutu pour chercher toutes
les fonctions VBA et leur définitions voir des exemples. En français
idéalement."

L'aide de vba Excel est plus que complête (et en français).
Sinon, pense à l'explorateur d'objets (F2), plus qu'indispensable !

Sinon, "Comment faire pour tester si l'objet en question existe pour eviter les bugs ??"
C'est simple, reproduit ton erreur et note le numéro qu'excel vba t'affiche.

Ensuite, avant l'ouverture de l'image,

On error resume next
                                ' *** ton ouverture image
If Err.Number = X Then MsgBox "Erreur, le fichier image n'existe pas", vbCritical: _
    Err.Clear: Exit Sub

(remplace X par le numéro de l'erreur)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Stef32 Messages postés 5 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 28 août 2006
28 août 2006 à 17:04
Salut,


Merci pour ton aide, c cool.


Juste un souci avec ton astuce :
Ca fonctionne un peu trop bien :) la condition s'effectue même lorsque l'objet image est trouvé et donc logiquement il n'y a pas d'erreur générée par Excel.

Surement une erreur de ma part avec l'utilisation de la fonction que tu m'as conseillée :

   On Error Resume Next
   
    If Item_Old <> "0" Then
        Sheets("fiche de controle").Select
        Range("R1").Select
        ActiveSheet.Shapes(Item_Old).Select      (selelction de l'image ou plantage)
        Selection.Delete
    End If
    
    If Err.Number = "-2147024809 (80070057)" Then
        Sheets("fiche de controle").Select
        Call Cacher_Fermer
        MsgBox "Excel n'a pas trouvé d'image correspondante", vbCritical: _
        Err.Clear: Exit Sub
    End If

Ciao et merci


Stefano
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 août 2006 à 17:24
Re,

"    If Err.Number = "-2147024809 (80070057)" Then"
>> bah non, c'est certainement pas le bon numéro.
La propriété Number doit te renvoyer un Long !
T'as pas plutot une erreur style Impossible de charger l'objet, erreur N° 1051
(pour le 1051, c'est au pif)

Au pire essaie ce numéro (et t'ai fait une modif importante) :

<small>
Coloration syntaxique automatique </small>
    On Error Resume Next 

    If Item_Old <> "0" Then 
        Sheets("fiche de controle").Select 
        Range("R1").Select 
        ActiveSheet.Shapes(Item_Old).Select      (selelction de l'image ou plantage) 
        If Err.Number  = -2147024809 Then  '(je doûte que cela fonctionne)
            ' Sheets("fiche de controle").Select     << '*** inutile, déjà dessus
            Call Cacher_Fermer 
            MsgBox "Excel n'a pas trouvé d'image correspondante", vbCritical: _ 
                Err.Clear: Exit Sub 
        End If 
        Selection.Delete 
    End If 

' *** je te l'ai intercalé dans l'autre If, sinon, ta feuille se supprime !
' <selection.delete>Tel que c'était disposé et ayant le plantage</selection.delete>
' sur la sélection du Shape (donc pas pris en compte), précédemment
' sélectionné : c'est ta feuille "fiche de controle"
<small>
Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Stef32 Messages postés 5 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 28 août 2006
28 août 2006 à 17:56
Re,


On s'approche, ça chauffe...


J'ai trouvé le No d'erreur (Error 440) via Help dans l'alerte BUG habituelle j'ai bien le no hyper long que j'ai utilisé précédement.
Dans les deux cas, erreur avérée ou pas la condition IF Err.Number = ... est remplie, du coup quand l'image est trouvée ça ne marche plus....

J'ai fait comme ça :

On Error Resume Next
   
    If Item_Old <> "0" Then
        Sheets("fiche de controle").Select
        Range("R1").Select
        ActiveSheet.Shapes(Item_Old).Select
        If Err.Number = 440 Then
           Call Cacher_Fermer
           MsgBox "Excel n'a pas trouvé d'image correspondante", vbCritical: _
           Err.Clear: Exit Sub
        End If
     Selection.Delete
    End If

Au fait pour les astuces F1 et F2 : C'est pas mal, mais en anglais car j'utilise XP pro de ma boîte...

Et Merci Mortalino
Stef
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 août 2006 à 18:09
Alors regarde le snippet d'EBArtSoft
et laisse tomber la gestion d'erreur.

Pour ton aide au boulot, bah t'as pas de chance, j'espère que t'es pas anglophobe !
Sans parler de l'aide, le F2 est très interressant, au début je n'en voyais pas l'utilité, beh maintenant je fais F2 au moins une 2 ou 3 fois par jour .

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 août 2006 à 23:45
D'où provient la variable Item$ ?


En passant, change de nom de variable.

Il faut être prudent avec les noms de variables et ne pas utiliser de noms qui pourraient être réservés par VB/VBA

MPi
0
Rejoignez-nous