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 :

[XL-2007] Répétition COUNTIF sur plusieurs lignes successives


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut [XL-2007] Répétition COUNTIF sur plusieurs lignes successives
    Bonsoir,

    J'ai besoin de lancer un COUNTIF sur plusieurs lignes successives mais je n'arrive pas à lancer cette commande en boucle.
    Dans ma colonne D, j'ai une liste de valeurs alphanumériques. La longueur de cette liste peut fluctuer. Cette liste contient des doublons.

    Dans la colonne I, je souhaite afficher le résultat du décompte des doublons pour chacune des valeurs de D.

    Mon code VBA contient ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("Feuil1")
    Set Data = .Range(.Cells(2, 4), .Cells(Rows.Count, 1).End(xlUp))
    End With
    Cells(2, 9) = Application.Evaluate("CountIf(" & Data.Address & ",D2)")
    Je souhaite répéter cette opération sur chaque ligne mais je ne sais pas comment donner une itération à D2.

    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim derniereLigne As Long
    derniereLigne = Range("D" & Rows.Count).End(xlUp).Row
    for i = 2 to derniereligne ' car je veux commencer les répétitions à la ligne 2 jusqu'en bas de ma liste
    cells(c,9)= Application.Evaluate("CountIf(" & Data.Address & ",cells(c,4))")
    ca me renvoie un message d'erreur sur la valeur.
    J'ai essayé alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(c,9)= Application.Evaluate("CountIf(" & Data.Address & ",cells(c,4).Valeur)")
    mais sans succès. puis j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(c,9)= Application.Evaluate("CountIf(" & Data.Address & ",cells(c,4).Address)")
    mais pas mieux donc je suis passé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(c, 9) = Application.Evaluate("CountIf(" & Data.Address & ","D"&i)")
    mais idem ça me renvoie une erreur.

    je suis à cours d'idée.

    Le moindre conseil m'aiderait fortement.

    vous remerciant à l'avance pour toute suggestion.

    Cordialement,
    Tranksen.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut Démonstration …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Rg As Range
        Application.ScreenUpdating = False
     
        With Feuil1.Range("D2", Feuil1.Cells(Rows.Count, 4).End(xlUp))
            For Each Rg In .Cells
                Rg(, 6).Value = Feuil1.Evaluate("COUNTIF(" & .Address & "," & Rg.Address & ")")
            Next
        End With
    _______________ _____________________________________ _____________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Bonjour Marc-L,

    merci pour votre réponse rapide.
    J'ai essayé votre script mais hélas il ne se passe strictement rien dans ma feuille.

    Peut-être me suis-je mal exprimé en décrivant ce que je cherche à faire.
    dan sune colonne j'ai une liste de valeur alphanumérique et dans la colonne suivante je veux compter le nombre de fois que chacune de ces valeurs apparait dans ma plage:

    CLHU8854820 2
    CPSU1080493 2
    GESU5644628
    TOTO 1
    HLXU4119936
    HLXU4389356
    HLXU4433783
    HLXU4465230
    HLXU4495640
    HLXU5032276
    HLXU5040939
    HLXU5104611
    HLXU5134093
    HLXU6216730
    SCZU3282260
    CLHU8854820
    CPSU1080493
    GESU5644628
    HLXU4119936
    HLXU4389356
    HLXU4433783
    HLXU4465230
    HLXU4495640
    HLXU5032276
    HLXU5040939
    HLXU5104611
    HLXU5134093
    HLXU6216730
    SCZU3282260
    TRLU6588521
    TRLU6588521

    je veux répéter le comptage sur chacune des lignes en faces de la valeur alphanumérique.
    je sais utiliser la formule pour une seule opération mais je ne sais pas lancer d'itération pour chaque ligne.

    Toute suggestion m'aiderait fortement.

    Merci encore.

    Cordialement,
    Tranksen

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Dans la demande initiale, les données sont dans la colonne D et le résultat doit être en colonne I,
    sans souci de mon côté sous Excel 2003 !

    Consulter dans l'aide VBA la propriété Range.Offset pour changer de colonne …

    Sinon commencer par tester directement une formule NB.SI dans la première cellule résultat et,
    une fois au point, la poster ici …

    Autre moyen simple : activer l'Enregistreur de macros, entrer la formule dans la première cellule
    puis la recopier vers le bas : le code est livré sur un plateau !

  5. #5
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Marc-L,

    tu avais vu juste : j'ai dû utiliser offset et ça fonctionne.
    Ma formule initiale était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(2, 10) = Application.Evaluate("CountIf(" & Data.Address & ",D2)")
    Et mon problème était de répéter cette opération sur chaque ligne contenant des valeur car je n'arrivais pas à incrémenter D2.
    J'ai réussi avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For c = 2 To derniereLigne
    Critere = Range("D2").Offset(c - 2, 0).Address
    Cells(c, 10) = Application.Evaluate("CountIf(" & Data.Address & "," & Critere & ")")
    Merci pour ta suggestion.

    Si ça peut aider quelqu'un d'autre, tant mieux

    Bonne journée à toi.
    Cordialement
    Tranksen

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Je viens de tester sans souci mon code sous la version 2007 ! …

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

Discussions similaires

  1. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 14h47
  2. Response.Write sur plusieurs lignes
    Par simoryl dans le forum ASP
    Réponses: 2
    Dernier message: 31/08/2004, 22h49
  3. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  4. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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