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 :

probleme avec un sous total


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut probleme avec un sous total
    bonjour, dans une macro, je fais un sous total en choisissant la fonction nombre

    donc sur un tableau, a chaque changement de "matricule" je demande le nombre d'enfant.

    mais certain matricule ont plus de ligne que d'enfant

    du coup lorsque je fait mon sous total sans macro, je n'ai aucun bug, mais avec la macro, les sous totaux obtenue inclue la cellule vide

    si par exemple une personne a pas d'enfant et que la plage est vide il indiquera 1, alors que si je selectionne cette cellule en faisant "f2" et ensuite "entrée", le sous total passe à 0

    comment résoudre ce bug, j'ai d'aiileur le meme souci sur un copier coller valeur, ou il considere une cellule vide comme comportant une information, jusqu'a ce qu'elle soit séléctionner par "f2" puis "entrée"

    j'espère etre assez clair ::

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    mon avis est que ce n'est pas du tout un problème VBA mais un problème de logique ou de conception de ta feuille et de tes totaux.

    Si ton information de base concerne des enfants, alors une ligne égale un enfant. Dans ce cas, pas de place pour des lignes""vides" qui n'ont rien à voir.

    Si par contre tu veux des lignes vides ou autres, alors tu dois fonctionner autrement, par exemple avec une colonne supplémentaire ou tu trouves 1 si enfant, et 0 si autrechose.

    il ne te reste plus alors qu'a totaliser cette nouvelle colonne à chaque changement de matricule et tu obtiendras ce que tu veux.

    Un total de pommes et de poires ne donne pas de nouveau fruit mais de la compote. C'est ton cas.

    NB : Plutot que subtotal, jette-toi dans la Pivot-Table (tableau croisé dynamique). Tu ne le regretteras pas.

    mais..... pour tout ceci, pas besoin de VBA... ou alors je n'ai rien compris.

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    merci, c'est vrai que jusqu'ici j'utilise pas le tableau croisé dynamique je v ais voir s'il convient

    mais malgré tout, il y a quand meme un souci
    car dans l'extraction excel que j'obtient, il y a pour chaque personnes autant de ligne que d'enfant plus une ligne vide (probleme d'extraction entre une base de donnée et excel...)
    donc une personne sans enfant aura une ligne
    celui qui a un enfant, 2 lignes
    etc..etc...

    donc malgré tout il est étrange de voir qu'en faisant un sous total sans passé par une macro, je n'ai aucun souci, alors que la meme manip en passant par un sous total va créer un faux simplement parce qu'il considere les toutes les cellules avec une information meme s'il n'y a rien.

    bon je vais voir maintenant le tableau croisé dynamique

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    je pense que quand tu dis sous-total tu veux dire Comptage, sinon je ne comprends pas.

    Mais si cela marche "manuellement" active l'enregistreur de macro avant de faire ta manip et puis quand tu l'as arreté regarde le code.

    Mis au propre cela devrait te générer la même chose.

    Dans les Pivot TABLE, tu peux très bien spécifier que tu ne veux pas les lignes a blanc.

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    je ne voit pas ce que tu appelle "comptage"

    moi je parle de la manip
    donné - sous total - ensuite je coche la colone matricule pour selectionner le changement
    je choisis la fonction Nombre qui correspond en fait a une formule dans la cellule " =SOUS.TOTAL(3;I12:I13)"
    et je coche le titre de la colone ou je veux que la fonction se fasse

    et entre faire cette manip a la main ou par macro le résultat est different a cause des cellules vides

    je me demande s'il n'est pas possible de faire une mani qui irais activé la cellule (genre touche f2), puis ensuite descendrais a la cellule suivante jusqu'a la fin du tableau, comme cela, ça effacerais le bug

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Désolé pour le comptage, mais au boulot j'ai Office Uk, alors parfois les traductions. D'accord pour "Nombre"

    Mais ce que tu me dis ne me semble pas juste.
    J'ai fais un test de ce que je te propose et cela marche pour moi.

    J'explique.

    Je pars d'un tableau vide.
    En colonne A, j'encode
    A1 : Nom1
    A2 : Nom2
    A4 : Nom4

    En colonne B , quelquechose en regard, mais on s'en fiche.

    Ensuite je démarre mon enregistreur de macro et je fais un sous-total avec "nombre en rupture sur la colonne a.

    Le résultat est conforme a mes attentes, à savoir :
    A B
    nom1 1
    Nombre nom1 1
    nom2 2

    Nombre nom2 1
    Nom4 4
    Nombre Nom4 1
    Nbval 3
    Comptage 1, 1 et 1 et 3 au total.

    J'arrête l'enregistreur de macro et puis je regarde le code.
    J'annule mes sous-otaux et je les génère avec ma macro.
    Idem.

    Donc m'a question :
    Es-tu certain que tes données sont triées et que tu fais comme je le suggère ?

    Si oui, peux tu m'attacher une petite extraction de ces données et ton code VBA ?

    Ci-dessous mon code généré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 28/01/2009 par Admin
    '
     
    '
        Selection.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(2), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    End Sub

  7. #7
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    le probleme je pense ne viens pas du code car j'ai le meme que toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Selection.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(9), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    le souci viens de cellule vide dans la colone ou se situe la fonction nombre
    je mes une copie d'ecran
    sur la colone I, ligne 9, on voit le résultat 4, alors qu'il n'y a que 2 enfants

    alors que si je fais le sous total sans passé par une macro j'obtient 2 au lieu de 4

  8. #8
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    D'accord, mais as-tu fait comme suggéré avec l'enregistreur de macro. ?

    Parce que je n'arrive pas à comprendre ceci :
    alors que si je fais le sous total sans passé par une macro j'obtient 2 au lieu de 4
    Sur le principe je suis d'accord, mais je voudrais voir le code généré qui compte 2 au lieu de 4.
    Ou alors tu calcule dans ta tête ?

    Sinon la solution de mettre 1 ou 0 dans une colonne supplémentaire si il y a ou pas un prénom résoudrait ton problème.

    Il te suffit alors de faire une somme plus que nombre et cela marche.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Et en disant simplement après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Selection.Subtotal GroupBy:=1, Gnagnagna...
    Application.Calculate
    'ou
    Worksheets(TaFeuille).Calculate

  10. #10
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    comme la sugerer Godzestla, je suis partis sur une autre piste avec une colone qui compte 1 s'il a un prenom dans enfant et 0 s'il la cellue est vide et ensuite je passe par un sous total de la somme des 1 et 0 de chaque matricule.

    Par contre ouskel'n'or je teste ta ligne de commande

  11. #11
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    ok, je viens de trouver la source du probleme

    il ne viens pas de sous totaux

    mais d'un copiez coller valeur que je fais avant le sous total

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("I1:J1").Select
    du coup il considere les cellules vides avec une valeur

    par contre y a t'il un moyen de résoudre ça

  12. #12
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    ok, je viens de trouver la source du probleme

    il ne viens pas de sous totaux

    mais d'un copiez coller valeur que je fais avant le sous total

    du coup il considere les cellules vides avec une valeur


    je savais que tu cachais quelquechose.
    As-tu vu le temps qu'on a perdu la dessus. Dommage non ?

    Garde mon sytème de 0-1 et tu n'auras pas de soucis.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    As-tu essayé avec xlPasteValuesAndNumberFormats ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    (Les paramètres fixés par défaut sont inutiles)
    A toutazard

Discussions similaires

  1. probleme avec to_number sous access
    Par lassmust dans le forum Access
    Réponses: 1
    Dernier message: 01/12/2005, 14h18
  2. Probleme avec height sous IE.
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/10/2005, 22h20
  3. Problèmes avec Hibernate (sous Eclipse)
    Par Pierric dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/04/2005, 14h35
  4. Problème avec GLUT sous borland c++ builder X
    Par hiko-seijuro dans le forum GLUT
    Réponses: 1
    Dernier message: 04/11/2004, 12h47
  5. Problème avec phpize sous debian woody
    Par nipepsi dans le forum Debian
    Réponses: 3
    Dernier message: 09/09/2004, 11h54

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