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 :

Calcul sur une partie d'un tableau défini sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Calcul sur une partie d'un tableau défini sous VBA
    Bonjour à tous,

    Je travaille beaucoup sur VBA pour faire différents calculs mais là je bloque vraiment. J'ai une sub qui me définit un tableau/plage de 6 lignes et 3 colonnes d'un tableau sur ma page Excel et j'aimerais travailler sur cette plage. Je cherche à calculer la somme des données qui sont sur la première colonne de mon tableau/plage.

    Le code qui suit me permet de faire la somme de tout mon tableau/plage mais je n'arrive pas à faire la somme de la première colonne uniquement.

    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
     
    Sub azerty()
     
    ReDim tabportef(6, 3)
     
    For k = 1 To 3
    For i = 1 To 6
     
        tabportef(i, k) = Cells(i + 1, k).Value
     
    Next i
    Next k
     
    Cells(10, 1).Value = Application.Sum(tabportef)
     
    End Sub
    Je ne sais pas si vous arriverez à comprendre ma question et à trouver la solution, en tout cas merci beaucoup de votre aide. Le site est vraiment sympa pour résoudre tout un tas de problème VBA

    VBA_LOVER

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(10, 1).Value=Application.Sum(Range("A1:A7"))

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    D'abord merci infiniment d'avoir pris le temps de me répondre aussi rapidement.

    J'ai déjà essayé cette méthode mais le problème c'est qu'il prend la range("A1:A7") dans la feuille Excel et non dans mon tableau/plage. Il faut que je spécifie dans mon code qu'il doit prendre la première colonne dans "TabPortef". Il me faudrait un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(10, 1).Value = Application.Sum(tabportef.range(("A1:A7") )
    mais il ne l'accepte pas.

    A défaut j'ai créé un autre tableau/plage ne contenant que la première colonne pour ne pas être perturbé par le reste de la table et cela marche pour la fonction « somme » comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ReDim tabportef2(6, 1)
     
    k = 1
    For i = 1 To 6
        tabportef2(i, 1) = tabportef(i, k)
     
    Next i
     
    Cells(10, 1).Value = Application.Sum(tabportef2)
    Je souhaite enfin calculer sur cette même plage le nombre de valeur <0.1, mais bizarrement cela ne fonctionne pas. Le code ci-dessous marche pour une plage d’une feuille Excel normal mais pas pour mon tableau/plage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(11, 1).Value = Application.CountIf(tabportef2, "<0.1")
    Ma question est donc : pourquoi la fonction « somme » marche pour tabportef2 et pas la fonction « countif » (équivalent NB.SI dans Excel) et surtout comment faire pour que cela marche.


    Merci encore pour votre aide, c’est vraiment très sympa car j’en ai vraiment besoin

    VBA_LOVER

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    regarde ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim plage As Range
     
    Set plage = Range("B4:G10")
     
    Cells(12, 2).Value = Application.Sum(plage.Columns(1))
    Cells(13, 2).Value = Application.CountIf(plage.Columns(1), ">50")
    N'oublie pas ls balises code dans tes messages.

    Pourquoi galérer avec tes tableaux alors qu'il y a plus aisé (les Range)


    Edit, j'ai supprimé le nom de la procédure test

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai testé et ton code marche très bien. Le problème c'est que dans mon exemple simpliste je pourrais (et devrais) utiliser une range, mais moi je travaille sur un tableau/plage car je fais différents calculs assez lourds et je risque de faire planter Excel si je mets tout mes résultats sur Excel. Je travaille donc sur des tableau "virtuels", qui n'apparaissent pas sur ma feuille Excel.

    J'ai essayer de rajouter "Columns(1)" dans mon expressions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Cells(13, 2) = Application.CountIf(tabportef.Columns(1), "<0.1")
    mais un message d'erreur apparait :

    "erreur de compilation / qualificateur incorrect"

    Aurais tu une solution pour faire marcher mon calcul sans avoir a passer par des range???

    Merci infiniment de ton aide

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour
    une remarque tu travaille sur un tableau à deux dimension pas une plage ce sont deux chose bien distincte

    Tu n'as pas du tout les même possibilité

    Si les fonction excel ne semble pas fonctionner, tu pourrais peut être parcourir ton tableau non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    k=0
    for i = 0 to ubound(plage,1)
        for j = 0 to ubound(plage,2)
            if plage(i,j)<0.1 then
               k=k+1
            end if
       next j
    next i
    A défaut de mieux ca devrais tourner

    Autre chose utilise es balise code quand tu donne un code tes message sont illisible!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut Krovax,

    Merci pour ta réponse et dsl pour le code illisible, je ne savais pas cmt je devais faire.

    Oui en effet faire un compteur devrait marcher, j'y avais pensé mais j'espéré trouver plus simple. Concernant mon tableau j'ai testé d'en refaire un avec une seule colonne (donc une seule dimension) mais cela ne marchait pas non plus. C la fonction qui semble incompatible avec le tableau. La fonction "somme" marche par ex, mais pas "NB.SI".

    Et c'est vrai que le code du compteur est assez simple, et c'est bcp plus long en terme de calcul je pense

    Merci infiniment pour vos réponses, le site est vraiment très bien et les intervenants également, ca fait plaisir

    A très bientôt

    VBA_LOVER

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/05/2014, 08h12
  2. Max calculé sur une partie de cellule
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/07/2011, 14h09
  3. Réponses: 14
    Dernier message: 20/04/2010, 10h56
  4. Scrollbar sur une partie d'un tableau
    Par Dams59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/04/2007, 09h40
  5. JScrollPane : scroll que sur une partie du tableau
    Par mickael.guilbert dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 21/08/2006, 08h53

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