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 :

Faire une sommes jusqu'à la cellule (i,1)


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Faire une sommes jusqu'à la cellule (i,1)
    Bonjour à tous,
    j'ai fait une colonne qui se remplit automatiquement dès la dernière ligne vide et je voudrais en dessous de cette dernière ligne vide faire le total de toute mes cellules affichées ... voila mon bout de code :
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2), Cells(i, 2).value))
    Mais cela me donne toujours un total = 0. Comment faire ?
    Merci de vos réponses !

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Essai plutot comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2).address & ":" & Cells(i, 2).address))

  3. #3
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu es sûr de mettre quelque chose dans i ? Montre les ligne précédentes

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Dsl jfontaine j'ai essayé avec ta formule mais j'ai toujours un total = 0
    Voila ma formule complète depuis le debut :

    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
    Public Function trouvefincol(nlig As Integer, ncol As Integer) As Integer
    While (Len(Trim(Cells(nlig, ncol))) <> 0)
    nlig = nlig + 1
    Wend
    trouvefincol = nlig
    End Function
    
    Public Sub premiervide()
    Dim nlig As Integer, ncol As Integer
    ncol = 1
    nlig = 5
    i = (trouvefincol(nlig, ncol))
    sheet1.Cells(i, 1) = Feuil1.Cells(1, 3)
    sheet1.Cells(i, 2) = Feuil1.Cells(6, 8)
    Range(sheet1.Cells(5, 1), sheet1.Cells(i + 2, 22)).Borders.LineStyle = xlNone
    sheet1.Cells(1, 5) = sheet1.Cells(i, 1)
    sheet1.Cells(i + 1, 1) = ""
    sheet1.Cells(i + 2, 1) = "TOTAL"
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2).Address & ":" & Cells(i, 2).Address))
    End Sub

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    d'après moi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2), Cells(i, 2).value))
    Le dernier 'value' est en trop
    A+

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Pourtant celle formule sur mon poste fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A7") = Application.WorksheetFunction.Sum(Range(Cells(1, 1).Address & ":" & Cells(5, 1).Address))
    Tu pourrais aussi utiliser formulalocal en mettant directement la formule somme dans la cellule (ce qui sera dynamique en cas de modification d'une cellule)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A8").FormulaLocal = "=somme(" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Arf ça ne marche pas avec "value" j'avais déjà essayé et je ne peux pas mettre une fonction "somme(b5:...)" puisque je ne connaît pas la dernière cellule qui contiendra un chiffre
    j'ai essayé également sheet1.cells(i+2,2).FormulaLocal = "=somme(" & Cells(5,2).Address & ":" & Cells(i,2).Address & ")" mais toujours toujours un résultat de 0 snifff

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Citation Envoyé par reddevils Voir le message
    Arf ça ne marche pas avec "value" j'avais déjà essayé et je ne peux pas mettre une fonction "somme(b5:...)" puisque je ne connaît pas la dernière cellule qui contiendra un chiffre
    j'ai essayé également sheet1.cells(i+2,2).FormulaLocal = "=somme(" & Cells(5,2).Address & ":" & Cells(i,2).Address & ")" mais toujours toujours un résultat de 0 snifff
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ncol = 1
    nlig = 5
    i = (trouvefincol(nlig, ncol))
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ncol = 1
    nlig = 5
    i = cells(nlig,ncol).end(xldown).row
    A+

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    En remplaçant i = trouvefincol (nlig,ncol) ça me marque "erreur 400" ... mais je fais référence a une fonction trouvefincol donc si je remplace par i = cells(nlig,ncol).end(xldown).row ça ne peut pas marcher je pense... j'en ai marre !! lol
    Il n'existe pas de fonction somme à part Application.WorksheetFunction.Sum ???

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pour les courageux qui auraient pas tout suivi voila le code depuis le début :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Public Function trouvefincol(nlig As Integer, ncol As Integer) As Integer
    While (Len(Trim(Cells(nlig, ncol))) <> 0)
    nlig = nlig + 1
    Wend
    trouvefincol = nlig
    End Function
    
    Public Sub premiervide()
    Dim nlig As Integer, ncol As Integer
    ncol = 1
    nlig = 5
    ncol = 1
    nlig = 5
    i = trouvefincol(nlig, ncol)
    sheet1.Cells(i, 1) = Feuil1.Cells(1, 3)
    sheet1.Cells(i, 2) = Feuil1.Cells(6, 8)
    sheet1.Cells(i, 3) = Feuil1.Cells(6, 9)
    sheet1.Cells(i, 4) = Feuil1.Cells(6, 10)
    sheet1.Cells(i, 5) = Feuil1.Cells(8, 8)
    sheet1.Cells(i, 6) = Feuil1.Cells(8, 9)
    sheet1.Cells(i, 7) = Feuil1.Cells(8, 10)
    sheet1.Cells(i, 8) = Feuil1.Cells(10, 8)
    sheet1.Cells(i, 9) = Feuil1.Cells(10, 9)
    sheet1.Cells(i, 10) = Feuil1.Cells(10, 10)
    sheet1.Cells(i, 11) = Feuil1.Cells(12, 8)
    sheet1.Cells(i, 12) = Feuil1.Cells(12, 9)
    sheet1.Cells(i, 13) = Feuil1.Cells(12, 10)
    sheet1.Cells(i, 14) = Feuil1.Cells(14, 8)
    sheet1.Cells(i, 15) = Feuil1.Cells(14, 9)
    sheet1.Cells(i, 16) = Feuil1.Cells(14, 10)
    sheet1.Cells(i, 17) = Feuil1.Cells(16, 8)
    sheet1.Cells(i, 18) = Feuil1.Cells(16, 9)
    sheet1.Cells(i, 19) = Feuil1.Cells(16, 10)
    sheet1.Cells(i, 20) = Feuil1.Cells(18, 8)
    sheet1.Cells(i, 21) = Feuil1.Cells(18, 9)
    sheet1.Cells(i, 22) = Feuil1.Cells(18, 10)
    
    Range(sheet1.Cells(5, 1), sheet1.Cells(i + 2, 22)).Borders.LineStyle = xlNone
    
    Range(sheet1.Cells(5, 1), sheet1.Cells(i, 1)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 2), sheet1.Cells(i, 4)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 5), sheet1.Cells(i, 7)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 8), sheet1.Cells(i, 10)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 11), sheet1.Cells(i, 13)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 14), sheet1.Cells(i, 16)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 17), sheet1.Cells(i, 19)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(5, 20), sheet1.Cells(i, 22)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    
    Cells(i + 2, 1).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 2), sheet1.Cells(i + 2, 4)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 5), sheet1.Cells(i + 2, 7)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 8), sheet1.Cells(i + 2, 10)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 11), sheet1.Cells(i + 2, 13)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 14), sheet1.Cells(i + 2, 16)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 17), sheet1.Cells(i + 2, 19)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    Range(sheet1.Cells(i + 2, 20), sheet1.Cells(i + 2, 22)).BorderAround , ColorIndex:=1, Weight:=xlMedium
    
    sheet1.Cells(1, 5) = sheet1.Cells(i, 1)
    Range(sheet1.Cells(i + 1, 1), sheet1.Cells(i + 1, 22)).ClearContents
    
    sheet1.Cells(i + 2, 1) = "TOTAL"
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2), Cells(i, 2)))
    
    End Sub
    En rouge ce qui ne marche pas..... helpppp please !!

  11. #11
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    Salut je vois que ça galère pas mal

    es tu sur que ta valeur i est la bonne et que ce n'est pas un nombre aberant ?

    place juste avant l'instruction qui ne marche pas

    histoire de voir .........

  12. #12
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai fait ce que tu m'as conseillé et j'ai un msg avec une valeur i de 11 qui est bien la dernière cellule remplie de mon tableau. L'erreur se trouve donc bien dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i + 2, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 2), Cells(i, 2)))
    Je sent que je vais encore galérer un moment lol

  13. #13
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    Dans le style bourin
    tu peux toujours remplacer ta ligne recalcitrante par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    total = 0
    For r = 5 To i
    If IsNumeric(Cells(r, 2).Value) Then total = total + Cells(r, 2)
    Next r
    Cells(i + 2, 2) = total
    C'est surement pas le code le plus optimisé mais ça devrais marcher.

  14. #14
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu as essayé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i + 2, 2).FormulaLocal = "=Somme(" & "B5:B" & i & ")"
    ou ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i + 2, 2).Value = Application.WorksheetFunction.Sum(Range("B1:B" & i))

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je pense enfin avoir trouvé où se trouve l'erreur : lorsque j'execute le code, mes nombres apparaissent bien sous la forme 0, 1, 2 .... mais la cellule est en format "texte".
    Il faudrait pouvoir convertir les cellules qui s'ajoutent automatiquement en format nombre pour que le total soit différent de 0... le problème c'est que je ne sait toujours pas comment faire ça sous vba ... dsl mais je débute lol

  16. #16
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Si tu convertis le format de ta colonne manuellement, ça ne change rien ?
    Si tel est le cas, donne un exemple des valeurs qu'elle contient (des nombres avec décimale ? ou des entier ?)

  17. #17
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Salut, y a un ou deux trucs que je pige pas trop, déja dans la fonction, est ce que c'est vraiment indispensable de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function trouvefincol(nlig As Integer, ncol As Integer) As Integer
     
    While (Len(Trim(Cells(nlig, ncol))) <> 0)
     
        nlig = nlig + 1
     
    Wend
     
    trouvefincol = nlig
     
    End Function
    ?

    Ca marche pas avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function trouvefincol(nlig As Integer, ncol As Integer) As Integer
     
    While Cells(nlig, ncol) <> ""
     
        nlig = nlig + 1
     
    Wend
     
    trouvefincol = nlig
     
    End Function
    ?

    Et pour la somme, est ce que tu peux pas faire avec une variable qui fera cumul ? Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i=5
    cum=0
     
    do while cells(i,2)<>""
     
         cum=cum+cells(i,2)
         i=i+1
     
    Loop
     
    cells(i+2,2)=cum

    C'est peut être bête comme idée mais bon j'essaie

  18. #18
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ma colonne contient des entiers mais ils sont sous format texte.
    Il y a un point d'exclamation sur chaque cellule de cette colonne et il me propose de changer le format en nombre : lorsque je le fais, mon total fonctionne.
    Mais a chaque fois qu'une cellule s'ajoute dans la colonne je dois la sélectionner et changer le format si je veut un total correct... Je voudrais éviter d'avoir à le faire à chaque fois !

  19. #19
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    avant de deposer la variable ( que tu recupere en texte )
    multiplie la par 1
    puis place la dans la cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    variable="123" ' c'est du texte
    variable=variable*1 ' ca devient du numerique
    range("a1").value=variable ' tu depose du numerique
    A+

  20. #20
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ouf enfin ça marche !!!! Ta méthode est un peu fastidieuse Oh!Tofocus (car j'ai 22 colonnes à remplir lol) mais maintenant j'arrive à un bon total !!! MERCI BEAUCOUP car j'en avais plein le c.. de ce code lol


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/12/2014, 19h31
  2. Réponses: 2
    Dernier message: 22/10/2014, 23h21
  3. faire une somme des cellules d'une selection
    Par prisme7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2008, 23h23
  4. filtrer saisies et faire une somme globale
    Par mcellier dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 17h00
  5. faire une somme dans un état
    Par PAINCO dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2005, 19h41

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