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 :

Boucle de calcul avec conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour à tous,

    J'aimerai créer un fichier me permettant de simuler la possibilité de gain en créant une "montante" (modulable: choix de montante) en fonction du résultat, si gain on revient au depart de la montante et si perte on continue la montante....

    J'ai déjà créer sur la base de formule excel, une partie...mais celle-ci devient obsolete et les formules deviennent une rallonge de "si, ou et Et" imbuvable...

    Il faut que je passé par du vba pour simplifier la chose, d'où la raison de ce message....

    Explications pour une 1ère approche:
    Voici ma base de données et explications:
    Nom : Capture.PNG
Affichages : 635
Taille : 99,9 Ko

    A savoir que mon fichier comporte plus de 5000 lignes sur 4 feuilles


    Seb

    En PJ mon fichier sans macro, pas de risques
    GestionV1.xlsm

    re,

    Par la suite j'aimerai incorporer d'autres critères pour la simulation (en fonction du nb de partants, d'un écart, avec arrêt, sans arrêt, et un bilan pour chaque critères).
    Le fichier sera dynamique car la base de données en automatiquement mise à jours tous les jours....donc calcule automatique

    Merci d'avance pour votre aide

    Seb

  2. #2
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut 1ère ébauche
    bonjour à tous,

    voici une 1ère ébauche du code
    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
    Sub CalculMontante2()
    Dim DerLig As Long
    Dim m As Byte
    Dim DernCol As Integer
    Dim x As Long
     
    'Dernière ligne vide et colonne
    'DerLig = Range("V" & Rows.Count).End(xlUp).Row '+ 1
    DerLig = [V65536].End(xlUp).Row
    DernCol = Cells(DerLig, Cells.Columns.Count).End(xlToLeft).Column '+ 3 'colonne U
     
    With Feuil2
        'Mise 1-4-7-10 = 1+3= 4 +3= 7 +3= 10
        'For m = 1 To 10 Step 3
         x = DerLig + 1
            If Range("B" & x) = Range("G" & x) Then
                'Result SI(NB.SI(B4;G4)=0;"P";"G")
                Range("V" & x) = "G"
     
                'Cote SI(V4="P";0;M4)
                Range("W" & x) = Range("L" & x)
                'Mise
                Range("X" & x) = m
     
                'Gain brut SI(X4="";"";W4*X4)
                Range("Z" & x) = Range("W" & x) * Range("X" & x)
     
                'Cumul mise SOMME($X$4:X4)
                Range("Y" & x).FormulaLocal = "=SOMME($X$4:X4)"
     
                'Cumul Gain SI(X4="";"";SOMME($Z$4:Z4))
                Range("AA" & x).FormulaLocal = "=SOMME($Z$4:Z4)"
     
                'Résultat net SI(X4="";"";SOMME($Z$4:Z4)-SOMME($X$4:X4))
                Range("AB" & x).FormulaLocal = "=SOMME($Z$4:Z4)-SOMME($X$4:X4)"
            Else
                Range("V" & x) = "P"
                'Mise
                Range("X" & x) = m
                'Gain brut
                Range("Z" & x) = Range("W" & x) * Range("X" & x)
                'Cumul mise
                Range("Y" & x).FormulaLocal = "=SOMME($X$4:X4)"
                'Cumul Gain SI(X4="";"";SOMME($Z$4:Z4))
                Range("AA" & x).FormulaLocal = "=SOMME($Z$4:Z4)"
                'Résultat net SI(X4="";"";SOMME($Z$4:Z4)-SOMME($X$4:X4))
                Range("AB" & x).FormulaLocal = "=SOMME($Z$4:Z4)-SOMME($X$4:X4)"
            End If
        'Next
    End With
    End Sub
    Ici le code doit être relancé pour chaque ligne du tableau, de plus je n'arrive pas à faire évoluer les "formulalocal" qui sont entre "....", donc du coup il ne calcul pas ce que je souhaite.


    Bien évidemment il ne remplit pas tous ce que je souhaite pour le moment, si vous pourriez apporté vos lumières j'en serai très reconnaissant....

    seb

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu estimes que tes formules Excel sont trop longues, pourquoi ne passes-tu pas par une fonction personnalisée ?
    C'est du VBA mais cela a l'avantage d'être utilisable comme une fonction. Il y a des contraintes mais dans ton cas, je pense que cela se justifie.

    A lire Les fonctions personnelles dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour Philippe,

    Merci pour le lien, ça m'a été très aidant..

    voici ce que j'en n'ai sorti:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function GainBrut(GB As Double) As Double
    'GainBrut doit être = cellule mise * cellule cote
    ' CGB--> Calcul Gain Brut
    Dim CGB As Double
    CGB = Range("W4") * Range("X4")
    GainBrut = CGB
     
    End Function
    Hors ici les cellules sont fixe "W4 et X4"

    Dans mon code plus haut, j'utilise la variable "x" pour faire évoluer les cellules, dois-je rendre la variable "x" public, déclarer avant le sub, pour que dans la fonction, je puisse remplacer le W4 et X4 en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("W" & x) * Range("X" & x)
    Ce qui veut dire que dans mon code je devrai remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Gain brut SI(X4="";"";W4*X4)
                Range("Z" & x) = Range("W" & x) * Range("X" & x)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Gain brut SI(X4="";"";W4*X4)
                Range("Z" & x) = GainBrut
    Seb

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux passer comme argument une variable objet de type Range et utiliser sa propriété Row. Je vois que tu passes un argument (GB) de type double que tu n'utilises pas dans la fonction.

    Attention que tu ne peux pas écrire dans une cellule ni sélectionner une feuille dans une fonction personnalisée.
    En résumé, tu ne peux pas faire d'action. En revanche tu peux parcourir une collection de feuilles et faire la somme de plage de cellules de celles-ci ,

    J'essayerai de donner quelques exemples dans l'après-midi car j'ai pas trop le temps pour l'instant.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re,

    Oui c'est vrai, je me suis trompé...

    Dans mon cas j'ai besoin de faire des calculs à partir de valeurs contenues dans des cellules pour chaque ligne

    en gros transformer cette partie de code en fonction:
    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
    'Cote SI(V4="P";0;M4)
                Range("W" & x) = Range("L" & x)
                'Mise
                Range("X" & x) = m
     
                'Gain brut SI(X4="";"";W4*X4)
                Range("Z" & x) = Range("W" & x) * Range("X" & x)
     
                'Cumul mise SOMME($X$4:X4)
                Range("Y" & x).FormulaLocal = "=SOMME($X$4:X4)"
     
                'Cumul Gain SI(X4="";"";SOMME($Z$4:Z4))
                Range("AA" & x).FormulaLocal = "=SOMME($Z$4:Z4)"
     
                'Résultat net SI(X4="";"";SOMME($Z$4:Z4)-SOMME($X$4:X4))
                Range("AB" & x).FormulaLocal = "=SOMME($Z$4:Z4)-SOMME($X$4:X4)"
    En sachant que cette fonction sera appelé pour chaque ligne où il y a un calcul à faire....

    Donc dans ma fonction, ce sont des "range" qui évoluent....

    c'est peut-être de ce genre là, si je fais une fonction juste pour la partie "Gain brut":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function GainBrut(x As Range)
    par contre pour le calcul ????????????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Z" & x) = Range("W" & x) * Range("X" & x)
    Bon je continue de chercher

    seb

Discussions similaires

  1. PHPEXCEL impossible de lire le contenu d'une ligne avec formule
    Par Akim13 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/05/2013, 15h54
  2. VBA - Copier cellules avec formules
    Par Alecine dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2008, 14h41
  3. Réponses: 6
    Dernier message: 28/11/2005, 12h03
  4. [D2005]Compilation impossible avec version Personnal
    Par fab56 dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 16/08/2005, 19h10
  5. [Requête] Difficile (impossible ?) avec des dates
    Par starch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/04/2004, 11h26

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