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 :

{VBA}Compter une somme


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut {VBA}Compter une somme
    Bonjour

    je voudrais créer un programme sous macro
    qui me calcul dans une colonne toutes les valeurs (1kg,5kg,10,kg........)
    et lorsque j'atteint 3000 kg un message sous une msgbox apparait

    je clique sur la msgbox et je recommence l'opération de là ou j'ai atteint la valeur 3000 kg

    et je parcoure cette colonne juqu'a la ligne 5000


    merci d'avance de toutes vos idées et coup de main

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Par défaut
    Peux-tu donner plus de précisions stp ?

    Quel est le calcul que tu souhaites réaliser ? Peux-tu donner un exemple ?

    Merci d'avance!

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    nom du fichier OEE_L1.xls
    nom de la feuille Saisie


    Ligne 5 à 5000
    colonne Q

    Production (g)

    27 720
    10 080
    12 600
    10 920
    5 040
    4 200
    20 000
    40 000
    80 800
    150 400
    7 920
    18 480
    10 660
    16 400
    41 000
    5 040

    je calcule la production tous les jours et des que j'atteint 3 tonnes
    un message apparait en disant il faut vide la malaxeur

    et puis je recommence pour les jours suivant


    c'est un calcul journalier de ma production
    et je fais une alerte par message et je reprends le calcul et je continue comme ca pendant jusqu'a la ligne 5000

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    Il s'agit de données que tu ajoutes tout au long de la journée ou est ce que ta colonne est déjà remplie ?

    Dans le 1er cas, il te faudra associer un évènement OnChange à une macro dans ta feuille "OEE_L1.xls"

    Dans le 2ième cas, un bete Do While (Somme<3000) est suffisant. Mais tes msgbox s'afficheront l'une après l'autre sans possibilité de voir à quel endroit la somme a atteint 3000.

    Essaye d'être plus précis dans ta demande

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    ma colonne est deja remplis donc dans 1er temps verifier si dans ma prod deja fait voir si j'ai atteint les 3000 kg

    et ensuite de continuer a verifier tous les jours qd je rentre ma production de voir si j'ai atteint les 3000 kg

    dans la msgbox est ce qu'il est possible de faire apparaitre le numero de la ligne qui a atteint les 3000 kg?

    mais vu que le programme sera journalier apres je vais pas afficher des centaines de msgbox mais juste vis a vis de la derniere fois qu j'ai vider le malaxeur



    car ce que je voudrais faire
    c'est que le programme regarde si j'ai atteint le quotat (3000 kg) et si oui il fait apparaitre un message et je continue a verifier sur les prodctions suivantes sur 5000 lignes environ


    Exemple:

    de la ligne 5 a 100 j'ai fait 3000 >>> 1er message
    de la ligne 100 a 450 j'ai fait 3000>>> 2eme message

    et je continue comme ca jusqu'a 5000 lignes

  6. #6
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour à tous,

    Avec un fichier exemple, se serait plus facile à realiser.

    Je peux des maintenant te donner une macro mais elle ne correspondra pas à la realité de ton classeur

    Exemple : Feuille : Produc : Colonne B lest Quantité --> Ligne 1 des titres de colonne

    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
    Sub control()
    dim totlig as long, poid as double, i as long
    With sheets("Produc") ' Travaille sur la feuille produc
           totlig = .range("B65536").end(xlup).row ' Recupere le nombre de ligne
           Poid = 0# ' Initialise le poid calculé
           for i = 2 to totlig ' Demarre la boucle e la igne 2, la 1 sont des titres
                    poid = poid + (.range("B" & i).value /1000) ' additione la valeur poids ramenée au kilo
                    if poid + (.range("B" & i+1).value /1000)>=3000 then ' test avec la prochaine valeur si ca depasse les 3 tonnes
                             msgbox "La prochaine valeur depassera les 3000 tonnes) ' Message
                             .range("B" & i).interior.colorindex = 2 ' je colorie en rouge la cellule
                             poid = 0# ' remise à zero des calculs
                    else 
                             .range("B" & i).interior.colorindex = xlnone ' sinon j'enleve la couleur
                    end if
            next i
    end with
    end sub
    cordialement
    wilfried

  7. #7
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Je pense qu'il y a beaucoup plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim somme as single
    Do while somme < 3000
    somme = somme + cells(ligne,2).value / 1000
    ligne = ligne + 1
    loop
    Msgbox("Depassement :" & somme & " Kg" & Vbcr & "A la ligne " & Ligne)
    'mise en forme comme explique wilfried
    Encore plus simple:
    Une troisieme colonne avec =Somme($B$2:$B2) en C que tu etends vers le bas, format personnalise pour "diviser" par 1000 puis une mise en forme conditionnelle et un filtre auto et hop !

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    merci de votre coup de main genereux
    je vais verifier ca plus tard et j'editerais pour vous informer du resultas
    encore merci a vous deux

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    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
    Sub control()
    Dim totlig As Long, poid As Double, i As Long
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    poid = 0# ' Initialise le poid calculé
    For i = 5 To totlig ' Demarre la boucle e la igne 5, la 1,2,3,4 sont des titres
    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée au kilo
    If poid + (.Range("Q" & i + 1).Value / 1000) >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3 tonnes
    MsgBox "La prochaine valeur depassera les 3000 tonnes) ' Message"
    .Range("Q" & i).Interior.ColorIndex = 2 ' je colorie en rouge la cellule
    poid = 0# ' remise à zero des calculs
    Else
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
    End If
    Next i
    End With
    End Sub

    J'ai teste ta solution tonton fred et rien ne se passe
    j'ai pris la solution de wilfred que j'ai adapter a mon programme
    mais quantite commence a la ligne 5
    et ma colone est Q
    et la feuille est saisie

    le programme a marche m'as affiche 2 fois que j'ai depasse la valeur comme prevu puis il c'est arrete a la ligne en jaune et a marque l'erreur

    incompabilité de type





    j'ai modifie la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If poid + (.Range("Q" & i + 1).Value / 1000) >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3 tonnes
    j'ai mis ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If poid  >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3 tonnes
    maintenant l'erreur je la trouve sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée au kilo
    et la je vois pas comment je peux modifier

  10. #10
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Mon code marche mais il faut ajouter sheets("Saisie") devant les cellules ou with wheets("saisie") avant le bloc

    Revenons a nos moutons:
    Dans la cellule range("Q" & I + 1) tu as bien un nombre ? Si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    poid = poid + (cdbl(.Range("Q" & i).Value / 1000))
    ca marche ?

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    même erreur


    voici ton code tonton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub compter()
    With wheets("saisie")
    
    Dim somme As Single
    Do While somme < 3000
    somme = somme + Cells(Ligne, 11).Value / 1000
    Ligne = Ligne + 1
    Loop
    MsgBox ("Depassement :" & somme & " Kg" & vbCr & "A la ligne " & Ligne)
    'mise en forme comme explique wilfried
    End Sub
    si j'ai bien compris je le tape comme ca
    mais ca me prend la ligne en magenta
    et ca me mets comme erreur

    erreur de compilation
    sub ou fonction non definie

    si tu pouvais me montrer comment je mets le sheets("Saisie") stp
    je t'en remercie

  12. #12
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Si tu utilises with il faut mettre des points et end with a la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub compter()
    Dim somme As Single, Ligne As Long
    Ligne = 5
    With Sheets(1) 'pas wheets
    Do While somme < 3000
    somme = somme + .Cells(Ligne, 1).Value / 1000
    Ligne = Ligne + 1
    If Ligne > 20000 Then Exit Do
    Loop
    End With
    MsgBox ("Depassement :" & somme & " Kg" & vbCr & "A la ligne " & Ligne)
    'mise en forme comme explique wilfried
    End Sub

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    J'ai adapter ton code pour moi
    la feuille est saisie
    et la colonne c'est Q donc 11

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub compter()
    Dim somme As Single, Ligne As Long
    Ligne = 5
    With Sheets("saisie") 'pas wheets
    Do While somme < 3000
    somme = somme + .Cells(Ligne, 11).Value / 1000
    Ligne = Ligne + 1
    If Ligne > 20000 Then Exit Do
    Loop
    End With
    MsgBox ("Depassement :" & somme & " Kg" & vbCr & "A la ligne " & Ligne)
    'mise en forme comme explique wilfried
    End Sub
    erreur d'execution 13
    incompatibilite de type
    meme erreur que le prog de wilfred
    bizare vous avez dit?
    si tu as une solution je suis prenneur

  14. #14
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Citation Envoyé par Thomas69
    meme erreur que le prog de wilfred
    C'est normal puisque les deux programmes utilisent la meme methode (boucle et addition), seul l'algoritme (jamais reussi a l'ecrire ) est different.

    Le probleme vient de ce qu'il y a dans tes cellules: a la ligne ou ca bugge la donnee contenue dans la cellule n'est pas compatible avec le type double.

    Ajoute ca a ton programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    on error goto gestionerreur 'au debut
     
     
    'juste avant end sub
    gestionerreur:
    msgbox(vartype(Sheets("saisie").Cells(Ligne, 11).Value) & vbcr & ligne))
    et dis ce qu'il y a ecrit dans la msgbox (F1 sur vartype t'aidera a comprendre pourquoi je te demande ca )

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    dans la msgbox
    c'est marque

    8
    24

    mais j'ai pas trouver le type de constante pour 24

  16. #16
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Oui parce que 24 est le numero de la ligne

    Ton code plante parce qu'a la ligne 24 tu n'as pas un nombre mais un string.

  17. #17
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    pas taper stp tonton

    j'ai trouver l'erreur comme on dit souvent
    un ordinateur ca ne fait que ce qu'on lui dit

    l'erreur venait de moi
    je me suis trompe de colone
    decidement c'est pas mon jour

    mais le programe marche jusqu'au 1er depassement et ne compte pas les autres pourquoi?

    et le programme de willfred ne tourne pas du tout
    car il ne prend pas en compte les cases vide
    alors vu qu'il regarde toutes les cases de la colonne Q et que certaine sont vide ben ca crée un bug

  18. #18
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    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
    Sub control()
    Dim totlig As Long, poid As Double, i As Long
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    poid = 0# ' Initialise le poid calculé
    For i = 5 To totlig ' Demarre la boucle e la igne 5, la 1,2,3,4 sont des titres
    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée au kilo
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3 tonnes
    MsgBox "La prochaine valeur depassera les 3000 tonnes) ' Message"
    .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
    poid = 0# ' remise à zero des calculs
    Else
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
    End If
    Next i
    End With
    End Sub
    j'ai modifier ma feuille en rajoutant que si la prod n'est pas faite ca mets 0
    comme ca le programme de willfred marche correctement

    il me manque plus qu'a le modifier pour apporter 2-3 touches perso

    ben merci de votre aide


    PS:Tonton je vais tout de meme essayer de comprendre pourquoi ton programme s'arrete au 1er depassement


    Merci de votre aide

    @+

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

Discussions similaires

  1. [XL-2003] Compter une somme jusqu'à une limite
    Par orgnobi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/08/2012, 12h21
  2. [VBA-E]- Recuperer le resultat d'une somme dans une variable
    Par ekynoxx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/05/2007, 11h03
  3. [VBA-E] pb d'arrondis lors d'une somme
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/05/2007, 14h14
  4. [VBA-E]- Probleme pour realiser une somme conditionnelle
    Par ekynoxx dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/05/2007, 12h18
  5. [VBA EXCEL] Afficher une somme dans une MSGBOX
    Par helmut_perchu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/12/2006, 21h46

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