begin process at 2013 06 20 02:23:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > NOUVELLE FONCTION EXCEL "OCCURENCE" POUR DÉTECTER LES DOUBLONS QUAND ON NE PEUT PAS TRIER LA FEUILLE

NOUVELLE FONCTION EXCEL "OCCURENCE" POUR DÉTECTER LES DOUBLONS QUAND ON NE PEUT PAS TRIER LA FEUILLE


 Information sur la source

Note :
Aucune note
Catégorie :VBA Classé sous :VBA, EXCEL, NBVAL, DOUBLONS, FILTRE Niveau :Débutant Date de création :30/05/2012 Vu / téléchargé :4 398 / 289

Auteur : BILLOTmi

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Pour répondre à la demande du membre SNOFNIE
qui ne peut ni trier sa feuille ni en supprimer les doublons avec les methodes classiques d'excel.

Cette fonction detecte les doublons sans trier la feuille
Pour le premiere occurence d'un identifiant la fonction retourne 1
Pour toutes les autres occurences la fonction retourne "n"


Source

  • Public Function Occurence(oCell As Range, oRange As Range)
  • ' ----------------------------------------------------------------------------
  • ' Nouvelle fonction Excel par BILLOT Michel 20120530
  • ' Détermine s'il s'agit de la premiere occurence de la cellule oCell sur la plage oRange
  • ' Pour identifier les doublons sans avoir à trier la feuille
  • ' ----------------------------------------------------------------------------
  • ' Retourne
  • ' "#" si la cellule cherchee ne fait pas partie de la plage ou si plage au lieu de celleule cherchee
  • ' "" si la valeur cherchee est vide
  • ' 1 s'il s'agit de la premiere occurence de la cellule sur la plage
  • ' "n" pour toutes les autres occurences de la valeur
  • ' Exemple d'utilisation dans une formule Excel
  • ' =Occurence(D222,D$2:D$857)
  • '
  • ' Exemple d'utilisation pour générer la formule dans la cellule F19
  • ' Range("F19").Formula = "=occurence(D19,D$2:D$857)"
  • '
  • ' Exemple d'utilisation de la fonction directement en VBA
  • ' Select Case Occurence(Range("D19"), Range("D$2:D$857"))
  • ' Case Is = 1
  • ' Case Else
  • ' End Select
  • Dim wCell As Range
  • Dim Found%, Ctr%
  • If oCell.Cells.Count = 1 Then
  • For Each wCell In oRange
  • If Not IsEmpty(wCell.Value) Then
  • If wCell.Value = oCell.Value Then
  • ' Cellule contenant la valeur demandée
  • Ctr% = Ctr% + 1
  • End If
  • End If
  • If wCell.Address = oCell.Address Then
  • ' Cellule recherche trouvée dans la plage
  • Found% = True
  • Exit For
  • End If
  • Next wCell
  • End If
  • If Found% Then
  • Select Case Ctr%
  • Case Is = 0: Occurence = "" ' Cellule vide recherchée
  • Case Is = 1: Occurence = 1 ' 1 ere occurence
  • Case Else: Occurence = "n" ' n eme occurence
  • End Select
  • Else
  • ' Erreur d'utilisation
  • ' La cellule recherchee n'est pas sur la plage indiquée
  • ' ou bien c'est une plage qui est cherchee au lieu d'une cellule
  • Occurence = "#"
  • End If
  • End Function
