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 MsgBox avec somme de variables


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut VBA MsgBox avec somme de variables
    Bonjour,

    je suis débutant VBA. J'ai besoin de faire apparaître un message avec une somme.

    J'ai une colonne J avec une date et colonne L avec une date

    dans le MsgBox je voudrais la somme des cellules où la date de la col L est supérieur à la date de la col J

    J'ai essayé plusieurs écriture et j'ai des erreur de syntaxe, des demandes de fin d'instructions ou des erreurs '424' objet requis...

    je sais plus quoi faire.

    voici ma dernière écriture:

    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
    Sub notif_prise_en_charge()
     
     
    Dim N, derl
     
    Dim date1 As String
    Dim date2 As String
    Dim result As String
     
     
    Workbooks("Assurés suivi des dossiers LCF .xlsx").Activate
     
     
    Sheets("En cours en 2017").Activate
     
    derl = Sheets("En cours en 2017").Range("A" & Rows.Count).End(xlUp).Row
    date1 = Range("L" & N)
    date2 = Range("J" & N)
    result = totalvalue date1 > date2
     
    For N = 4 To derl
     
     
    ' introduction d'un message à l'ouverture du fichier pour signaler la non prise en charge de dossier
     
        If date1 > date2 Then
     
        result = MsgBox "ne sont pas pris en charge", vbOKOnly + vbInformation, "mDF XLpages.com"
     
        End If
     
        If Reponse = vbOK Then 'Si on clique sur OK
     
     
       Unload UserForm1
     
     
        End If
     
    Next
     
    End Sub
    Merci pour votre aide....

  2. #2
    Membre expérimenté
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par défaut
    Bonjour,

    Quelle est la demande ? "sommes des cellules" = Nombre de fois ou L > J ?

    Citation Envoyé par Mick76 Voir le message
    Bonjour,
    J'ai une colonne J avec une date et colonne L avec une date
    dans le MsgBox je voudrais la somme des cellules où la date de la col L est supérieur à la date de la col J
    Ensuite il faudrait mettre ton code dans les balises CODE sinon... tu vas avoir des remarques.

    Pour terminer, vu ton code, essaye le en pas à pas tu verras par toi même ou cela pose problème.

    Pour t'aider :
    Tu vas aller de la ligne N à ta dernière ligne et à chaque fois tu vas tester si la celluleAN > CelluleBN
    Si c'est le cas tu fais un compteur
    Si ce n'est pas le cas, tu vas au prochain N.

  3. #3
    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
    Il y a trop d'erreurs (aussi bien de syntaxe que de logique) dans ton code pour les décrire toutes.
    Autant tout réécrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Nb As Long
    Dim Rg As Range
    Nb = 0
    For Each Rg in Sheets("En cours en 2017").Range("L4:L", Sheets("En cours en 2017").Cells(Rows.Count, 1).End(xlUp).Row)
        If Rg.Value > Rg.Offset(0, -2).Value Then Nb = Nb  1
    Next Rg
    MsgBox("Nb Ligne avec L > J : " & Nb)

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Citation Envoyé par Alex70 Voir le message
    Bonjour,

    Quelle est la demande ? "sommes des cellules" = Nombre de fois ou L > J ?



    Ensuite il faudrait mettre ton code dans les balises CODE sinon... tu vas avoir des remarques.

    Pour terminer, vu ton code, essaye le en pas à pas tu verras par toi même ou cela pose problème.

    Pour t'aider :
    Tu vas aller de la ligne N à ta dernière ligne et à chaque fois tu vas tester si la celluleAN > CelluleBN
    Si c'est le cas tu fais un compteur
    Si ce n'est pas le cas, tu vas au prochain N.
    Bonjour,

    "sommes des cellules" = Nombre de fois ou L > J =>> oui c'est exactement ça.

    mon 1er problème apparaît quand je définit la variable result

    mon 2ème problème c'est au moment de MsgBox

    Citation Envoyé par Menhir Voir le message
    Il y a trop d'erreurs (aussi bien de syntaxe que de logique) dans ton code pour les décrire toutes.
    Autant tout réécrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Nb As Long
    Dim Rg As Range
    Nb = 0
    For Each Rg in Sheets("En cours en 2017").Range("L4:L", Sheets("En cours en 2017").Cells(Rows.Count, 1).End(xlUp).Row)
        If Rg.Value > Rg.Offset(0, -2).Value Then Nb = Nb  1
    Next Rg
    MsgBox("Nb Ligne avec L > J : " & Nb)
    merci sauf qu'à la ligne:

    If Rg.Value > Rg.Offset(0, -2).Value Then Nb = Nb 1

    il mets erreur de synthaxe

  5. #5
    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 Mick76 Voir le message
    mon 1er problème apparaît quand je définit la variable result
    mon 2ème problème c'est au moment de MsgBox
    Il y a bien plus de 2 problèmes dans ton code et celui qui apparait en premier, c'est la déclaration d'une variable date en tant que String.

    Citation Envoyé par Mick76 Voir le message
    merci sauf qu'à la ligne:

    If Rg.Value > Rg.Offset(0, -2).Value Then Nb = Nb 1

    il mets erreur de synthaxe
    Ca aurait été sympa d'indiquer le message d'erreur.
    Heureusement, l'erreur est évidente : j'ai tapé trop vite, il manque un + devant le 1.

    C'est du code tapé à l'arrache et non testé. Il y a sans doute des bugs.
    Mais 90% du travail étant fait, tu peux peut-être prendre la peine de faire les 10% restant, non ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    ah d'accord par contre je tente de la définir autrement mais d'autres problèmes apparaissent.

    Tu as raison l'ensemble de mon écriture doit comporter des erreurs et plus je vais la modifier plus je vais m'enfoncer

  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 Mick76 Voir le message
    ah d'accord par contre je tente de la définir autrement mais d'autres problèmes apparaissent.
    Avant d'essayer de la modifier, essaye de comprendre les éléments qui la compose à l'aide de l'aide VBA d'Excel.

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il y a bien plus de 2 problèmes dans ton code et celui qui apparait en premier, c'est la déclaration d'une variable date en tant que String.


    Ca aurait été sympa d'indiquer le message d'erreur.
    Heureusement, l'erreur est évidente : j'ai tapé trop vite, il manque un + devant le 1.

    C'est du code tapé à l'arrache et non testé. Il y a sans doute des bugs.
    Mais 90% du travail étant fait, tu peux peut-être prendre la peine de faire les 10% restant, non ?
    et pardonne moi... Je suis débutant donc jusqu'à maintenant j'ai fais des commandes simples mais là j'ai beaucoup de mal

  9. #9
    Membre expérimenté
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par défaut
    Citation Envoyé par Mick76 Voir le message
    et pardonne moi... Je suis débutant donc jusqu'à maintenant j'ai fais des commandes simples mais là j'ai beaucoup de mal
    Tout le monde débute un jour, mais l'aide VBA + Forums + Tuto = On arrive à faire généralement ce que l'on souhaite.

    Une autre solution que Menhir par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Worksheets("Feuil3").Activate
     
    For j = 1 To Range("L" & Rows.Count).End(xlUp).Row
     
     If Cells(j, 12) > Cells(j, 13) Then Total = Total + 1
     
    Next j
     
    MsgBox ("Nb ligne L > J " & Total)
    Mieux ou moins bien en terme de performance ? je ne sais pas.... (et au passage si Menhir le sais je suis preneur de la réponse) mais il n'y a pas qu'une solution à un problème VBA.
    Le truc est de regarder et d'essayer de comprendre ce que l'on fait

  10. #10
    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 Mick76 Voir le message
    et pardonne moi... Je suis débutant donc jusqu'à maintenant j'ai fais des commandes simples mais là j'ai beaucoup de mal
    A la vue de ton code, il était évident que tu étais débutant.

    Un conseil : l'aide VBA d'Excel peut t'aider à progresser rapidement.
    Elle est vraiment bien faite quand on sait s'en servir.

    Entre autre, si tu tapes F1, tu accèdes (généralement) à l'aide correspondant à l'élément sur lequel se trouve ton curseur.

    Personnellement, dans mon navigateur internet, je me suis mis deux favoris rapidement accessibles :
    Pour les fonctions et commandes de VBA : https://msdn.microsoft.com/fr-fr/lib.../jj692818.aspx
    Pour les objets spécifiques à Excel : https://msdn.microsoft.com/fr-fr/lib.../ff194068.aspx
    Avec ça, tu as une porte d'accès pour résoudre 90% des problèmes.

    Pour aller plus vite, je me suis même mis des raccourcis vers les membres des objets Range, Worksheet et Workbook qui sont les plus utilisés.

    Citation Envoyé par Alex70 Voir le message
    Tout le monde débute un jour, mais l'aide VBA + Forums + Tuto = On arrive à faire généralement ce que l'on souhaite.
    A cette équation, je rajouterai l'enregistreur automatique de macro qui pond un code assez pourri mais qui peut mettre sur la voie de la solution.

    Une autre solution que Menhir par exemple :
    Ca aurait été mieux en commençant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim j As Long
    Dim Total As Long
    Total = 0
    Histoire de donner à notre ami de bonnes habitudes.

    Mieux ou moins bien en terme de performance ? je ne sais pas.... (et au passage si Menhir le sais je suis preneur de la réponse)
    A moins qu'il y ait quelques centaines de milliers de lignes à traiter, je pense que la différence doit se chiffrer en centièmes de secondes.

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Est-ce que ceci répond au besoin ?

    Evaluation directe de la formule matricielle
    {=SOMMEPROD((Colonne1 = Colonne2)*1)}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
        With Sheets("En cours en 2017").Range("L4:L" & Sheets("En cours en 2017").Cells(Rows.Count, 1).End(xlUp).Row)
            MsgBox Evaluate("=SUMPRODUCT((" & .Address & "=" & .Offset(0, -2).Address & ")*1)")
        End With
    End Sub
    edit : pour le calcul de la dernière ligne de la plage, tu te bases sur la colonne A (colonne 1) ... je ne sais pas si c'est voulu ou non, je préfère quand même le souligner

  12. #12
    Membre expérimenté
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Ca aurait été mieux en commençant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim j As Long
    Dim Total As Long
    Total = 0
    Histoire de donner à notre ami de bonnes habitudes.
    Non il apprendra à ses dépens !

    l'enregistreur automatique de macro qui pond un code assez pourri mais qui peut mettre sur la voie de la solution.
    Effectivement, si pratique quand on commence
    Mon stagiaire est sur ça en ce moment :
    http://laurent-ott.developpez.com/tu...el-vba-tome-1/


    A moins qu'il y ait quelques centaines de milliers de lignes à traiter, je pense que la différence doit se chiffrer en centièmes de secondes.
    Excel et ses secrets de vitesse de calculs

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Nos posts ce sont croisés je pense, juste pour dire que juste avant ton message j'ai proposé une autre méthode

  14. #14
    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 te conseille également la lecture de ce tutoriel VBA EXCEL La MsgBox décortiqué
    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

  15. #15
    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 joe.levrai Voir le message
    Evaluation directe de la formule matricielle
    Sûr, par simple formule il y a plein d'autres solutions.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(SI(L:L>J:J;1;0))
    A valider en formule matricielle avec Ctrl+Shift+Entrée

    L'avantage du code VBA, c'est qu'il peut s'adapter au nombre de lignes.
    Quoi que... avec une formule utilisant NB() et DECALER (ou INDIRECT), une formule pourrait le faire aussi.

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je ne saurais trop approuver cette remarque de Menhir, que je salue :

    Un conseil : l'aide VBA d'Excel peut t'aider à progresser rapidement.
    Elle est vraiment bien faite quand on sait s'en servir.

    Entre autre, si tu tapes F1, tu accèdes (généralement) à l'aide correspondant à l'élément sur lequel se trouve ton curseur.
    Je n'ai personnellement d'autre savoir (ni cours, ni livre, ni rien d'autre) que celui acquis en parcourant les rubriques de cette aide VBA et en m'imposant des petits tests et exercices sur ces bases.
    Puis-je ajouter que cette "auto-formation", qui exclut tout copié/collé - y compris de ce que j'ai déjà pu écrire moi-même un jour (et que je m'empresse presque systématiquement d'effacer de mon disque dur) - est un atout indéniable en matière de création ? Il n'en reste que le souvenir de mécanismes, mais jamais le moindre "modèle").

Discussions similaires

  1. [AC-2007] syntaxe vba recordset avec Date() et variable long
    Par Chris 81 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/06/2011, 10h25
  2. [SQL & VBA] Requête avec Variable
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/07/2007, 14h31
  3. [VBA-E] - Utilisation d'une variable avec la propriete offset
    Par ekynoxx dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/05/2007, 18h31
  4. Requête VBA avec somme
    Par hugo69 dans le forum Access
    Réponses: 6
    Dernier message: 19/12/2006, 11h36
  5. Débutante - Code VBA pour MsgBox avec actions multiples
    Par kisscool35 dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 17h43

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