VBA : Erreur de code

  • Initiateur de la discussion Initiateur de la discussion Kiseki
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Kiseki

XLDnaute Occasionnel
Bonjour,

J'ai un code pour afficher une image d'un répertoire (et plus), il fonctionnais très bien avant.


Mais désormais il me dit : "Erreur de compilation : Variable non définie"

Code:
Option Explicit

Function AfficheImage(NomImage, Optional rep)
  Application.Volatile
  If IsMissing(rep) Then rep = ThisWorkbook.Path & "\Photo\"
  Set adr = Application.Caller
  Set adr2 = Range(adr.Address).MergeArea
  temp = NomImage & "_" & adr.Address
  Existe = False
  For Each s In adr.Worksheet.Shapes
    If s.Name = temp Then Existe = True
  Next s
  If Not Existe Then
     For Each k In adr.Worksheet.Shapes
        p = InStr(k.Name, "_")
        If Mid(k.Name, p + 1) = adr.Address Then k.Delete
     Next k
     If Dir(rep & NomImage) = "" Then
        AfficheImage = "Photo"
     Else
       Set myShell = CreateObject("Shell.Application")
       If TypeName(rep) = "Range" Then
          Set myFolder = myShell.Namespace(rep.Value)
       Else
          Set myFolder = myShell.Namespace(rep)
       End If
       Set myFile = myFolder.Items.Item(NomImage)
       Taille = myFolder.GetDetailsOf(myFile, 26)
       H = Val(Split(Taille, "x")(1))
       L = Val(Split(Taille, "x")(0))
       echH = adr2.Height / H
       EchL = adr2.Width / L
       If L * echH > adr2.Width Then ech = EchL Else ech = echH
       H = H * ech
       L = L * ech - 2
       Set s = adr.Worksheet.Shapes.AddPicture(rep & NomImage, True, True, adr.Left, adr.Top, L, H)
       s.Name = NomImage & "_" & adr.Address
       AfficheImage = ""
    End If
  End If
End Function


Sauriez-vous me dire ce qui pourrais clocher ?



Merci,
 
Re : VBA : Erreur de code

Merci mais je l'ai justement ajouté car sinon le fichier bug.

Le fichier est relancé et là il me charge l'image mais plus aucune image ne peux réapparaitre après.


Le plus comique dans l'histoire c'est qu'elle fonctionnait très bien avant, je n'y ai pas touchée mais j'ai fait plein de truc dans d'autre module (cette fonction d'image est seule dans son module).
 
Re : VBA : Erreur de code

Bonjour.
Moi je vous conseille de toujours déclarer vos variables (instruction Dim) en leur mettant un type explicite, y compris Variant pour documenter que vous ne pouvez faire autrement.
Je ne laisse jamais Excel ou VBA décider quoi que ce soit à ma place.
Je précise TOUJOURS une expression WorkBook devant Sheets ou WorkSheets, toujours une expression Worksheet devant un Range ou Cells, Toujours Value derrière Range.
Cordialement.
À+
 
Re : VBA : Erreur de code

Salut Kiseki et le forum
Le plus comique dans l'histoire c'est qu'elle fonctionnait très bien avant, je n'y ai pas touchée mais j'ai fait plein de truc dans d'autre module
C'est un des trucs qui fait que ça ne marche plus ! Et t’espère quoi de notre part ?
Pose-toi la question de ce que tu as pu modifier dans l'environnement ou une mise à jour qui aurait des répercutions sur ton fichier. Je ne pense pas qu'on puisse t'aider puisque le code est correct s'il fonctionnait avant.
A+

Edit : sans aller jusqu'à tout déclarer comme Dranreb, je déclare toutes mes variables dans le type qu'elles doivent recevoir.
 
Dernière édition:
Re : VBA : Erreur de code

Je comprend,

Voici le fichier en question : Cijoint.fr - Service gratuit de dépôt de fichiers

Dans 'Print' (Impression), si je choisis un Nom et un Prénom qui représente une image dans le répertoire "photo" alors Excel plante, il ce ré-ouvre et charge l'image mais la fonction ne fonctionne plus avant de ré-ouvrir à nouveau.


Je viens de remarquer une chose importante :

La fonction fait référence à des cellules :
Code:
=AfficheImage($E$5 & " " & $E$6 & ".jpg")

En ce moment pour trouver le nom/prénom, j'utilise la formule :
Code:
=INDEX(Nom;Index_ligne)

Mais si je complète manuellement ces deux cellules, ça marche très bien.


Le soucis viendrai de l'utilisation d'une formule pour trouver la valeur du nom et prénom.

Après plusieurs testes c'est vraiment ce qui ce passe, mais pourquoi ?



Merci,
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
654
  • Question Question
Microsoft 365 Code VBA - Erreur
Réponses
1
Affichages
708
Retour