Afficher le détail d'une Somme.Si avec macro

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 !

ikuchan07

XLDnaute Nouveau
Bonjour à tous !

J'aimerais savoir s'il est possible d'afficher le détail d'une "Somme.Si.Ens" avec une macro, c'est à dire une sorte de fenêtre pop up qui s'ouvre lorsque je clique sur une cellule, me résumant quelles lignes ont été auditionnées.
Je vais tenter d'être la plus précise possible, en vous joignant le fichier avec l'exemple que j'ai fait.

Dans mon fichier, je somme les types de produits vendus selon le numéro du commercial, la catégorie et la période donnée. Certains produits font partie d'une catégorie mais d'autres ne peuvent pas être classifiés et se retrouvent dans "Autres" (feuille3).
Ceci est à titre d'exemple, le fichier que je dois monter est plus conséquent et il m'est impossible de changer de méthode, je ne peux faire mes sommes que de cette façon.

Ce que je souhaiterais c'est que lorsque je clique dans la cellule D12 (feuille3), une fenêtre s'affiche me détaillant les lignes (produits, valeur) qui ont été additionnées à partir de la "feuille2". Je ne veux que le détail de tout ce qui se retrouve dans "Autres" (feuille3).

Est-ce vraiment possible d'avoir un tel résultat ou bien y en a t-il un autre plus simple ? Car je ne m'y connais pas du tout en VBA.

Merci d'avance.
 

Pièces jointes

Bonjour,

Merci beaucoup pour votre aide. J'ai compris le principe, mais j'aimerais que ça me donne le détail des sommes dans "Autres" (feuille3) uniquement, ça contient des produits qui ne sont pas identiques et dont je ne peux avoir les sommes qu'à travers une Somme.Si.Ens.
On ne peut pas les retrouver à travers un TCD.
 
Bonjour ikuchan07, JHA,

Le plus simple est d'insérer une image dans un commentaire mais il faut du VBA.

Ce code est à placer dans le module de Feuil3 (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Activate()
Dim execution As Byte, c As Range, f As String
Application.ScreenUpdating = False
For execution = 1 To 2
    For Each c In IIf(execution = 1, [D12:O12], [D21:O21])
        f = c.Formula
        f = IIf(execution = 1, Replace(f, "A7", Me.Name & "!A$7"), Replace(f, "A16", Me.Name & "!A$16"))
        f = Replace(Replace(Replace(Replace(f, "$A:$A", "A2"), "$B:$B", "B2"), "$C:$C", "C2"), "$D:$D", "D2")
        f = Replace(Replace(Replace(Replace(f, "A:A", "A2"), "B:B", "B2"), "C:C", "C2"), "D:D", "D2") 'si références relatives
        With Sheets("BDD").[A1].CurrentRegion 'nom de la feuille à adapter
            .Cells(2, .Columns.Count + 2) = f 'critère de filtrage en F2
            .AdvancedFilter xlFilterInPlace, .Cells(1, .Columns.Count + 2).Resize(2)
            InsereImage .Cells, c
            If .Parent.FilterMode Then .Parent.ShowAllData 'RAZ
        End With
Next c, execution
End Sub

Sub InsereImage(plage As Range, cel As Range)
plage.CopyPicture
With plage.Parent.ChartObjects.Add(0, 0, plage.Width, plage.Height).Chart
    .Paste
    .Export ThisWorkbook.Path & "\MonImage.gif", "GIF"
    .Parent.Delete 'supprime le graphique temporaire
End With
cel.ClearComments
With cel.AddComment("").Shape
    .Width = plage.Width
    .Height = plage.Height
    .Fill.UserPicture ThisWorkbook.Path & "\MonImage.gif"
End With
Kill ThisWorkbook.Path & "\MonImage.gif" 'supprime le fichier gif
End Sub
Le filtre avancé est utilisé.

Fichier joint, la macro se déclenche quand on active la feuille.

A+
 

Pièces jointes

Re,

Normalement il y aura une formule dans toutes les cellules étudiées mais j'ai quand même ajouté :
Code:
        If Left(f, 1) <> "=" Then f = False
la variable f étant déclarée As Variant.

Fichier (2).

Je mets un "J'aime" au post #1 car c'est un problème intéressant, surtout pour un 1er message !

A+
 

Pièces jointes

Bonjour job75,

Merci pour cet exemple, c'est effectivement plus simple de cette façon. Mais je ne comprend pas le principe de l'image dans un commentaire.
Je vois le carré du commentaire mais il est vide, je dois insérer le détail des sommes manuellement ? Je suis désolé je n'y connais rien en VBA.
 
J'ai essayé la méthode du "copier comme image" du coup mais ça ne marche pas non plus. Par contre lorsque j'ouvre votre fichier (3), je tombe sur la "feuille 2" et la je vois parfaitement le détail des sommes dans les commentaires.
Puis quand je clique sur la feuille "BDD" et je reviens dans la "feuille 2", l'actualisation fait perdre tout, les textes dans les commentaires disparaissent.
Donc le problème viendrait peut être de l'actualisation, sinon ça marche très bien merci beaucoup 🙂
Je m'en vais donc essayer avec vos formules générales, en évitant l'actualisation ça devrait aller.

Bonne soirée.
 
Bonsoir à Tous,

Pour moi c'est fonctionnelle. Voir l'exemple. Je suis sous Excel 2007, J'ai copié la BDD pour mars et avril et toujours OK.

Les images s'affichent dans les fenêtres commentaires comme Job75 le mentionne.

Par contre si plus d'un montant avec le même nom du produit j'ai un commentaire vide, il faut donc entrer un nom différent pour le produit.
J'ai entré quatre produits et ils s'affichent très bien.

Si ça peut servir.

Bonne soirée
Noel
 

Pièces jointes

Re,

Un grand merci Noël pour ton aide.

Avec ton fichier j'ai un bug sur .Paste car la feuille BDD est filtrée, créer un graphique dessus c'est pas génial.

J'ai donc remplacé dans la macro InsereImage :
Code:
With plage.Parent.ChartObjects.Add(0, 0, plage.Width, plage.Height).Chart
par :
Code:
With ActiveSheet.ChartObjects.Add(0, 0, plage.Width, plage.Height).Chart
Quant aux doublons de produits ils ne semblent pas poser de problème, voir les cellules D21 F21 G21.

Fichier (4) joint, peut-être que maintenant il fonctionnera chez ikuchan07.

Bonne nuit.
 

Pièces jointes

Bonjour ikuchan07, Noël, le forum,

Si les commentaires restent vides avec le fichier (4) essayez ce fichier (4 bis) avec cette macro :
Code:
Sub InsereImage(plage As Range, cel As Range)
plage.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, plage.Width, plage.Height).Chart
    .Parent.Activate 'force le focus sur l'objet
    .Paste
    .Export ThisWorkbook.Path & "\MonImage.gif", "GIF"
    .Parent.Delete 'supprime le graphique temporaire