Public Function Occurence(oCell As Range, oRange As Range)
  
   ' ----------------------------------------------------------------------------
   ' Nouvelle fonction Excel par BILLOT Michel 20120530
   ' Détermine s'il s'agit de la premiere occurence de la cellule oCell sur la plage oRange
   ' Pour identifier les doublons sans avoir à trier la feuille
   ' ----------------------------------------------------------------------------
   ' Retourne
   '    "#" si la cellule cherchee ne fait pas partie de la plage ou si plage au lieu de celleule cherchee
   '    ""  si la valeur cherchee est vide
   '     1  s'il s'agit de la premiere occurence de la cellule sur la plage
   '    "n" pour toutes les autres occurences de la valeur
   
   ' Exemple d'utilisation dans une formule Excel
   '      =Occurence(D222,D$2:D$857)
   '
   ' Exemple d'utilisation pour générer la formule dans la cellule F19
   '       Range("F19").Formula = "=occurence(D19,D$2:D$857)"
   '
   ' Exemple d'utilisation de la fonction directement en VBA
   '    Select Case Occurence(Range("D19"), Range("D$2:D$857"))
   '       Case Is = 1
   '       Case Else
   '    End Select
   
   Dim wCell As Range
   Dim Found%, Ctr%
   
   If oCell.Cells.Count = 1 Then
      For Each wCell In oRange
         If Not IsEmpty(wCell.Value) Then
            If wCell.Value = oCell.Value Then
               ' Cellule contenant la valeur demandée
               Ctr% = Ctr% + 1
            End If
         End If
         If wCell.Address = oCell.Address Then
            ' Cellule recherche trouvée dans la plage
            Found% = True
            Exit For
         End If
      Next wCell
   End If
   
   If Found% Then
      Select Case Ctr%
         Case Is = 0:    Occurence = ""     ' Cellule vide recherchée
         Case Is = 1:    Occurence = 1      ' 1 ere occurence
         Case Else:      Occurence = "n"    ' n eme occurence
      End Select
   Else
      ' Erreur d'utilisation
      ' La cellule recherchee n'est pas sur la plage indiquée
      ' ou bien c'est une plage qui est cherchee au lieu d'une cellule
      Occurence = "#"
   End If
         
End Function




 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • NbValdistinct + Occurence.xlsTélécharger ce fichier [Réservé aux membres club]242 688 octets

Télécharger le zip


 Sources du même auteur

