Tableau et doublons en VBA
Résolu/Fermé
SleepyAshes
Messages postés
34
Date d'inscription
mardi 31 mai 2016
Statut
Membre
Dernière intervention
29 juin 2017
-
Modifié par SleepyAshes le 6/06/2016 à 14:24
SleepyAshes Messages postés 34 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 29 juin 2017 - 7 juin 2016 à 09:34
SleepyAshes Messages postés 34 Date d'inscription mardi 31 mai 2016 Statut Membre Dernière intervention 29 juin 2017 - 7 juin 2016 à 09:34
A voir également:
- Vba supprimer doublons tableau
- Tableau croisé dynamique - Guide
- Supprimer les doublons excel - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Supprimer une page word - Guide
1 réponse
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
6 juin 2016 à 16:47
6 juin 2016 à 16:47
Bojour SleepyAshes, bonjour le forum,
Comment peux-tu être aussi vague puis demander de renvoyer le résultat en E2 ! La méthode dépend complètement de la disposition des données...
Le code ci-dessous fonctionne si les noms sont en colonne A les jours en colonne C et la colonne B contient des données :
Le résultat s'affiche dans les colonnes E et F à partir de la ligne 2.
Tu adapteras...
Comment peux-tu être aussi vague puis demander de renvoyer le résultat en E2 ! La méthode dépend complètement de la disposition des données...
Le code ci-dessous fonctionne si les noms sont en colonne A les jours en colonne C et la colonne B contient des données :
Sub Macro1() Dim O As Worksheet 'déclare la variable O (Onglet) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim D As Object 'déclare la variable O (Onglet) Dim I As Long 'déclare la variable O (Onglet) Dim TP As Variant 'déclare la variable TP (Tableau Temporaire) Dim TJ() As Variant 'déclare la variable TJ (Tableau des Jours) Set O = Worksheets("Feuil1") 'définit l'onglet O (a adapter) TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV (à adapter) Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde) D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la première colonne du tableau ds valeur TV Next I 'prochaine ligne de la boucle TP = D.keys 'récupère dans le tableau temporaire TP la liste des éléments du dictionnaire D sans doublon ReDim TJ(UBound(TP)) 'redimensionne le tableau des jours TJ (autant de lignes que TP) For I = 0 To UBound(TP) 'boucle 1 : sur toues les éléments du tableau TP For J = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes du tableau des valeurs TV (en partant de la seconde) If TV(J, 1) = TP(I) Then TJ(I) = TJ(I) + TV(J, 3) 'si la donnée ligne I, colonne 1 de TV est égale à l'élément de TP, fait la somme dans le tableau TJ Next J 'prochaine ligne de la boucle 2 Next I 'prochain élément de la boucle 1 Range("E2").Resize(UBound(TP) + 1, 1) = Application.Transpose(TP) 'renvoie dans E2 redimensionné le tableau TP transposé Range("F2").Resize(UBound(TP) + 1, 1) = Application.Transpose(TJ) 'renvoie dans F2 redimensionnée le tableau TJ transposé End Sub
Le résultat s'affiche dans les colonnes E et F à partir de la ligne 2.
Tu adapteras...
6 juin 2016 à 16:50
Modifié par pijaku le 7/06/2016 à 09:06
Une petite variante de la méthode de ThauTheme (salutations) :
EDIT : Si tu veux en E2 la somme des jours pour Olivier, il suffit d'une formule, pas besoin de VBA.
Avec les prénoms en colonne A et les jours en colonne C, saisir en E2 :
7 juin 2016 à 09:34
Bonne journée