Tableau et doublons en VBA
Résolu
SleepyAshes
Messages postés
34
Statut
Membre
-
SleepyAshes Messages postés 34 Statut Membre -
SleepyAshes Messages postés 34 Statut Membre -
Bonjour à la communauté,
Je suis vraiment un débutant en VBA et je me retrouve bloqué dans un exercice donné par un ami.
Voilà la consigne:
Dans une feuille excel se trouve plusieurs nom de personnes travaillant pour X entreprise. Quelques colonnes plus loin se trouve le nombre de jour où ils ont travaillé. Le truc c'est que les noms se répète un nombre x de fois mais il y a au total 15 personnes seulement (les lignes allant jusqu'à 890 dont la première ligne sert d'entête). J'aimerais donc avec une macro créé une liste qui m'affiche seulement 1 seule fois UNE SEULE PERSONNE mais qui fasse la somme de ses journées de travail. Si le résultat pouvait se trouver en cellule E2 ce serait parfait Il suffirait que la macro fonctionne que pour un seul nom (Olivier par exemple)
Merci d'avance :)
Je suis vraiment un débutant en VBA et je me retrouve bloqué dans un exercice donné par un ami.
Voilà la consigne:
Dans une feuille excel se trouve plusieurs nom de personnes travaillant pour X entreprise. Quelques colonnes plus loin se trouve le nombre de jour où ils ont travaillé. Le truc c'est que les noms se répète un nombre x de fois mais il y a au total 15 personnes seulement (les lignes allant jusqu'à 890 dont la première ligne sert d'entête). J'aimerais donc avec une macro créé une liste qui m'affiche seulement 1 seule fois UNE SEULE PERSONNE mais qui fasse la somme de ses journées de travail. Si le résultat pouvait se trouver en cellule E2 ce serait parfait Il suffirait que la macro fonctionne que pour un seul nom (Olivier par exemple)
Merci d'avance :)
A voir également:
- Vba supprimer doublons tableau
- Supprimer rond bleu whatsapp - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Supprimer page word - Guide
- Trier un tableau excel - Guide
1 réponse
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...
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 :
Bonne journée