EXCEL POUR LES NULL NE PAS AFFICHER LES ZEROS (BWZ BLANK WH...
Source avec Zip Source avec une capture PROTECTION CONTRE LA PERTE OU L'INACTIVATION DES MACROS VBA ...
Source avec Zip VBA EXCEL : LIRE UN FICHIER TEXTE INDÉPENDAMMENT DE SON ENCO...
Source avec Zip Source avec une capture VBA EXCEL AFFICHER UN NUANCIER DES COULEURS AFIN DE CHOISIR ...
Source avec Zip Source avec une capture VBA DEUX NOUVELLES FONCTIONS EXCEL (NBVAL_DISTINCT ET NBVAL_...

 Sources de la même categorie

TRANSFORMER DU TEXTE EN RENVOI DANS WORD par professeur Xav
Source avec Zip RÉCUPÉRE LES DONNÉES D'UNE CELLULE DE PLUSIEURS FICHIER. par beaubeau21
Source avec Zip LISTE DES BLOCS AVEC LEURS QUANTITÉS par beaubeau21
Source avec Zip Source avec une capture AUTOCAD VBA FIBRES EPISSURES par beaubeau21
Source avec Zip EXCEL IMPRESSION PAR LOT par beaubeau21

 Sources en rapport avec celle ci

Source avec Zip RÉCUPÉRE LES DONNÉES D'UNE CELLULE DE PLUSIEURS FICHIER. par beaubeau21
Source avec Zip EXCEL IMPRESSION PAR LOT par beaubeau21
Source avec Zip EXCEL SUPPRESSION PAR LOT D'UNE FEUILLE par beaubeau21
Source avec Zip Source avec une capture EXCEL VBA - FILTRER LE CONTENU D'UNE LISTVIEW par lesly_lodin
Source avec Zip Source avec une capture MACRO COMPLÉMENTAIRE DE DÉDOUBLONNAGE POUR EXCEL par sybacs

Commentaires et avis

Commentaire de squirelXl le 11/02/2013 18:37:55

Bonjour,

la macro est un bel exemple didactique mets c'est encore plus facile d'utiliser les fonctions d'XL et surtout plus rapide si on a des millions de cellules.

Donc si on utilise dans la case d8 la fonction =COUNTIF($F$10:$K$18;C8)
on aura dans la case d8 le nombre d'occurences du contenu de la case c8 dans le range absolu f10 k18

Plus drôle si on veut avoir un message si on dépassse 1
on change la formule =IF(COUNTIF($F$10:$K$18;C8)<=1;COUNTIF($F$10:$K$18;C8);" n occurrences ")

mais si on veut être plus performant
on garde la formule =COUNTIF($F$10:$K$18;C8)
et on applique le format suivant [Green][<2]# ##0;"zéro";[Blue]"n occurences";"Zorro est arrivé"
j'ai mis des couleurs, c'est plus joli ;)

pour cela aller dans format cells et puis custom (sorry je n'utilise que la version US)
ici perf maximale car pas de double calcul possible et pas de if, seulement à l'affichage

Sinon, dans la macro pour un peu de perf, juste après la ligne 34 rajouter if Ctr% >1 then exit for

A+

Mon principe: vive les formules

Commentaire de squirelXl le 15/02/2013 10:42:30

mets >>> mais
quelle horreur

Commentaire de BILLOTmi le 15/02/2013 11:40:14

Bonjour,
Je crois que SquirelXL n'a pas bien compris l'énoncé du problème.

Il ne s'agit pas de compter le nombre d'occurrences d'une valeur
(ce que fait la fonction CountIF ou NB.SI en français)
mais de déterminer si dans une liste de valeurs une cellule est la premiere ou la n ème.
Le but étant d'identifier l'original et les doublons sans trier la feuille (condition imposée par le membre utilisateur SNOFNIE).

Avec la solution CountIF on n' identifierait que les valeurs uniques et les valeurs multiples
alors que l'on veut identifier la première occurrence d'une valeur avec 1 et ses doubles avec n

Quand à l'optimisation proposée elle génèrerait un retour "#" erreur à tort.
Si on veut vraiment optimiser il faut faire
               ' Cellule contenant la valeur demandée
               Ctr% = Ctr% + 1
               If Ctr% > 1 Then
                  Occurence = "n"
                  Exit Function
               End If
Mais alors on ne vérifie plus si la cellule recherchée est bien à l'intérieur de la plage.

Donc je ne changerais rien à la solution proposée au probleme de SNOFNIE.
Michel BILLOT


  

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Vba Excel filtre de doublons [ par rvw68 ] BonjoursJ'ai une plage de données contenant des Nr d'emplacements. une autre dans laquelle j'attribue les emplacements à des personnes. Je veux avoir Filtre élaboré vba [ par vegastar69 ] Bonjour, je viens demander votre aide pour traduire ce que je veux faire sur mon tableau Excel en code VBA. Je vous explique un peu : J'ai un table vba excel combobox tri et élimination des doublons [ par alex1512 ] Bonjour,Je souhaiterais mettre les éléments d'une colonne d'une feuille excel dans une combobox sous vba(jusque la pas de problème) mais je souhaitera filtre excel en VBA [ par jimmyc ] Je debute dans la programmation VBA. Dans une feuille Excel filtrée je voudrais récupérer le nombre d'élément et les différents éléments contenu dans VBA Excel : Filtre personnalisé avec 3 conditions [ par hachebe ] Bonjour,Sous Excel, je souhaite activer un filtre automatique personnalis&#233; (selection.autofilter) avec 3 valeurs possibles. Est-ce possible ? VBA EXCEL [ par LUSTRUCRU ] Bonjour à toutes et tous,Je souhaite écrire dans la cellule A801  La formule suivante = NBVAL(a1: A800) pour pouvoir recuperer le nombre de ligne util Filtre auto vba 6.3 Excel 2007 [ par helpvb ] Bonjour J aurais besoin du code vba6.3 afin d'activer un filtre sur la 1ere ligne de ma feuille Excel 2007 Je précise cette feuille est protégée et l Recherche de doublons [ par RUGBYMAN78 ] Bonjour à tous ! J'ai quelques soucis avec vba sous excel. Tout d'abord, j'ai suivi une initiation à vba , mais voilà déjà 2 ans de passés, et mes sou Recherche d'une fonction MATLAB équivalente en VBA excel [ par robkin ] Bonjour, Je suis actuellement en stage et je réalise la simulation thermique dynamique d'un ballon d'eau chaude sannitaire. J'ai appris à effectuer [VBA]Développement d'une application planning sous VBA / Excel [ par PacifiqueW ] Bonjour, Je suis en ce moment sur un projet d'application planning que je suis forcé de développer en VBA et j'avouerai qu'autant je pense que je n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,964 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales