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 :

Code VBA qui s'arrête un peu tot


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Par défaut Code VBA qui s'arrête un peu tot
    Bonjour à tous,
    J'ai un tableau Excel qui contient un code "413000" (qui se répètent pleins de fois) . Mon but est de faire une rechercheV sur ce code et de récupérer un numéro à 8 colonne à coté , puis de faire la somme des tous ces numéros.

    Le code que j'ai fais me permet de bien faire cela , cependant , si les code "413000" ne sont pas successifs mon code s'arrêtent.
    Je ne trouve pas ce qu'il faut rajouter pour que même si la case suivant ne contient pas "413000" le code continue et qu'il s'arreteras que si il a parcouru le code "413000" et qu'il n'ya que des cases vides. (car si je lui dis direct de s'arrêter s'il y'a une case vide, il risque de s'arrêter avant même d'atteindre la case "413000" car en effet, il peut y avoir des cases vides avant le fameux code "41300" , mais il n'yaura aucune case vide e entre les "413000"

    Voici mon codes :

    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
       Function CalculCOUPON() As Double
        Dim c As Range
        Dim isCOUPON As Boolean
        CalculCOUPON = 0
        isCOUPON = False
     
          For Each c In Worksheets("Valo RBC Dexia").Range("C1:C" & Worksheets("Valo RBC Dexia").[C65000].End(xlUp).Row)
     
            If c.Value = "413000" Then
                isCOUPON = True
                CalculCOUPON = CalculCOUPON + c.Offset(0, 8).Value
            ElseIf isCOUPON Then
               Exit For
            End If
     
          Next c
     
     
        End Function
    Je vous remercie vraiment beaucoup

  2. #2
    Expert éminent 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
    Par défaut
    Une fonction générique qui a comme paramètre le code et qui donne directement

    C'est identique à la formule Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((C2:C100=413000)*(D2:D100))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function CalculCOUPON(ByVal Num As String) As Double
    Dim LastLig As Long
    Dim Frml As String
     
    With Worksheets("Valo RBC Dexia")
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        Frml = "=SUMPRODUCT(('" & .Name & "'!C2:C" & LastLig & "=" & CStr(Num) & ")*('" & .Name & "'!D2:D" & LastLig & "))"
    End With
    CalculCOUPON = Evaluate(Frml)
    End Function
    Cette fonction est appelée comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
     
    MsgBox CalculCOUPON(413000)
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Par défaut
    Salut Merci de ta réponse, mais ça ne marche pas ce que tu m'as proposé ! En plus dans ta fonction tu rentres un paramètre (Num) alors que pour moi je ne doit rien rentrer du tout ,c'est la fonction qui cherche d'elle même

    Sinon j'ai fais un deuxième code , qui affiche bien ce que je veux en message box (il affiche le bon résultat) mais lorsque je l'éxecute sous Excel ou que je le met dans un code vba il bug et je ne comprend pas pourquoi

    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
    Function CalculCoupon0()
      Sheets("Valo RBC Dexia").Select
        Dim Result As Double
        Result = 0
     
        Cells.Select
        Range("G1").Activate
     
        Do While ActiveCell.Value <> 413000
        ActiveCell.Offset(1, 0).Select
        Loop
     
        Do While ActiveCell.Value = 413000
        Result = ActiveCell.Offset(0, 8).Value + Result
        ActiveCell.Offset(1, 0).Select
        Loop
     
     
        Do While (ActiveCell.Value <> "413000" And Not IsEmpty(ActiveCell))
        ActiveCell.Offset(1, 0).Select
     
            Do While ActiveCell.Value = "413000"
            Result = ActiveCell.Offset(0, 8).Value + Result
            ActiveCell.Offset(1, 0).Select
            Loop
     
        Loop
     
     '  Sheets("Valo Sophis").Select
     
     '  Cells.Select
     '  Range("C1").Activate
     
        MsgBox (Result)
     
        CalculCoupon0 = Result
     
     
    End Functio
    n


    Thx

  4. #4
    Expert éminent 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
    Par défaut
    J'ai donné un code plus général. Rien ne t'empêche de supprimer la paramètre Num et de l'entrer en dur dans le code.

    Et si par hasard, demain tu chercherai les données pour un autre code?Tu vas le changer en dur dans le code?

    Tu pourrais aussi en dure faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function CalculCOUPON() As Double
    Dim LastLig As Long
    Dim Frml As String
     
    With Worksheets("Valo RBC Dexia")
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        Frml = "=SUMPRODUCT(('" & .Name & "'!C2:C" & LastLig & "=413000)*('" & .Name & "'!D2:D" & LastLig & "))"
    End With
    CalculCOUPON = Evaluate(Frml)
    End Function
    Le code précédent et celui là, supposent que sur toute ta colonne D, à partir de la 2ème ligne tu n'as que des données numériques (sans texte).

    Les codes comme tu peut le constater, cherche le code 413000 dans la colonne C et fait la somme des lignes de la colonne D.

    A adapter


    PS: Évites dans ton code les Select, Activemachin, boucles inutiles...
    Enfin de compte, c'est une simple proposition testée que tu peux ignorer

  5. #5
    Membre averti
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Par défaut
    Ok merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2010, 11h05
  2. Code VBA qui modifie du Code VBA ?
    Par tictactoc dans le forum Excel
    Réponses: 2
    Dernier message: 30/07/2009, 09h43
  3. [E-00] Code VBA qui insère du code VBA
    Par _Sool_ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/11/2008, 09h16
  4. code vba qui fonctionnes plus du jour au lendemain
    Par alexkickstand dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2008, 16h41
  5. Code VBA qui supprime une requête
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/05/2008, 17h47

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