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 :

Fonction CountIF macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut Fonction CountIF macro
    Bonjour à tous, j'aurai besoin de votre aide pour une macro.


    J'essaie d'automatiser un tableau, afin de pouvoir remplir automatiquement ce tableau à partir d'autres feuilles.

    J'utilise notamment la fonction countif pour remplir ce tableau, sauf que j'ai du mal à utiliser cette fonction.
    Je vous met le bout de code pour que vous puissiez me corriger.

    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
    Sub macro1()
     
    With Sheets("MSPTT")
    ' Je déclare la plage variable de l'onglet MSPTT
    Set mspui = Range([K1], [K65635].End(xlUp))
     
      End With
    ' Je selectionne la cellule E4 de la feuille TAUX et prend la valeur retournée par la fonction CountIF   
      Sheets("Taux MSP").Range("E4") = WorksheetFunction.CountIf(mspui, "LOIRE")
       '  Sheets("Taux MSP").Range("E5") = WorksheetFunction.CountIf(mspui, "PARIS")
        ' Sheets("Taux MSP").Range("E6") = WorksheetFunction.CountIf(mspui, "LYON")
        ' Sheets("Taux MSP").Range("E7") = WorksheetFunction.CountIf(mspui, "MARSEILLE PROVENCE")
        ' Sheets("Taux MSP").Range("E8") = WorksheetFunction.CountIf(mspui, "NICE")
        ' Sheets("Taux MSP").Range("E9") = WorksheetFunction.CountIf(mspui, "RENNES")
    End Sub

    Sauf que ça ne marche pas, j'ai que des 0 à la place des bonnes valeurs.

    Vous savez d'ou peut venir le problème ? Merci pour votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quand tu définies ta plage Mspui, tu es dans un bloc With/End With représentant la feuille voulue
    mais tu as oublié de rattacher ton range à ce bloc

    rajoute un point devant ton range, sinon tu prend la plage de la feuille active

    je me suis permis de modifier ta méthode de calcul de la plage, puisque tes feuilles peuvent potentiellement contenir un million de cellules

    je te propose également une boucle pour réaliser toutes tes formules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub macro1()
    Dim MsPui As Range, i As Integer, TabCrit()
     
    TabCrit = Array("LOIRE", "PARIS", "LYON", "MARSEILLE PROVENCE", "NICE", "RENNES")
     
    With Sheets("MSPTT")
        Set MsPui = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp))
    End With
     
    For i = LBound(TabCrit) To UBound(TabCrit)
        Sheets("Taux MSP").Range("E" & 4 + i) = WorksheetFunction.CountIf(MsPui, TabCrit(i))
    Next i
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    Merci beaucoup joe.levrai ta solution marche parfaitement, j'ai repris ce code pour effectuer la même chose sur un autre onglet.


    Il me reste une dernière colonne à remplir et mon tableau sera automatisé, sauf que je n'arrive pas trouver la solution car la méthode est différente.


    Je dois en fait remplir la colonne de mon tableau à partir d'un TCD d'une autre feuille, et retourner les valeurs de ce TCD dans le tableau, mais je ne sais pas comment faire.

    Aurais-tu une idée ?


    Merci encore une fois pour ton aide.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Récupérer les données d'un TCD est plus complexe qu'une simple formule de recherche dans des cellules.

    Il va falloir travailler un peu sur la mécanique de la formule dédiée LIREDONNEESTABCROISDYNAMIQUE()

    Regarde l'aide Excel pour dans un premier temps :

    - comprendre sa mécanique
    - réaliser ce que tu souhaites à la main (= tu écris les formules dans ton tableau pour récupérer les valeurs)
    - ensuite tu passes par l'enregistreur de macro pour "capturer" tes formules
    - reviens avec le code fourni par l'enregistreur, on va l'adapter et l'optimiser


    il faut absolument que tu travailles en amont ce sujet, si on te donne la solution prête à l'emploi tu ne pourras jamais l'adapter ou la réutiliser

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    Merci joe.levrai pour ta réponse,


    J'ai en effet regardé dans l'aide d'excel pour lire les données d'un TCD, ainsi que différents sujets sur internet, j'ai essayé une méthode qui ne fonctionne pas donc j'ai utilisé comme tu m'as dit l'enregistreur de macro, et voila le code retourné :

    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
    21
    22
    23
    Range("C4").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""PARIS"")"
        Range("C5").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""RENNES"")"
        Range("C6").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""NICE"")"
        Range("C7").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""LYON"")"
        Range("C8").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""MARSEILLE"")"
        Range("C9").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""AMIENS"")"
        Range("C10").Select
        ActiveCell.FormulaR1C1 = _
            "=GETPIVOTDATA(""Dos.Nom de l’UI"",'Tcd par UI'!R1C1,""Dos.Nom de l’UI"",""AIN"")"
        Range("C11").Select
    End Sub

    Du coup, j'imagine qu'il est possible de boucler comme tu m'avais proposé auparavant, et surtout la référence du TCD doit être adapté mais je comprends pas trop ce que veut dire R1C1, c'est par rapport aux lignes et colonnes ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 48
    Par défaut
    RE


    En fait je viens de me rendre compte que ce n'était pas forcément nécéssaire de passer par le TCD, il suffirait de compter directement depuis la base qui a servi au TCD, et le code reviendrait au même que précédemment.


    Qu'en penses-tu ?

Discussions similaires

  1. [XL-2003] fonction ou macro recherchant l'existance d'une feuille
    Par Raphael13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2009, 10h27
  2. Création de fonction par macro
    Par cati_78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/05/2009, 06h18
  3. Réponses: 2
    Dernier message: 20/01/2009, 17h27
  4. Fonction (ou macro) pour incorporer des images dans Excel
    Par metis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2007, 13h34
  5. [VBA-E] probleme avec la fonction countif
    Par adamm dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/02/2006, 09h23

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