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 - excel facture


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut VBA - excel facture
    Bonjour, j'ai un petit exercice qui me pose probleme, etant donné que je viens de commencer la programmation.
    On a le tableau ci dessus

    On me demande:

    Ecrire un programme qui colorie les cellules donnant le montant des factures de la manière
    suivante : si la facture n'est pas payée et que son montant est strictement inférieur à 200, la
    cellule est coloriée en jaune ; si la facture n'est pas payée et que son montant est supérieur ou
    égal à 200, la cellule est coloriée en rouge.
    Rappel : si c désigne une cellule : c.Interior.ColorIndex=6 colorie la cellule en jaune ;
    si c désigne une cellule : c.Interior.ColorIndex=3 colorie la cellule en rouge.

    Mais je ne vois pas bien par ou commencer, pouvez vous m'aider ? comment designer les factures qui se sont pas payés ici ?
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Bonjour Meuh, bienvenue sur le forum.
    As-tu essayé la mise en forme conditionnelle dans Excel ? Ça t'éviterait une macro. Format -> Mise en forme conditionnelle. Tu peux conditionner le format selon ce que tu as dans les cellules. Au début on tatonne mais après on sait faire

    NB - Tu devrais jeter un oeil ici, je suis certain que tu comprendras pourquoi
    Bonne journée

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    lol oui je comprends pourquoi, je suis désolée

    Mais ce n'est meme pas un exo que j'ai à faire je m'entraine pour mon partiel qui est mardi
    Pour la mise en forme conditionelle, on ne l'a pas utilisé avec VBA

    Pour l'instant j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub macro 
    Dim ligne as integer
        For ligne= 1 to 7
            If cells(ligne,4) < 200 then
                 cells(ligne,4).Interior.ColorIndex=6
               Elseif cells(ligne14)=200 then
                 cells(ligne,4).Interior.ColorIndex=3
            End if
        Next
     
    End sub
    Je ne sais pas si c'est correct ?
    Par contre je n'arrive pas a integrer le fait de savoir si la facture n'est pas payée , pouvez vous me donnez juste un petit indice ?

    Merci

  4. #4
    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
    Tu testes la cellule de la colonne 5 (E). Avec ton code, ça donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub macro()
    Dim ligne As Integer
       For ligne = 2 To 7
          If Cells(ligne, 5) <> "Payée" And Cells(ligne, 4) >= 200 Then
              Cells(ligne, 4).Interior.ColorIndex = 3
            ElseIf Cells(ligne, 5) <> "Payée" And Cells(ligne, 4) < 200 Then
              Cells(ligne, 4).Interior.ColorIndex = 6
          End If
       Next
    End Sub
    Pendant que tu es là, jète un oeil là http://www.developpez.net/forums/sho...d.php?t=553797, tu as une explication qui devrais aussi t'intéresser pour l'avenir

    J'ai corrigé ta boucle en la faisant débuter à la ligne 2 qui contient ton en-tête, sinon elle répond aux conditions [Cells(ligne, 5) <> "Payée" And Cells(ligne, 4) < 200]
    A+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Super merci beaucoup j'ai compris ! ^^

    J'ai une dernière petite question.
    Desormais je dois ecrire une fonction qui calcule le nombre de factures dont le montant est strictement supérieur à 200 et on me demande "comment mettre le resultat dans la cellule D10."

    Mais je ne sais pas trop quoi mettre en paramètre dans ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Facture( ...?)
    Facture = 0
       For ligne = 2 To 7
          If Cells(ligne, 4) > 200 Then
              Facture = Facture + 1
            Else
              Facture = 0
          End if 
       Next
    End function

  6. #6
    Membre éclairé

    Inscrit en
    Janvier 2005
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 532
    Par défaut
    Salut,
    pourquoi vous n'ajoutez pas au Macro de ouskel'n'or une petite ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cells(10,4).value=cells(10,4).value+1
    cette cellule va contenir à la fin le nombre de facture >200
    Bonne chance.
    Merci.

  7. #7
    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
    Comme on demande une fonction, je verrais plutôt ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function Facture(Valeur as double) as integer
       For ligne = 2 To 7
          If Cells(ligne, 4) > Valeur Then
              Facture = Facture + 1
            Else
              Facture = 0
          End if 
       Next
    End function
    et en fin de macro, j'ajouterais la ligne de hocine en remplaçant juste l'égalité par Facture(Valeur). Ainsi, si on change Valeur, on n'aura qu'à changer la valeur de Valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub macro()
    Dim ligne As Integer, Valeur as double
       Valeur = 200
       For ligne = 2 To 7
          If Cells(ligne, 5) <> "Payée" And Cells(ligne, 4) >= Valeur Then
              Cells(ligne, 4).Interior.ColorIndex = 3
            ElseIf Cells(ligne, 5) <> "Payée" And Cells(ligne, 4) < Valeur Then
              Cells(ligne, 4).Interior.ColorIndex = 6
          End If
       Next
       cells(10,4).value=Facture(Valeur)
    End Sub
    A+

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Edit : merci , je n'avais pas vu le message !

    Et j'ai une toute petite derniere question,,

    On nous demande :
    Ecrire un programme qui calcule le montant total des factures qui sont payées et le montant total des factures qui ne sont pas payées, puis qui affecte les résultats aux cellules D8 et D9.
    C'est bon si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub cellules()
     
    Cells(8, 4) = Sum(Range("E3:E4,E7"))
    Cells(9, 4) = Sum(Range("E2,E5:E6"))
     
    End Sub
    Mici

  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
    On te demande une fonction, le code de Hacine propose d'intégrer la ligne dans la première condition Regarde ce que je t'ai mis
    Bonne soirée, je vous laisse en tête à tête

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    ui merci, je viens de voir, j'ai remis une petite question en haut , mais ce n'est pas pressé

    Merci de m'avoir aidé bonne soirée

    Juste une toute petite réponse? après promis je vous laisse tranquil avec mes programmes de débutants

  11. #11
    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
    C'est facile, tu écris ta formule en français dans Excel, tu la copies dans le code et tu ajoutes DEUX CHOSES : FormulaLocal et les guillemets qui vont bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub cellules() 
         Cells(8, 4).formulalocal = "=SOMME.SI(E2:E7;""=Payée"";D2:D7)"
         Cells(9, 4).formulalocal  = "=SOMME.SI(E2:E7;""=Non payée"";D2:D7)"
    End Sub
    Tes questions, basiques ou non, ont leur place ici, alors n'hésite pas... On répond quand on est là
    Bonne journée

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    D'accord merci ^^

    Je vais en profiter pour vous posez encore quelques questions avant mon partiel (demain en fin daprem)

    On me demande: Définir une fonction qui demande son année de naissance à l'utilisateur détermine si il a le droit de voter et affiche « peut voter » ou « ne peut pas voter ».

    J'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function age(x as integer)
    x=Inputbox("quelle est ton année de naissance")
      age= year(date)-x
        if age>= 18 then
              Msgbox("vous pouvez votez")
           Else
              Msgbox("vous ne pouvez pas votez")
          End if
    End function

    Mais ce n'est pas plutot dans la procédure "sub ..." que l'on doit rentrer "x=Inputbox("quelle est ton année de naissance")" ?

  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
    Une fonction est faite pour renvoyer une donnée en fonction d'une question. Là, la question et la réponse sont dans la fonction => Tu l'as bien compris, ce n'est donc pas une fonction. Inputbox doit se trouver dans la sub appelante
    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 appel()
    Dim x As Integer, result As Byte
      x = InputBox("quelle est ton année de naissance")
      If x <> 0 Then
        result = age(x)
        If result > 18 Then
           MsgBox "A " & result & " ans vous pouvez votez"
          Else
           MsgBox "A " & result & " ans vous ne pouvez pas votez"
        End If
      End If
    End Sub
     
    Function age(x As Integer) As Byte
        age = Year(Date) - Val(x)
    End Function
    Bonne soirée

    Edit
    Une deuxième solution pour écrire la même chose.
    Dans ce cas, la fonction renvoie un booléen (vrai ou faux) après avoir effectué le test "age > 18"
    Attention, Result est alors de type boolean, ainsi que la fonction, (de type Byte (0 - 255) dans le premier exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub appel()
    Dim x As Integer, result As Boolean
      x = InputBox("quelle est ton année de naissance")
      If x <> 0 Then
        result = age(x)
        If result Then
           MsgBox "Vous pouvez votez"
          Else
           MsgBox "Vous ne pouvez pas votez"
        End If
      End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function age(x As Integer) As Boolean
    Dim result As Byte
        result = Year(Date) - Val(x)
        age = result > 18
    End Function

Discussions similaires

  1. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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