XL 2013 Filtre donnée macro

vodky

XLDnaute Nouveau
Bonjour tout le monde :) !

Je dois faire une macro sur Excel 2013 pour filtrer des données sur 4 colonnes (Nom et prénom d'employé(e)) qui sont encore présent dans l'entreprise, cependant, malgré tous mes efforts je n'arrive pas au résultat voulu.

J'aurais aimé faire une macro qui me permettrai d'afficher seulement les noms et prénoms des personnes présentes dans les 4 colonnes, j'y arrive seulement grâce à la formule Exact, et il faut que les lignes soit à cotées. J'aimerais trier ses données avec des couples, par exemples, si nom+prénom = nom+prénom ou prénom+nom.

Je ne suis pas très doué en programmation c'est pour sa que je viens vous demandé votre aide :3
 

vodky

XLDnaute Nouveau
Re : Filtre donnée macro

J'ai juste une dernière question :3
Est ce que tu sais si la macro prend en compte les majuscules, les accents et les espaces :3 ?
Parce que du coup j'ai du un peu modifier mon tableau et le macro me retourne des valeurs fausses
 

vodky

XLDnaute Nouveau
Re : Filtre donnée macro

En gros, les employés présent sont dans les colonnes A (Nom) et B (prénom), personnes sur le PABX sont dans G (nom) et H (prénom) et du coup il faudrait retourner les valeurs dans les colonnes M (Nom) et N (prénom) pour les personnes présent dans l'entreprise mais pas présent sur le PABX et P (nom) et G (prénom) pour ceux qui sont sur le PABX mais pas dans l'entreprise :)
 

thebenoit59

XLDnaute Accro
Re : Filtre donnée macro

Franchement, tu m'as perdu :confused:
Les valeurs sont insérées à cet endroit:

Code:
    For Each c In d3.Keys
    Cells(i, 7).Resize(, 2) = Split(c, ":")
    i = i + 1
    Next c
    i = 2
    For Each c In d4.Keys
    Cells(i, 10).Resize(, 2) = Split(c, ":")
    i = i + 1
    Next c

d3.keys étant le personnel présent en entreprise mais pas dans le PABX.
Cells(i, 7) : i = numéro de ligne, 7 numéro de colonne.

Etc.
 

thebenoit59

XLDnaute Accro
Re : Filtre donnée macro

Code:
Option Explicit

Sub Presence_PABX()
' Déclaration des variables
Dim i As Long
Dim l As Long
Dim c As Variant
Dim d1 As Object, d2 As Object, d3 As Object, d4 As Object
' Définition des dictionnaires
Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Set d3 = CreateObject("scripting.dictionary")
Set d4 = CreateObject("scripting.dictionary")
' Définition de la dernière ligne
l = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    ' On boucle les deux premiers tableaux
    For i = 2 To l ' A partir de la deuxième ligne à la dernière
    d1(Cells(i, 1).Value & ":" & Cells(i, 2).Value) = "" ' On ajoute la clé colA et colB ligne i dans le dico1 exemple: A:Alexandre
    d2(Cells(i, 4).Value & ":" & Cells(i, 5).Value) = "" ' On ajoute la clé colD et colE ligne i dans le dico2
    Next i
    ' On boucle toutes les clés du dico 1
    For Each c In d1.Keys
    If Not d2.exists(c) Then d3(c) = "" ' Si la clé n'existe pas dans les clés du dico 2 on l'ajoute au dico 3
    Next c
    ' On boucle toutes les clés du dico 2
    For Each c In d2.Keys
    If Not d1.exists(c) Then d4(c) = "" ' Si la clé n'existe pas dans les clés du dico 1 on l'ajoute au dico 4
    Next c
    i = 2 ' On définit le numéro de ligne de départ
    For Each c In d3.Keys ' On boucle toutes les clés du dico 3 (celles du dico 1 non présentes dans le dico 2)
    Cells(i, 7).Resize(, 2) = Split(c, ":") ' On se place sur la colonne G ligne i + 1 colonne (resize), et on coupe la clé à chaque ":"
    i = i + 1 ' On incrémente le numéro de ligne
    Next c
    i = 2 ' Pareil que ci-dessus sauf pour le dico 4 et colonne J
    For Each c In d4.Keys
    Cells(i, 10).Resize(, 2) = Split(c, ":")
    i = i + 1
    Next c
End Sub
 

Discussions similaires

Réponses
7
Affichages
590

Statistiques des forums

Discussions
312 579
Messages
2 089 900
Membres
104 300
dernier inscrit
katlynefortin