Afficher le nombre d'occurence et leur localisation
Bonjour,
J'ai une problématique:
J'ai plusieurs fichier Excel avec plusieurs onglets. Dans ces fichiers Excel, il y a des références liés a des désignation. J'aimerais créer un onglet récapitulatif ou par liste déroulante ou autre pour chaque références ca me donne:
- sa quantité dans le fichier Excel
- son emplacement (dans quel onglets il apparait)
Est ce possible de réaliser ca? Si oui quelqu'un peut t'il m'indiquer la marche a suivre ou m'aider a la réalisation de ce récapitulatif?
Je vous remercie par avance de votre aide
Petite précision je suis totalement novice en VBA
Bonjour Turok et bienvenu, bonjour le forum,
Le fichier, le fichier !!! Criait la foule en délire...
Merci ThauThème pour le rappel
je viens de le joindre a la demande mais je ne sais pas si ca va être assez explicite avec les fausses données :/
Re,
Peut-être comme ça :
Option Explicit
Sub Macro1()
Dim R As Worksheet 'déclare la variable R (onglet Recap)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim O As Worksheet 'déclare la variable O (onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim T As Integer 'déclare la variable T (Total)
Set R = Worksheets("Recap") 'définit l'onglet R
R.Range("A1").CurrentRegion.ClearContents 'efface d'éventuelles anciennes valeurs dans l'onglet R
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each O In Sheets 'boucle sur tous les onglets O
If O.Name <> R.Name Then 'condition : si l'onglet de la boucle n'est pas l'onglet R
TV = O.Range("D11").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) <> "" Then D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 de TV
Next I 'prochaine ligne de la boucle
End If 'fin de la condition
Next O 'prochaine onglet de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
ReDim TL(1 To 3, 1 To D.Count) 'redimensionne le tableau des lignes Tl (3 lignes, autant de colonnes que d'éléments dans le tableau temporaire TMP)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
T = 0 'initialise le total T
For Each O In Sheets 'boucle 2 : sur tous les onglets O du classeur
If O.Name <> R.Name Then 'condition 1 : si l'onglet de la boucle n'est pas l'onglet R
TV = O.Range("D11").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 3 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition 2 : si la donnée ligne I colonne 1 de TV est égale a l'élément J de TMP
TL(1, J + 1) = TV(I, 1) 'récupère la donnée dans la ligne 1 de TL
T = T + TV(I, 2) 'définit la total T
TL(2, J + 1) = T 'récupère le total T dans la ligne 2 de TL
TL(3, J + 1) = IIf(TL(3, J + 1) = "", O.Name, TL(3, J + 1) & "/" & O.Name) 'concatene le nom de l'onglet dans la ligne 3 de TL
End If 'fin de la condition 2
Next I 'prochaine ligne de la boucle 3
End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 2
Next J 'prochain élément de la boucle 1
R.Range("A1").Resize(UBound(TL, 2), 3).Value = Application.Transpose(TL) 'renvoie dans A1 redimensionnée de l'onglet R le tableau TL transposé
End SubWahou merci je vais essayer de comprendre pour tester ça :)
Encore merci pour toutes ses lignes.
Ma demande va peut être être abusé mais serait t'il possible que tu m'expliques ce que je dois remplacer par mes valeurs?
Je suis vraiment débutant dans les macros et j'ai beau essayé de comprendre j'ai vraiment du mal
Je te remercie par avance du temps consacré au problemes