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 :

Impossible de lire la propriété countifs de la classe WorksheetFunction


Sujet :

Macros et VBA Excel

  1. #21
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonjour. Je tente une fois de plus ma chance en espérant cette fois obtenir une aide.
    J'ai un problème avec la méthode CountIfs :

    impossible de lire la méthode countifs de l'application worksheet
    Voici le code :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub essai2()
     
    Dim plage1 As Range
     
    Dim plage2 As Range
     
    Dim i As Long
     
    Dim tab_ville(2) As String
     
    Dim c As Double
     
    Dim ville As String
     
     
    tab_ville(0) = "Marzy"
     
    tab_ville(1) = "Nevers"
     
     
    Sheets("Feuil1").Select
     
     
    Set plage1 = Range("b2", Range("b1048576").End(xlUp))
     
    Set plage2 = Range("c2", Range("b1048576").End(xlUp))
     
    For i = 0 To 1:
     
        a = Application.WorksheetFunction.CountIfs(plage1, "oui", plage2, tab_ville(i))
     
        b = Application.WorksheetFunction.CountIfs(plage1, "non", plage2, tab_ville(i))
     
        c = a / (a + b)
     
        MsgBox c
     
    Next
     
     
    End Sub
    Le fichier est comme ceci (transposer)
    Local : 1-2-3-4-5
    Vacant : non-oui-oui-oui-non
    Ville : nevers-marzy-nevers-nevers-marzy

    J'ai essayé de mettre un on error goto error sur la ligne de la variable c quand les plages sont 0 car 0/0 est une erreur mais malgré ça le code ne marche pas. Idem quand seul des oui ou non sont renseignées pour une ville et que l'autre a des vides, le code ne marche pas non plus.

    Pourtant les arguments de countifs avec les bons types sont respectés. Je ne comprends plus rien.

  2. #22
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Comme ceci

    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
    24
    Option Compare Text
     
    Sub essai2()
        Dim plage1 As Range, plage2 As Range
        Dim i As Long, DerLig As Long
        Dim tab_ville(2) As String, ville As String
        Dim c As Double
     
        tab_ville(0) = "Marzy"
        tab_ville(1) = "Nevers"
        With Sheets("Feuil1")
            DerLig = .Range("B" & Rows.Count).End(xlUp).Row
            Set plage1 = .Range("B2:B" & DerLig)
            Set plage2 = .Range("C2:C" & DerLig)
            For i = 0 To 1
                a = Application.WorksheetFunction.CountIfs(plage1, "oui", plage2, tab_ville(i))
                b = Application.WorksheetFunction.CountIfs(plage1, "non", plage2, tab_ville(i))
                If a <> 0 And b <> 0 Then
                    c = a / (a + b)
                    MsgBox tab_ville(i) & " " & c
                End If
            Next
        End With
    End Sub
    Cdlt

  3. #23
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonjour ! Cela ne fonctionne pas. Dans derlig il n y'a que la colonne B et puis pour plage1 et plage2 pourquoi vous mettez des .avant le Range ? Merci quand même d'essayer de m'aider.

  4. #24
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Cela ne fonctionne pas
    c'est à dire, ça plante?, il ne se passe rien?

    Voici un fichier en exemple avec des trous dans les colonnes B et C
    Pièce jointe 574832
    ******************************************************************************

    Dans derlig il n y'a que la colonne B et puis pour plage1 et plage2
    Je me suis basé sur votre code ou vous cherchez la dernière ligne par rapport à la colonne B, j'ai donc fait pareil, cette dernière ligne sera la même pour les autres colonnes, mais vous pouvez choisir une autre colonne.
    ******************************************************************************

    pourquoi vous mettez des .avant le Range ?
    il faut se replacer dans le contexte, il y a d'abord cette ligne
    Ceci évite de répéter tout le temps le nom de la feuille, l'écriture ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With Sheets("Feuil1")
            DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    end with
    est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         DerLig = Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
    On écrit que le texte à partir du point. Très appréciable s'il y a beaucoup de ligne faisant référence à la feuille 1
    ******************************************************

    Si vous ne vous en sortez pas, déposez un fichier similaire au votre sans données confidentielles et mettez des exemples qui selon vous ne fonctionnent pas et avec les résultats attendus.

    Cdlt

  5. #25
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je me réfère au code publié dans le Fil #17
    En ligne 12 de ce code (voir ci-dessous), vous invoquez la fonction PourcLocVac
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D3").Value = PourcLocVac(plage1, plage2, "Marzy")
    or si je me réfère au code publié par Arturo, que je salue au passage, publié dans le Fil @7, (voir ci-dessous) tous les arguments sont des objets Range et vous passez comme troisième argument une variable typée String ("Marzi")

    Cela ne peut que provoquer une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function PourcLocVac(plage1 As Range, plage2 As Range, ville As Range)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #26
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour Philippe Tulliez,

    Dans un sens vous avez raison, mais ici ville est une cellule (E2), et la formule saisie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PourcLocVac(plage1;plage2;E$2)
    Ayant refait tourné la fonction à plusieurs reprises, cela ne déclenche pas d'erreur et j'obtiens bien les résultats escomptés.

    Mais depuis, notre amie ORLI243 à changé d'optique et ne fait plus cas d'une fonction personnalisée, mais plutôt directement dans une "sub". j'attends sa réponse concernant les explications apportées sur le dernier fichier déposé.

    Cdlt

  7. #27
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour Arturo,
    Je n'ai fait que me référencé aux deux fils cités et là c'est bien une chaîne ("Marzy") qui est transmise à un argument de type Range mais sans doute cela a évolué depuis

    Mais depuis, notre amie ORLI243 à changé d'optique et ne fait plus cas d'une fonction personnalisée, mais plutôt directement dans une "sub".
    Pourquoi ne pas écrire directement la fonction personnalisée dans la plage résultat puisque d'après ses dires cela fonctionne manuellement
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #28
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Comme ceci

    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
    24
    Option Compare Text
     
    Sub essai2()
        Dim plage1 As Range, plage2 As Range
        Dim i As Long, DerLig As Long
        Dim tab_ville(2) As String, ville As String
        Dim c As Double
     
        tab_ville(0) = "Marzy"
        tab_ville(1) = "Nevers"
        With Sheets("Feuil1")
            DerLig = .Range("B" & Rows.Count).End(xlUp).Row
            Set plage1 = .Range("B2:B" & DerLig)
            Set plage2 = .Range("C2:C" & DerLig)
            For i = 0 To 1
                a = Application.WorksheetFunction.CountIfs(plage1, "oui", plage2, tab_ville(i))
                b = Application.WorksheetFunction.CountIfs(plage1, "non", plage2, tab_ville(i))
                If a <> 0 And b <> 0 Then
                    c = a / (a + b)
                    MsgBox tab_ville(i) & " " & c
                End If
            Next
        End With
    End Sub
    Cdlt
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Arturo,
    Je n'ai fait que me référencé aux deux fils cités et là c'est bien une chaîne ("Marzy") qui est transmise à un argument de type Range mais sans doute cela a évolué depuis


    Pourquoi ne pas écrire directement la fonction personnalisée dans la plage résultat puisque d'après ses dires cela fonctionne manuellement
    Citation Envoyé par ARTURO83 Voir le message
    c'est à dire, ça plante?, il ne se passe rien?

    Voici un fichier en exemple avec des trous dans les colonnes B et C
    Pièce jointe 574832
    ******************************************************************************


    Je me suis basé sur votre code ou vous cherchez la dernière ligne par rapport à la colonne B, j'ai donc fait pareil, cette dernière ligne sera la même pour les autres colonnes, mais vous pouvez choisir une autre colonne.
    ******************************************************************************


    il faut se replacer dans le contexte, il y a d'abord cette ligne
    Ceci évite de répéter tout le temps le nom de la feuille, l'écriture ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With Sheets("Feuil1")
            DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    end with
    est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         DerLig = Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
    On écrit que le texte à partir du point. Très appréciable s'il y a beaucoup de ligne faisant référence à la feuille 1
    ******************************************************

    Si vous ne vous en sortez pas, déposez un fichier similaire au votre sans données confidentielles et mettez des exemples qui selon vous ne fonctionnent pas et avec les résultats attendus.

    Cdlt
    Il me mettait un message d'erreur. Le souci provenait des plages avec end(xlup).Row car quand je fais manuellement par exemple b3:b3000 le code marche bien, j'ai repris les fonctions puis le sub et il marche bien. Il reste à contourner le problème pour ne pas s'arrêter à 3000 mais à la dernière cellule vide. Merci pour votre aide car je me suis inspirée de vos codes.

  9. #29
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    reste à contourner le problème pour ne pas s'arrêter à 3000 mais à la dernière cellule vide
    vous voulez plutôt dire "la dernière cellule pleine", non! sinon quel est l'intérêt de chercher la dernière cellule vide.

    Parmi vos 3 colonnes, ne sont-elles pas de la même longueur?
    Si ce n'est pas le cas, et si ce n'est pas la "B", alors remplacez la lettre B dans la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = .Range("B" & Rows.Count).End(xlUp).Row

  10. #30
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    c'est à dire, ça plante?, il ne se passe rien?

    Voici un fichier en exemple avec des trous dans les colonnes B et C
    Pièce jointe 574832
    ******************************************************************************


    Je me suis basé sur votre code ou vous cherchez la dernière ligne par rapport à la colonne B, j'ai donc fait pareil, cette dernière ligne sera la même pour les autres colonnes, mais vous pouvez choisir une autre colonne.
    ******************************************************************************


    il faut se replacer dans le contexte, il y a d'abord cette ligne
    Ceci évite de répéter tout le temps le nom de la feuille, l'écriture ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With Sheets("Feuil1")
            DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    end with
    est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         DerLig = Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
    On écrit que le texte à partir du point. Très appréciable s'il y a beaucoup de ligne faisant référence à la feuille 1
    ******************************************************

    Si vous ne vous en sortez pas, déposez un fichier similaire au votre sans données confidentielles et mettez des exemples qui selon vous ne fonctionnent pas et avec les résultats attendus.

    Cdlt
    Cela renvoit incompatibilité de type

  11. #31
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ORKI243 Voir le message
    Il me mettait un message d'erreur. Le souci provenait des plages avec end(xlup).Row car quand je fais manuellement par exemple b3:b3000 le code marche bien, j'ai repris les fonctions puis le sub et il marche bien. Il reste à contourner le problème pour ne pas s'arrêter à 3000 mais à la dernière cellule vide. Merci pour votre aide car je me suis inspirée de vos codes.
    Désolé, le code renvoi: la méthode global de l'objet range a échoué.

  12. #32
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    vous voulez plutôt dire "la dernière cellule pleine", non! sinon quel est l'intérêt de chercher la dernière cellule vide.

    Parmi vos 3 colonnes, ne sont-elles pas de la même longueur?
    Si ce n'est pas le cas, et si ce n'est pas la "B", alors remplacez la lettre B dans la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = .Range("B" & Rows.Count).End(xlUp).Row
    La dernière cellule vide car sur la colonne il peut avoir des cellules vides suivies de cellules pleines et si je prend la dernière cellule pleine, les autres ne seront pas comptabilisées.

  13. #33
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    petite explication:
    "Rows.count" prend en compte le nombre de lignes total de la feuille, la recherche va partir de la dernière cellule de la feuille et avec "end(xlup)" on va remonter jusqu'à la première cellule pleine trouvée et s'arrêtera à celle_là, donc il peut y avoir des trous au-dessus, cela n'aura aucune incidence.

    Pour le vérifier, mettez un point d'arrêt sur la ligne qui suit DerLig = .Range("B" & Rows.Count).End(xlUp).Row (se mettre sur la ligne et faire F9), puis avec la souris, passez sur "DerLig" sans cliquer dessus, et regardez la valeur retournée.

  14. #34
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'avoue que plus de 30 fils pour un problème aussi simple, cela tient du délire

    Si les données "source" sont organisées d'une manière efficace (tableau structuré et/ou plage classique comme illustré dans le Fil #14 i n'y a aucune raison d'utiliser la propriété End(xlUp)

    La propriété CurrentRegion est bien plus efficace (nécessite que la première ligne et la première colonne soient remplies) et si les données sont dans un tableau structuré, définir des colonnes spécifiques, la plage des données, des titres, des totaux, etc. est un jeu d'enfant.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #35
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Parlez pour vous Mr.
    Nous n'avons pas les mêmes expériences et dans mon cursus j'ai plus utilisé SAS, R et Python. VBA n'est donc pas un jeu d'enfants pour moi. Merci bien.

  16. #36
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant de parler VBA parlons avant tout d'Excel.
    Si nous savions les tenants et aboutissants de ce que vous voulez obtenir, l'aide que nous pourrions vous apporter serait plus simple et plus efficace

    Il est fort probable que si vos données étaient organisées comme il se doit la synthèse du résultat attendu pourrait être résolu soit avec un tableau croisé dynamique ou à l'aide de PowerQuery

    Le nombre de fonctions présentes dans Excel et la multitude de fonctionnalités disponibles est telle que le VBA est la dernière option à choisir, sauf si le temps pour obtenir ce résultat justifie son automatisation.
    Si l'on opte pour le VBA, la bonne connaissance d'excel réduira très fortement le temps et le nombre de lignes de programmation.

    Illustration d'un tableau structuré contenant les données avec une synthèse effectuée à l'aide d'un tableau croisé dynamique (3 clics)

    Nom : 200712 Vacant - Non Vacant.png
Affichages : 103
Taille : 14,0 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [VBA-E]Probleme macro VBA excel 2000 2003
    Par skichatchat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2007, 21h16
  2. incompatibilité macros VBA excel 2000 et 2003
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2007, 12h20
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 21h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45

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