IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel 2007 - VBA - Boucle de dénombrement des doublons selon contenu texte variable d'une cellule [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Excel 2007 - VBA - Boucle de dénombrement des doublons selon contenu texte variable d'une cellule
    Bonjour à tous,

    Je sollicite l'aide des pros du VBA pour répondre à ma problématique.
    Je cherche à créer une macro qui recherche les doublons d'un numéro, présent en cellule A1, feuille1, dans la colonne L de ma feuille2, et ainsi de suite pour chaque ligne de ma feuille 1.
    Une fois les doublons repérés, je voudrais afficher à coté du numéro (en C1 par exemple sur ma feuille 1) le nombre de fois où la macro a rencontré le numéro (si la macro trouve 3 fois le même numéro dans la colonne L, C1 contiendra 3)

    Voici mon code, qui ne bug pas mais ne donne rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Repetition ()
    Dim x1 As Long
    Dim x2 As Long
    Dim LastRow As Long
    Dim i As Integer
    Dim j As Integer
    LastRow = Worksheets("feuille 2").Range("L1500").End(xlUp).Row
    LastRow2 = Worksheets("feuille 1").Range("A1500").End(xlUp).Row
    For x1 = LastRow To 1 Step -1
    For x2 = LastRow2 To 1 Step -1
    Compte = Application.WorksheetFunction.CountIf(Worksheets("feuille 2").Range("L2:L1500" & x1), Worksheets("feuille 1").Range("A" & x2))
    For i = 2 To j
    If Compte > 1 Then
    Sheets("feuille 1").Cells(i, 3) = Compte
    End If
    Next
    Next
    Next
     
    End Sub
    Besoin d'aide s'il vous plaît !

    Cordialement

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu devrais placer ton code entre les balises prévues à cet effet (dernier de la deuxième série de bouton dans l'éditeur ('#') .
    Je ne pense pas qu'elle soit la cause du problème mais cette ligne de code n'est pas correcte dans ton cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Compte = Application.WorksheetFunction.CountIf(Worksheets("feuille 2").Range("L2:L1500" & x1), Worksheets("feuille 1").Range("A" & x2))
    Pourquoi la concaténation de la variable x1 ? cela te donnera L150090 si x1 vaut 90
    et puis pourquoi la boucle de I ?
    A partir du moment où x2 que tu ferais bien de renommer par Ligne2 ou Row2 pour que ton code soit plus explicite représente le numéro de ligne où tu évalues le nombre de fois que la valeur se trouve dans la colonne, il suffit d'utiliser la même variable.
    Il serai plus simple d'écrire la formule dans la colonne C (même en VBA) de la feuille 1 la formule =COUNTIF(feuil2!L2:Lxxx;A1) cela fait une ligne de code et cela t'évite des boucles parfaitement inutile.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse prompte.
    Je n'ai pas tout saisi mais je vais tâcher de mieux exprimer ce que je souhaite.

    Il n'y a pas de concaténation pour x1, le " & " dans le code me sert pour la mise en forme du Range juste avant. Par contre il doit bien y avoir une erreur de syntaxe dont je ne trouve pas l'origine.

    Si je crée une formule pour compter les doublons, le problème est qu'il faudrait renseigner à la main le numéro à rechercher, et pour chaque ligne, alors qu'il est présent dans la colonne A ( il y a environ 150 lignes ), ce qui serait trop long.
    La macro me permettrait de me placer en A2, rechercher les doublons, puis descendre en ligne 3 et ainsi de suite jusqu'à la dernière ligne, tout en renseignant en colonne C le nombre de fois où la valeur est trouvée.

    J'espère être plus clair dans ma demande, je vous remercie

    Cordialement



    NB : J'ai omis de préciser que les nombre à rechercher (à chaque ligne le nombre change) sont contenus dans des chaînes de caractère en colonne L. Je dois donc me servir de la fonction "Like" en VBA , enfin il me semble, et je ne sais comment procéder...

    NB 2 : Voici un fichier exemple, pour plus de clarté

    Cordialement,
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je l'ai expliqué, il n'y a pas de raison de faire une boucle.
    La première chose à faire lorsque l'on développe en VBA pour excel, c'est de se poser la question comment le ferais-je manuellement avec les formules et outils d'excel.
    Au lieu de partir de C1 vers C150 avec une boucle de 1 à 150 ce qui oblige d'évaluer et d'écrire 150 fois la formule CountIf, il suffit d'écrire la formule dans une colonne puisque c'est cela que tu souhaites.
    Exemple : Imaginons que nous voulions à l'aide d'excel calculer de la colonne A1:A5 de la feuille Feuil1, le nombre de fois que l'on retrouve A1 et puis A2 et ainsi de suite dans la colonne B (qui contient 43 lignes) de Feuil2. Formule que l'on placerait en colonne C
    La formule serait
    =NB.SI(Feuil2!$B$2:$B$44;Feuil1!$A2)

    En VBA une ligne suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
     ThisWorkbook.Worksheets("Feuil1").Range("C2:C5").Formula = "=COUNTIF(Feuil2!$B$2:$B$44,Feuil1!$A2)"
    End Sub
    Evidemment comme les adresses ne sont pas les mêmes, il faut adapter pour connaître la dernière ligne mais cela te donne une piste

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci encore mais je pense que cela ne répond pas à mon problème

    Cette formule ne me donnerait rien comme résultat car la colonne dans laquelle il faut rechercher le numéro contient des chaînes de caractère, du type " EDT_68_Changement_etc... "
    Si ma référence est le numéro " 68 " en A2, et que j'utilise simplement A2 comme référence, la formule ne trouverai rien puisqu'il s'agit d'une chaîne de caractère, non?

    Je vous remercie de prendre du temps pour m'éclairer...

    Cordialement

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cette formule ne me donnerait rien comme résultat car la colonne dans laquelle il faut rechercher le numéro contient des chaînes de caractère, du type " EDT_68_Changement_etc... "
    Si ma référence est le numéro " 68 " en A2, et que j'utilise simplement A2 comme référence, la formule ne trouverai rien puisqu'il s'agit d'une chaîne de caractère, non?
    Première fois que l'on évoque cette nouvelle contrainte, dans ce cas et sauf si d'autres impératifs venaient à surgir, il faut faire la concaténation du caractère générique *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(Feuil2!$B$2:$B$44;"*" & Feuil1!$A2 & "*")
    Il est difficile de répondre à une question mal posée.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Voilà qui résout tous mes problèmes, encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Web Service SOAP Fichier WSDL / Extraction des données dans un classeur
    Par crusaders dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2014, 12h05
  2. [PHP 5.3] Mes Boucles imbriquées donnent des doublons
    Par elvan49 dans le forum Langage
    Réponses: 5
    Dernier message: 19/03/2012, 13h31
  3. Excel 2007 VBA manipulation du ruban
    Par jjcol dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/09/2007, 17h41
  4. [VBA] Boucle en sautant des indices
    Par dalmasma dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/07/2007, 09h11
  5. Réponses: 8
    Dernier message: 22/03/2006, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo