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 :

décompte de lignes [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 63
    Points
    63
    Par défaut décompte de lignes
    Bonjour,

    J'essaie de compter le nombre de lignes entre date +1 et date - 30. Pourriez-vous m'aider SVP

    Merci

    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
    Sub compte_NotInstalled()
    Dim P, NbLigneDecompte As Long
    Dim plage, plage2 As Range
    Dim NP As Integer
     
    NbLigneDecompte = Sheets("Decompte").Cells(65536, 1).End(xlUp).Row
     
    Set plage = Range("E4:E" & Range("A4").End(xlDown).Row)
    For P = plage.Cells.Count To 1 Step -1
      If (plage.Cells(P).Value < Date + 1) And (plage.Cells(P).Value > Date - 30) Then
      plage.Cells(P).Count = NP
     
      End If
    Next P
     
    Sheets("Decompte").Cells(NbLigneDecompte + 1, 6) = NP
    End Sub

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Pour ajouter 1 jour a une date utilises plutôt l'instruction DateAdd (F1 pour l'aide)
    Jérôme

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Pour éviter les itérations, tu peux utiliser Evaluate qui te permet d'évaluer une chaine de caractères. Il "suffit" alors de recomposer dans celle-ci la formule (en anglais) qui te donnerait la solution en Excel.

    Pour test sur la plage A1:A10, cela donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    evaluate("SUMPRODUCT((A1:A10<=TODAY()+1)*(A1:A10>=TODAY()-30))")
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Neptune64 et le forum
    Tu déclares NP comme integer, alors qu'il a trait à un nombre de lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("E4:E" & Range("A4").End(xlDown).Row)
    Tu utilises xlDown : la plage s'arrête donc à la première ligne vide en A, en partant de A4 (ou à la première non vide si A4 est vide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage.Cells(P).Count = NP
    NP = nombre de cellules de la cellule P de la plage => NP=1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Plage.cells(1),Page.Cells(P)).Count=NP
    Serais peut-être plus juste, mais j'ai pas testé. De plus, si tu as une limite haute et une limite basse, il me semble que pour savoir le nombre de cellules (même si les dates sont triées), il faut calculer les deux limites (si une est connue, pourquoi l'introduire dans le test ?).

    Tu demandes de l'aide, mais tu ne dis pas réellement quel est ton problème. Évidemment, on peut faire la macro de A à Z avec les données, mais toutes les données, pas seulement ta macro (surtout si elle ne fonctionne pas) et sans idée de l'organisation de tes données.

    Tout ce qui est évident (et donc non précisé) est source de problèmes : ce que pense quelqu'un qui dépanne les macros et quelqu'un qui fait une macro qui plante est forcément différent, sinon il n'y aurait pas de problème!
    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 63
    Points
    63
    Par défaut
    Bonjour à tous et merci pour vos réponse

    Je vais utiliser cette solution qui fonctionne très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub evaluer_Date()
    Range("F395") = Evaluate("SUMPRODUCT((E377:E391<=TODAY()+1)*(E377:E391>=TODAY()-30))")
    End Sub
    Mais j'aurais encore une question, le code suivant me donne toujours une valeur à 0 ? cette formule est possible ou pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub evaluer_installed()
    Range("F395") = Evaluate("SUMPRODUCT(K377:K391 = ""Not installed"")")
    End Sub
    Merci :-))

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Neptune64 Voir le message
    ...
    Mais j'aurais encore une question, le code suivant me donne toujours une valeur à 0 ? cette formule est possible ou pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub evaluer_installed()
    Range("F395") = Evaluate("SUMPRODUCT(K377:K391 = ""Not installed"")")
    End Sub
    ...
    SUMPRODUCT, comme son nom l'indique, réalise la somme des produits. Il faut donc qu'il y ait au moins un produit entre les parenthèses. Or, chez toi, il n'y a qu'une condition à remplir = > pas de produits => 0.
    Tu devrais donc utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F395") = evaluate("sumproduct((K377:K391=""Not Installed"")*1)")
    Mais comme tu n'as qu'une condition, tu peux aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("f395")=evaluate("countif(K377:K391,""Not Installed"")")
    Garde à l'esprit que EVALUATE ne fait que...évaluer. Si tu lui demandes d'évaluer une formule, il faut que cette formule fonctionne dans Excel. Tu peux tester cela en créant la fonction dans Excel, puis en regardant en VBA comment elle construite. Saisis la formule dans une cellule excel puis, dans la fenêtre d'exécution du VBE, en ayant la cellule de la formule active, tu saisis
    puis ENTER. Tu verras alors la construction "anglaise" de la formule.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 63
    Points
    63
    Par défaut
    Bonjour Pierre

    Merci beaucoup, ça fonctionne comme je le désirais et je te remercie aussi pour tes explication, j'apprécie, cela me permet de progresser.

    Par contre, je suis désolé mais malheureusement je n'ai pas bien compris ceci !!

    Tu peux tester cela en créant la fonction dans Excel, puis en regardant en VBA comment elle construite. Saisis la formule dans une cellule excel puis, dans la fenêtre d'exécution du VBE, en ayant la cellule de la formule active, tu saisis

    puis ENTER. Tu verras alors la construction "anglaise" de la formule.
    ça a quelque chose à voir avec l'enregistrement d'une macro ?

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Non non, rien à voir avec l'enregistrement d'une macro...mais bien par rapport à la façon de construire une ligne EVALUATE ou à l'utilisation d'une fonction Excel en VBA...

    Lorsque tu es dans la fenêtre de l'éditeur VBA, tu peux disposer d'une fenêtre d'excécution (via le menu Affichage ou Ctrl+G) qui te permet de lancer certaines instructions VBA. L'exemple que je te donnais te permet de voir comment une formule qui fonctionne en Excel doit être reconstruite en VBA. C'est un exemple d'une technique de débogage intéressante...

    Ravi de t'avoir aidé, et bonne continuation sur nos forums.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 63
    Points
    63
    Par défaut
    Hello Pierre

    Ok merci, trop cool, j'avais bien vu cette fenêtre d'excécution mais je ne savais pas à quoi elle servait. Maintenant je comprend mieux !!

    A+

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/08/2002, 07h38
  2. Aide en ligne
    Par étoile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h00
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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