Vba : Compter des images dans une feuille de calcul.

cibleo

XLDnaute Impliqué
Bonsoir le forum,

Malgré plusieurs recherches sur le forum, je ne suis toujours pas parvenu à trouver un début de solution pour résoudre un problème qui me semblait pourtant simple à l'origine.

Compter différentes images dans ma feuille de calcul.

Dans le fichier ci-joint et la fenêtre de code de ma feuille de calcul "Modele", j'ai créé (grâce à votre contribution) des macros qui m'insèrent différentes images.

Je précise que ces images sont au format GIF, qu'elles ne sont pas animées et qu'elles sont importées depuis mon disque dur.

Supposant qu'il faille passer par le VBA, j'ai pensé qu'il fallait utiliser une procédure de type "Function" pour dénombrer mes images, j'ai aussi entendu parler de numéro faceID, ce numéro sert-il à définir l'image ?

Vais-je dans la bonne direction et pouvez-vous m'éclairez davantage sur la façon de procéder ?

Ci-joint le fichier allégé.

Bonne soirée Cibleo
 

Pièces jointes

  • Présence100.zip
    46.7 KB · Affichages: 110

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Bonjour à tous,
Bonjour MJ13,

Tu as posé la première pierre et je t'en remercie.

Après essai, je remarque que le code me décompte aussi les "CommandButton" de la Boîte à outils Contrôles présent sur ma feuille de calcul.

Pour l'éviter, j'aimerais limiter le décompte à la plage (C3:IJ33). D'autre part ce décompte doit se faire pour chaque image.

Pour résumé, j'ai 10 images qui sont puisées sur mon disque dur à partir de mes macros d'insertion.

Voir cette instruction introduite dans une des macros.
Dim image$
image = "C:\Documents and Settings\JEAN-FRANÇOIS\Mes documents\Mes images\Pompe.gif"

où Pompe.gif représente la petite pompe à essence insérée dans ma feuile de calcul.

J'aimerais ainsi placer une formule dans une cellule du style =Nb.si(C3:IJ33;"Pompe.gif") pour effectuer le décompte des passages à la station service, mais cela ne fonctionne pas.

Je crois qu'il faille passer par le VBA et une procédure de type "Function" pour identifier chacune de mes images et ainsi les décompter.

C'est pourquoi je parlais de numéro faceID croyant qu'il servait à identifier mes images mais je pense faire fausse route.

Pouvez vous m'éclairer dans la façon de procéder ?

Merci de votre aide
Cibleo
 

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Re le Forum,

Pour essayer de trouver une solution, j'ai inséré 2 fois la même image dans ma feuille de calcul.

Une se nomme Image 370 et l'autre Image 371 !!

Pourquoi une même image ne porte t-elle pas le même nom quand on l'insère ?

Ensuite, j'ai bidouillé légèrement le code de MJ13 comme ci-dessous pensant que le résultat affiché serait 1.

Code:
Sub compte_Images()
MsgBox (ActiveSheet.Pictures("Image 370").Count)
End Sub

Et j'ai ce message : Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet !!!

Dur, dur l'apprentissage du VBA;

Cibleo
 

Pierrot93

XLDnaute Barbatruc
Re : Vba : Compter des images dans une feuille de calcul.

Bonjour Cibleo, Michel:)

essaye peut être le code ci dessous pour compter les images :

Code:
Sub test()
Dim sh As Shape, i As Integer
For Each sh In Feuil1.Shapes
    If sh.Type = msoPicture Then i = i + 1
Next sh
MsgBox "nombre d'image(s) " & i
End Sub

bonne soirée
@+
 

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Bonsoir Pierrot93,

On progresse doucement mais surement.

Ton code marche très bien, mais j'insère différentes images dans ma feuille.

Exemple :
Un sandwich = 1 repas pris par un employé
Une pompe à essence = 1 passage à la station service
Un bidon = 1 vidange effectué par notre mécanicien

et j'aimerais comptabiliser chaque élément individuellement.

Le code me compte tout sans distinction.

Au départ, je pense qu'il faut nommer chaque image individuellement mais je ne sais pas comment m'y prendre !

Merci Cibleo
 

XL_Luc

XLDnaute Occasionnel
Re : Vba : Compter des images dans une feuille de calcul.

une petite proposition pour faire avancer le schmilblik

1. créé une fonction pour compter le nombre d'images commençants par "pompe"

Code:
function nombre_pompes as integer
Dim sh As Shape
For Each sh In Feuil1.Shapes
    If left(sh.name,5)="pompe" then nombre_pompes=nombre_pompes+1
Next sh
end function

2. ajouter quand tu rajoute une image de type pompe

[
Code:
I]Set MyPicture = ActiveSheet.Pictures.Insert(image)
With MyPicture.ShapeRange
.LockAspectRatio = msoFalse
.Height = MyCell.Height
.Width = MyCell.Width[/I]
[B].name="pompe " & nombre_pompes+1[/B]
End With

