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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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