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 :

Simplification du code et évolution


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut Simplification du code et évolution
    Bonjour a tous,

    Quand je clique sur le bonton je mets à jour le tableau dans l'onglet Tb en fonction d'un mois donné comment ça marche '->

    Présentation des onglets:

    Nous avons dans l'onglet DATA 5 colonnes
    Col Fin α = dans de fin projet
    Col Statut = statut du projet l'utilité est ne pas prendre compte les projets Abandonnée dans calcul des montants en col montant A et montant B
    Col Prochain Jalon = pour savoir si les projets sont "NON Démarré" , EN "ETUDE" ou REALISE
    Col montant A = Montant en OPEX
    Col montant B = Montant en CAPEX

    Nous avons l'onglet les régles de calcul
    il me sert pour caluler le nombre de jours entre deux dates ensuite utiliser dans les variales des trois fonctions dans le code :
    Function -isInfSixMois
    Function -isSixNeufMois
    Function -isNeufDouzeMois


    Nous avons l'onglet Tb:
    le tableau contient trois lignes et 12 colonnes
    Ligne NON Démarré
    Ligne ETUDE
    Ligne REAL

    col de C: N 12 mois de l'année



    liste des fonctions
    Function isInfSixMois
    Sub AddInfSixMois
    Function isSixNeufMois
    Sub AddSixNeufMois
    Function isNeufDouzeMois
    Sub AddNeufDouzeMois
    Function montantLigne
    Function Statut_Proj
    Sub addAll


    évolution
    1) Function montantLigne

    Je souhaite faire le calcul Total sans prendre les valeurs dont la celule = Abandonné dans la colonne Statut

    Amélioration
    1) Sub addAll

    je souhaite avoir une boite de dialogue pour le choix du mois a mettre a jour

    2) Function isInfSixMois
    2) Function isSixNeufMois
    2) Function isNeufDouzeMois

    je souhaite rendre automatique le calcul du nombre de jours entre deux dates afin de faire disparaite l'onglet les règles de calcul

    En pj le fichier avec le code et les Données

    Merci d'avance pour votre aide,

    Undo
    Fichiers attachés Fichiers attachés

  2. #2
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    je souhaite rendre automatique le calcul du nombre de mois entre deux dates afin de faire disparaite l'onglet les règles de calcul
    Sais-tu qu'il existe nativement une formule dans excel qui fait cela très bien mais il est vrai que n'étant pas officielle elle est cachée.
    Il s'agit de DATEDIF qui calcule la différence entre deux dates. Sa syntaxe est DATEDIF(DateLaPlusAncienne, DateLaPlusRécente, Ecart).
    L'argument Ecart détermine si la différence sera en année (Y), en mois (M), en jours (D), il y a également YM, MD, et YD
    A lire, le chapitre IV-D. DATEDIF du tutoriel Utiliser les fonctions Date et Heure sous Excel 2007.
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Bonjour Philippe,
    merci pour ta réponse.
    J'utilise cette formule dans mon fichier dans l'onglet les règles de calcul mais je souhaite le rendre automatique dans les trois fonctions :Function -isInfSixMois , Function -isSixNeufMois et Function -isNeufDouzeMois qui se trouve dans le fichier.

    Merci encore pour ton support.
    cdt,

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par undo74 Voir le message
    Je souhaite faire le calcul Total sans prendre les valeurs dont la celule = Abandonné dans la colonne Statut
    Un simple SOMME.SI fait ça très bien.

    je souhaite avoir une boite de dialogue pour le choix du mois a mettre a jour
    InputBox

    je souhaite rendre automatique le calcul du nombre de mois entre deux dates afin de faire disparaite l'onglet les règles de calcul
    Ca peut se faire avec des fonctions Excel.
    La fonction MOIS converti une date en numéro de mois.
    L'opérateur - te permet de faire la différence.

    A toi ensuite de voir dans quel ordre tu les utilises.
    Par exemple :
    quel est le résultat que tu souhaites entre 30/06/2014 et 01/07/2014 : 0 mois ? 1 mois ? 2 mois ?
    quel est le résultat que tu souhaites entre 01/06/2014 et 31/07/2014 : 1 mois ? 2 mois ?

    Donc, attention aux arrondis, si tu convertis en mois avant de faire la différence, attention aux dates sur deux années différentes.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Bonjour Menhir,
    Avant tous merci ton retour

    Un simple SOMME.SI fait ça très bien.
    Comment faire pour adapté le formule ci-dessus dans le code ci-dessous:

    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
    Function montantLigne(ByVal l As Integer) As Double
    'renvoie le montant Capex + Opex d'une ligne donnée
     
    Dim total As Double
    total = 0
     
    Dim c_capex As Integer
    c_capex = 23
     
    Dim c_opex As Integer
    c_opex = 26
     
     
    total = Cells(l, c_capex).Value + Cells(l, c_opex).Value
    montantLigne = total
    End Function
    --------------------------------------------------------------------

    InputBox
    C'est ok ça marche

    ci-dessous le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub addAll()
     
    'MODIFICATION A FAIRE CHAQUE MOIS
     
    Dim mois_actuel As Integer
     
    mois_actuel = InputBox("Un nombre de 1 à 12", "Entrer un mois")
     
    AddInfSixMois mois_actuel
    AddSixNeufMois mois_actuel
    AddNeufDouzeMois mois_actuel
     
    End Sub
    ------------------------------------------------------
    Ca peut se faire avec des fonctions Excel.
    La fonction MOIS converti une date en numéro de mois.
    L'opérateur - te permet de faire la différence.........

    Dans ma demande j'ai fait une erreur je voulais pas le nombre de mois mais de jours

    dans l'onglet Les règles de calcul:
    pour le calcul inf6Mois

    Inf6Mois
    01/06/2014
    30/11/2014
    résultat : Nb de jour = 182 -> utilise la formule =DATEDIF(F1;F2;"d")

    L'idée c'est de rendre automatique dans le code ci-dessous:
    Par exemple je rentre les deux dates dans un boite de dialogue ou par exemple faire un calcul en fonction mois_actuel dans le code ci-dessus

    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
    Function isInfSixMois(ByVal l As Integer, mois_actuel As Integer) As Boolean
    'renvoie si la ligne l a une date fin d'alpha inf à 6 mois de mois_actuel
    'mois_actuel est le mois dont on souhaite la MAJ dans l'onglet TB
     
    Dim c_alpha As Integer
    c_alpha = 10
     
    Dim rep As Boolean
    rep = False
     
    Dim inf6mois As Integer
     
    inf6mois = Worksheets("Les règles de calcul").Cells(1, 9)
     
    Dim date_actua As Date
    date_actua = Worksheets("Tb").Cells(13, mois_actuel + 2)
     
     
    If (Cells(l, c_alpha).Value - date_actua < inf6mois) Then
        rep = True
    End If
     
    isInfSixMois = rep
    End Function
    encore merci pour ton aide.
    cdt

  6. #6
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque tu publies un code VBA, ou une ligne d'instruction en Excel, il est demandé de l'insérer entre les balises prévues à cet effet.
    C'est le bouton symbolisé par le croisillon (#), à la fin de la deuxième ligne de l'éditeur de message.
    Et lorsque tu fais référence à une discussion c'est le bouton à sa droite (Pour chaque bouton, il y a une info-bulle qui apparaît lorsque tu passes le pointeur de la souris au-dessus.
    Cela facilité grandement la lecture.
    Merci d'avance d'en tenir compte.
    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

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par undo74 Voir le message
    Un simple SOMME.SI fait ça très bien.
    Comment faire pour adapté le formule ci-dessus dans le code ci-dessous:
    As-tu pris la peine de lire dans l'aide Excel la syntaxe et les explications concernant la fonction SOMME.SI ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Lorsque tu publies un code VBA, ou une ligne d'instruction en Excel, il est demandé de l'insérer entre les balises prévues à cet effet.
    C'est le bouton symbolisé par le croisillon (#), à la fin de la deuxième ligne de l'éditeur de message.
    Et lorsque tu fais référence à une discussion c'est le bouton à sa droite (Pour chaque bouton, il y a une info-bulle qui apparaît lorsque tu passes le pointeur de la souris au-dessus.
    Cela facilité grandement la lecture.
    Merci d'avance d'en tenir compte.
    Re,
    Merci pour l'info c'est fait

    Citation Envoyé par Menhir Voir le message
    As-tu pris la peine de lire dans l'aide Excel la syntaxe et les explications concernant la fonction SOMME.SI ?
    Re,
    J'ai pas un problème de syntaxe dans la formule mais savoir comment faire un somme.si de la colonne A et Colonne B avec comme condition ne pas prends les valeurs Abandonné dans la colonne Statut.
    En pj un exemple avec la formule
    merci d'avance.
    cdt
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Ca ne répond pas à la question que j'ai posée.
    Par contre, la réponse à celle que tu poses se trouve dans l'aide Excel dans la description de SOMME.SI

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

Discussions similaires

  1. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 20/09/2006, 19h28
  2. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2006, 21h51
  3. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 22h34
  4. simplification de code
    Par Jeffboj dans le forum Access
    Réponses: 11
    Dernier message: 11/04/2006, 15h09
  5. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/02/2006, 16h44

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