End With
ActiveCell.Activate
cel.ClearComments
With cel.AddComment("").Shape
    .Width = plage.Width
    .Height = plage.Height
    .Fill.UserPicture ThisWorkbook.Path & "\MonImage.gif"
End With
Kill ThisWorkbook.Path & "\MonImage.gif" 'supprime le fichier gif
End Sub
Je vais d'ailleurs proposer cette solution à l'ami pompaero sur l'autre fil.

Bonne journée.
 

Pièces jointes

Bonjour Noel et job75,

Merci infiniment à vous tous !
C'est bon ça marche très bien avec votre nouvelle version (4 bis), l'actualisation se fait correctement et je vois bien les commentaires 🙂 🙂 🙂
Je suis entrain d'étudier votre nouvelle marco pour bien comprendre ce qui a changé.

Une dernière question s'il vous plait. Que faut-il changer dans le code si j'ajoute par exemple de nouveaux numéros dans la BDD (Ex: 3, 4, 5....etc) ?
Car mon fichier final sera beaucoup plus conséquent.

Merci à vous.
 
Re,
C'est bon ça marche très bien avec votre nouvelle version (4 bis), l'actualisation se fait correctement et je vois bien les commentaires 🙂 🙂 🙂
J'ai donc enfin trouvé la solution du problème, pompaero va être content, mais est-ce que le fichier (4) fonctionne lui ?

Pour ce qui est de créer d'autres numéros voyez ce fichier (5).

J'ai d'abord créé dans Feuil3 les tableaux des numéros de 3 à 10 par simple copier-coller de la plage A16: P24 vers le bas.

Et j'ai modifié la macro Worksheet_Activate ainsi :
Code:
For execution = 1 To 10
    For Each c In [D12:O12].Offset(9 * execution - 9)
        f = c.Formula
        f = Replace(f, "A" & 9 * execution - 2, "A$" & 9 * execution - 2)
A+
 

Pièces jointes

- 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
10
Affichages
385
Retour