Trouver une image

Signaler
Messages postés
5
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
28 août 2006
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Petite erreur

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

@+, Julien
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
<!--
Messages postés
5
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
28 août 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
<!--
Messages postés
5
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
28 août 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
<!--
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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