PS : tout ça sans test alors faudra pas m'en vouloir si j'ai fait une erreur
 

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Bonjour le forum,
Bonjour XL Luc et merci de ton intervention.

J'explique ma démarche :

J'ai inséré une image dans ma feuille de calcul que j'ai renommée "pompe" (initialement nommée Image 370).

J'ai placé ton code (la 1ère partie que tu me proposes; la deuxième je n'y comprends rien) dans un module standard.

Puis, j'ai placé ta fonction dans une cellule via le menu Insertion Fonction.

Là j'ai le message suivant : Impossible de traiter votre question. Soit Microsoft Excel ne trouve pas de fonction équivalente, soit l'aide n'est pas installée.

Je fais "OK" et cela me marque : Cette fonction ne possède pas d'arguments Résultat = 0

Puis j'ai rentré la plage dans la fonction "nombre_pompes" comme ceci :
=nombre_pompes(C3:IJ33) et ça me marque #Valeur.

Ca devient irrationnel, merci de votre aide

Cibleo
 

Staple1600

XLDnaute Barbatruc
Re : Vba : Compter des images dans une feuille de calcul.

Bonsoir

En rajoutant les parenthèses, ca fonctionne mieux ;)

Code:
function nombre_pompes[B][COLOR="Red"]()[/COLOR][/B] as integer
Dim sh As Shape
For Each sh In Feuil1.Shapes
    If left(sh.name,5)="pompe" then nombre_pompes=nombre_pompes+1
Next sh
end function
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Bonjour Staple1600 et merci,

On approche vraiment de la solution, reste 2 petits problèmes :

Quand j'insère mes images, le nom attribué est toujours image1, image2, image3 etc.... Ne peut-on pas leur attribuer un nom automatiquement comme ceci : pompe1, pompe2, pompe3 pour que je puisse les comptabiliser avec cette "Function" car je le fais manuellement!!!

Je pense qu'il faut modifier mes différentes macros d'insertion.

J'ai voulu rajouter une ligne d'instruction dans le code ci-dessous comme ceci :.Name = "pompe" mais j'ai une erreur d'exécution '70' Permission refusée

Un exemple de mes macros d'insertion :
Code:
Private Sub Gazole_Click()
If Not Intersect(Selection, Range("C3:IJ33")) Is Nothing Then
Dim MyCell As Range
Dim MyPicture As Picture
Dim image$
image = "C:\Documents and Settings\JEAN-FRANÇOIS\Mes documents\Mes images\Pompe.gif" 'ou le chemin désiré
Set MyCell = ActiveCell
MyCell.Select
Set MyPicture = ActiveSheet.Pictures.Insert(image)
With MyPicture.ShapeRange
.LockAspectRatio = msoFalse
.Height = MyCell.Height
.Width = MyCell.Width
End With
MyCell.Select
Exit Sub
End If
MsgBox "Mauvaise Sélection !", , Range("A2").Value
   Range("A1").Select
End Sub

D'autre part la "Function" ne marche que partiellement car je suis obligé de placer le curseur de la souris dans la zone de fonction (en haut à gauche) puis de valider pour mettre à jour le total.

Encore merci Cibleo
 

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Re Staple1600,

Excuses moi Staple1600, mais mon projet est bati sur un fichier repris sur le forum et je n'ai même encore approfondi tous les codes fournis notamment ceux nommés Action C, R, A. (je ne sais pas à quoi elles servent).

Si j'ai bien compris, les touches ("F") éxecutent les différentes macros. Il faut que je vire tout ça ?

Sinon, je continue ma recherche et sur un lien dans lequel tu intervenais on parle de nommer une image comme ceci :

activesheet.shapes(1).name="photo"

Ce lien n'existe plus

Suis je sur la bonne piste ?

Cibleo
 

Staple1600

XLDnaute Barbatruc
Re : Vba : Compter des images dans une feuille de calcul.

Re



Non tu n'es pas obligé de retirer.


Mais penser prévenir qu'il y a une procédure WorkBook_Open dans ton classeur c'est mieux non?

(ou de commenter ce code (mettre des guillemets devant les lignes)
pour rendre la procédure inopérante à l'ouverture du classeur
 

cibleo

XLDnaute Impliqué
Re : Vba : Compter des images dans une feuille de calcul.

Re

Youpiiii, je viens de trouver, j'ai inséré cette instruction de XL Luc dans ma macro d'insertion :.name="pompe " & nombre_pompes+1
et ça marche.

Enfin j'espère que ça ne vas pas bugger un jour !

Reste le dernier problème à résoudre, je suis obligé de placer mon curseur dans la barre de formules puis de valider pour mettre à jour le total.

Comment l'éviter ?

Cibleo
 

Discussions similaires

Statistiques des forums

Discussions
312 378
Messages
2 087 759
Membres
103 660
dernier inscrit
205 Peugeot