XL 2013 Tips Appareil Photo (Image Liée avec cellule)

PMG

XLDnaute Junior
Bonjour le fil, le forum,

Je me permets de partager une petite "astuce" que j'ai trouvé en cherchant à résoudre un problème lié à l'utilisation de l'appareil photo.

En effet, lors de l'utilisation de plusieurs images liées (tableaux en particulier) un problème récurrent de lenteur se fait sentir.
Celui-ci serait dû à la mise à jour intempestive de la liaison, rendant l’exécution de code VBA très lente (je suis passé de 3sec à 13sec environ avec 10 tableaux).

Voici l'une des solutions traduite et expliquée (Source: http://dailydoseofexcel.com/archives/2010/05/12/performance-of-linked-pictures/) avec mes connaissances de newbie:

1/ Gestionnaire de nom
Créer un nom: PicOn
Référence: 1

2/Gestionnaire de nom
Créer un nom: Pic1
Référence: =SI(PicsOn=1;Feuil1!$C$3:$I$10;"")

3/VBA
VB:
Sub TurnOffPictures()
    ThisWorkbook.Names("PicsOn").RefersTo = "0"
End Sub

Code:
Sub TurnOnPictures()
    ThisWorkbook.Names("PicsOn").RefersTo = "1"
End Sub

4/Image
Une fois votre image créer, dans la bar de formule remplacer:
=$C$3:$I$10 par =Pics1

5/Utilisation
Intégré les codes VBA (3) avec des boutons ou ds un code.

En espérant que cela puisse en dépanner certains, car l'utilisation de l'appareil photo est vraiment pratique!
Les remarques, modifications, etc, sont les bienvenus!
PMG

Code:
Sub Pics()
Dim f1 As Worksheet, f2 As Worksheet
Application.ScreenUpdating = False

Set f1 = Sheets("Feuil1")
Set f2 = Sheets("Feuil2")

'Défnition de la zone à copier
f1.Range("C3:I10").Copy
'Collage de la photo
With f2
    .Range("E1").Select
    .Pictures.Paste.Name = "Pics1"
    Application.CutCopyMode = False
End With

With ThisWorkbook
    .Names.Add Name:="PicsOn", RefersTo:="=1"
    .Names.Add Name:="Pics1", RefersToR1C1:= _
        "=IF(PicsOn=1,Feuil1!R3C3:R10C9,"""")"
End With
    f2.Shapes.Range(Array("Pics1")).Select
    Selection.Formula = "=Pics1"
End Sub
 

Pièces jointes

  • Tips Appareil photo.xlsm
    27.8 KB · Affichages: 27

Airpege

XLDnaute Nouveau
Bonjour,

Débutant à peine ma LV4 vba, je n'ai pas tout compris, mais du coup j'ai procédé comme suit (pour un résultat similaire à ceci
) :

1/ Définition du critère de mise à jour :
Gestionnaire de nom
Créer un nom: PicOn
Référence: =1

2/ vba de mise à jour à l'ouverture de l'onglet (dans module de feuille concernée) :
VB:
Private Sub Worksheet_Activate()

ThisWorkbook.Names("PicsOn").RefersTo = "1" 'active la mise à jour des images liées
ThisWorkbook.Names("PicsOn").RefersTo = "0" 'désactive la mise à jour des images liées

End Sub


3/Création d'une image liée :
Sélectionner une plage
collage spécial/image liée

4/Définition de la référence de l'image :
Gestionnaire de nom
Créer un nom: Pic1
Référence : = SI(PicsOn=1;SI($A$1<>"";INDIRECT($B$1);$Z$1);"")

Sachant que :
- en $A$1 se trouve le critère qui détermine mon image (ex : menu déroulant)
- en $B$1 se trouve l'adresse de mon image de la forme ="'"&DROITE(CELLULE("filename";'feuille1'!$BD22);NBCAR(CELLULE("filename";'feuille1'!$BD22))-CHERCHE("]";CELLULE("filename";'feuille1'!$BD22)))&"'!"&CELLULE("adresse";'feuille1'!$BD22) (pour faire apparaitre dynamiquement le nom de la feuille, ici : 'feuille1'!)
- en $Z$1 se trouve rien du tout (pas même de quadrillage) --> permet d'effacer l'image si le critère est vide (lors de la mise à jour automatique).

5/ Associer la référence à l'image liée
cliquer sur l'image liée
dans la barre de formule taper =Pic1

Attention:
Il m'a fallu d'abord associer l'image avant de redéfinir sa référence comme dit précédemment. Sans quoi j'avais un message d'erreur bloquant ("La référence n'est pas valide").
Ainsi j'ai momentanément créé le nom : Pic1 avec pour ref : =$Z$1
J'ai associé mon image avec Pic1, puis j'ai redéfini la référence de Pic1 dans le gestionnaire de nom.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 170
Membres
103 151
dernier inscrit
nassim