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-E]- Probleme pour realiser une somme conditionnelle


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut [VBA-E]- Probleme pour realiser une somme conditionnelle
    Bonjour,
    Je suis sur une macro qui doit calculer les quantites totales commandees par un pays particulier et d'autres conditions particulieres.
    J'ai fais le code suivant :
    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
     
    Sub UK_Compal()
     
    Dim MyCell As Range
    Dim NotAKNQty As Double
    Dim CurrentWeek As Integer
     
      CurrentWeek = DatePart("ww", Now(), 2)
    NotAKNQty = 0
     
    For Each MyCell In Range("A1:A60000")
            If MyCell = "*United Kingdom*" _
               And MyCell.Offset(0, 41).Value = "*COMPAL*" _
    ' WIP est un statut particuler pour la commande
                And MyCell.Offset(0, 39).Value = "*WIP*" _
                And IsError(MyCell.Offset(0, 37)) = True _
    ' Je veux comparer la semaine de livraison a la semaine actuel.
                And WeekNum(MyCell.Offset(0, 37), 2) = CurrentWeek Then
    ' Je veux sommer les quantites de ces commandes particulieres
                NotAKNQty = NotAKNQty + MyCell.Offset(0, 11)
            End If
    Next MyCell
     
    Range("H14").Value = NotAKNQty
    End Sub
    J'ai 2 problemes :
    1/ Lorsque je compile jai un message d'erreur sur la fonction WeekNum.
    2/Si j'enleve la ligne relative a la fonction WeekNum la macro tourne mais me donne toujours pour valeur NotAKNQty egal a 0 ce qui ne devrait pas etre le cas...

    Merci d'avance pour votre aide.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour le N° de semaine, utilise DatePart("ww",Ladate, 1 ou 2)
    1 et 2 dépendent de la manière de faire démarer les semaines pour les comptabiliser depuis le début de l'année
    1 -> si la semaine commence le dimanche
    2 -> si la semaine commence le lundi

    A+

    NB - Jète un oeil dans l'aide à DatePart

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Dis-donc...

    Tu ne manques pas d'air!

    On t'a déjà répondu là:
    http://www.developpez.net/forums/sho...d.php?t=328106

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Bien vu il semble que grace a ton aide le probleme de la week soit resolue.

    En revanche depuis tout a l'heure je ne m'en sors pas avec cette somme qui est toujours nulle.
    Cela compile, la macro ne plante pas mais la valeur de NotAKNQty reste desesperement egale a 0.
    Je t'ecris l'extrait de mon code qui pose probleme et sur lequel je fais des tests depuis 3h.

    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
    Sub Logik_Compal()
     
    Dim MyCell As Range
    Dim NotAKNQty As Double
    NotAKNQty = 0
     
        For Each MyCell In Range("A1:A60000")
            If MyCell.Value = "*United Kingdom*" _
               And MyCell.Offset(0, 1).Value = "*COMPAL*" _
                And MyCell.Offset(0, 2).Value = "*WIP*" _
                And IsError(MyCell.Offset(0, 3).Value) = True Then
                NotAKNQty = NotAKNQty + MyCell.Offset(0, 4).Value
            End If
            Next MyCell
     
            Range("A15").Value = NotAKNQty
     
    End Sub

    Merci d'avance pour ton aide.

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Sorry...

    Je dois partir, là.

    Je te laisse entre d'autres mains expertes (chançard, va)!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Oulalalala,
    j'ai peut etre une idee sur le fait que ca fait 3 heures que je suis bloque.
    Qund j'ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MyCell = "*United Kingdom*"
    La macro cherche t-elle les * dans la cell ou bien les * comme je pensais servent a dire que la cell doit CONTENIR la chaine de caractere "United Kingdom" ?
    Je crois j'ai une idee de la reponse...
    Mais dans ces cas la comment faire le test If dans la boucle for pour que la macro comprenne que la cell qu'il parcourt doit comporter le mot clef "United Kingdom" ?

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu n'as pas besoin des étoiles. Et d'ailleurs, où t'as vu des étoiles ?
    C'est dans Like ou dans find qu'on met des étoiles

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    En fait, il peut arrive que l'orthographe change.
    Donc, je cherche un moyen de travailler sur les mots clefs.
    Les * me sont venues a l'idee car j'ai travaille pour coder des filtres et la propriete "contains" se traduit par des *.
    Enfin, je ne sais pas comment traduire cette propriete dansd mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each MyCell In Range("A1:A60000")
            If MyCell.Value = "*United Kingdom*" _
               And MyCell.Offset(0, 1).Value = "*COMPAL*" _
    Je cherche aussi un moyen pour que la macro dans sa recherche ne respecte pas la casse.

    Merci d'avance

    Ekynoxx qui s'en souviendra de ces etoiles!

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je reprends ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each MyCell In Range("A1:A60000")
            If instr(lcase(MyCell.Value), lcase("United Kingdom") <> 0 _
               And instr(Ucase(MyCell.Offset(0, 1).Value),"COMPAL") <> 0 _
    Tu dis
    A+

    Edit
    Tu peux aussi utiliser like -> F1
    Si tu as du mal, tu dis aussi...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Je pense comprendre le principe :
    UCase et L Case permettent de tout ramener en miniscule ou majuscule et on fait la comparaison des 2 chaines de caracteres avec InStr.
    J'ai ecris le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ub Lcase()
    Dim MyCell As Range
    For Each MyCell In Range("A3:A10")
            If InStr(Lcase(MyCell.Value), Lcase("United Kingdom")) <> 0 _
            And InStr(UCase(MyCell.Offset(0, 1).Value), "COMPAL") <> 0 Then
            MyCell.Offset(0, 2).Value = "ne respecte pas la casse"
            End If
    Next 
    End Sub
    J'ai une erreur de compilation sur Lcase qui me dit :
    "Wrong number of arguments or invalid property assignment"

    Cela ne vient pas du nombre d'argument car il y en a que 1.
    Merci d'avance.

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Tu ne peux pas créer une Sub qui porte le nom d'une fonction intrinsèque de VB!

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Effectivement Alain,
    curieux qui me l'ait pas dis il me semble que ca m etait deja arrive et qui me lavait fais remarquer.
    Merci en tout cas.
    Voila 1 soucis de moins.

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

Discussions similaires

  1. VBA pour réaliser une somme de deux colonnes dans deux fichiers différents
    Par chito79000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2015, 16h19
  2. [XL-2013] mise en forme conditionnelle pour vérifier une somme
    Par jeanpierreco dans le forum Excel
    Réponses: 1
    Dernier message: 07/03/2015, 20h13
  3. probleme pour realiser une macro
    Par nicoczyck dans le forum Macro
    Réponses: 5
    Dernier message: 19/05/2009, 17h36
  4. Probleme pour faire une somme sous Excel
    Par Nicolas92 dans le forum Excel
    Réponses: 5
    Dernier message: 02/12/2005, 11h38
  5. Probleme pour faire une somme dans header ??
    Par snoop57 dans le forum Access
    Réponses: 7
    Dernier message: 01/12/2005, 13h40

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