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] Simplification pour repetition


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut [VBA-E] Simplification pour repetition
    Salut a tous et a toutes,voila mon pb je dois remplir 744 cellules d un tableau excel en faisant plusieurs tri d affile....mais le pb c est que mon code est bcp bcp trop long...


    Voila une des parties que je dois copie 744 fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Worksheets("requete_ticket_horaire").Activate
    nomb = 0
     
    For i = 2 To 65000
        If Cells(i, 8).Value Like "SLI8T1" And _
           Cells(i, 15).Value Like "7" And _
           Cells(i, 16).Value Like "1" Then
     
            nomb = nomb + 1
     
        End If
    Next
    Worksheets("SLI8T1").Activate
    Range("C12") = nomb
    c un tri pour savoir le nombre de "ticket"(pour mon cas) par jour et par heure...avez vous une simplification pour une la repetition?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Déjà, tu dis que tu dois remplir 744 cellules et tu boucle jusqu'à la 65000 lignes, il faut arréter avant pour cela voir la propiété End de l'objet Range pour t'arrêter avant

    Starec

  3. #3
    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
    Par défaut
    Dans le même esprit que Starec, tu peux aussi tester la dernière ligne renseignée de ta feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
        For i = 2 to DerniereLigne

  4. #4
    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
    Par défaut
    Tiens, ça ne simplifie pas le code mais c'est plus rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SimplifierPourRépéter()
        Dim LaPlage As Range, nomb As Integer, LaCell As Range
        Set LaPlage = Range(Cells(2, 1), Cells(Range("A1").SpecialCells(xlCellTypeLastCell).Row, 1))
        For Each LaCell In LaPlage
            nomb = nomb + (Cells(LaCell.Row, 8).Value Like "SLI8T1" And _
                Cells(LaCell.Row, 15).Value Like "7" And _
                Cells(LaCell.Row, 16).Value Like "1") * -1
        Next
        Worksheets("SLI8T1").Range("C12") = nomb
    End Sub
    Plus simple, j'ai pas
    Tu dis
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    ...ben ca simplifie pas vraiment mais c vrai que c utile^^

    sinon voila une partie de ce que je dois remplir pour mieu vous montre

    Pièce jointe 9382

    en fait on m as dit(et je voulais avoir une confirmation^^)de declare une variable H pour heure,J pour jour,et de les incremente a chaque fois pour simplifie mùon code....mais j ai pas vraiment compris ce qu il voulait dire.....

  6. #6
    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
    Par défaut
    Si mon code n'est pas "simpliste", il fait ce que tu demandes mais est efficace. C'est en général ce qu'on demande au code. En outre, il t'évite les déclarations de variables H I J K L...
    Quand je parlais de simplicité, je parlais pour la compréhension, pas de complexité du code.

    Citation Envoyé par Tu
    en fait on m as dit(et je voulais avoir une confirmation^^)de declare une variable H pour heure,J pour jour,et de les incremente a chaque fois pour simplifie mùon code....mais j ai pas vraiment compris ce qu il voulait dire.....
    Moi non plus.

    NB - Si tu veux lier un fichier ou une image, fais-le ici. Pour un fichier, tu le Zip, pour une image, envoie-le en jpg. Ton fichier est inaccessible

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    ben ok mais le gros pb c est que je dois repete ce code pour chaque cellule donc je dois recopie ce code 743 fois.....pour les 744 cellules....de plus le temps de reflexion est enorme..... c pour ca qu on m as dit que declare des variables serait bcp mieu pour mon code....le gros pb c que....je suis newbie dans le VBA alors j aurais besoin d aide....j ai declare mes variables......J et H mais apres j en fais quoi....comment les incremente.....et surtout comment remplir le tableau avec le resultat.....voila......@++

  8. #8
    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
    Par défaut
    Mon code ne se contente pas de faire ce que tu demandes 743 fois mais le ferais également si tu avais à compter sur 65536 lignes.

    C'est bien ce que je disais : un pb de compréhension.
    Ce que mon code fait
    - de la seconde ligne à la dernière ligne de ta base de données :
    - il vérifie si, dans les cellules des colonnes 15 et 16 de chaque ligne, se trouvent respectivement les valeurs 7 et 1,
    et s'il les trouve,
    - il incrémente la variable nomb
    Enfin,
    - il écrit cette variable dans Worksheets("SLI8T1").Range("C12")
    Essaie de comprendre le code, il y a des bons bouquins pour ça

    Edit
    Si ce n'est pas ce que tu veux faire, alors ton code non plus ne fait pas ce que tu veux

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    euhhhh le seul truc c est que en voyant ton mess je me suis mal exprime....j ai plusieurs cellules a remplir pas que la C12 comme j ai marque....j ai joint un fichier pour que tu vois plus ce que je veut dire je veut remplir plusieurs cellules ....la C12 est juste inclu dedans....voila^^

  10. #10
    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
    Par défaut
    Alors précise ce que tu veux faire, là, on ne peut pas le deviner
    J'ai vu ta feuille, malheureusement elle ne parle pas
    Où veux-tu coller ton décompte ?
    A+

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    vraiment dsl.....je m exprime mal.....je recommence.....j'ai un fichier "requete_ticket_horaire",c la ou je dois prendre mes donnes....je dois donc faire un tri.....ce que je souhaite c remplir mon tableau...donc en fait avoir le nombre de ticket par jour ET par heure....le pb c que le tableau a 744 cellules a remplir.....et que mon code est bcp trop long a execute et a crée....sachant que j en suis au jour 6,il met 5 mn pour l execute et contient 2158 lignes.....donc apres avoir dis tout ca...je voudrais juste savoir si il est possible de simplifie mon code .....en longueur et surtout en temps d execution....voila si il y a encore qq chose de nn comprehensible dis le moi...@++(et merci de ton aide)

  12. #12
    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
    Par défaut
    Mais le tableau que tu as à remplir est où ? Où mets-tu nomb ?
    Que comptes-tu ?
    Avec like, tu vérifies une présence
    Jusque là, mon code fait ce que fait ton code mais limite le nombre de lignes à celui de ta base de données, seulement les lignes renseignées et non 65535 ce qui aurait pour effet d'allonger inconsidérablement le temps d'exécution.

    Avec ton code,
    De la ligne 2 à 65535
    tu vérifies la présence de trois "valeurs" dans trois cellules de chaque ligne
    Si tu as ces trois valeurs, tu incrémentes nomb
    Là, tu dis que tu dois mettre le résultat dans un "tableau".
    Tu fais un total et ce total correspond à 1 (UN) nombre, ce qui ne justifie pas un tableau. Alors explique :
    - que veux-tu mettre dans ton tableau ?
    - chaque fois que tu rencontres les trois valeurs, dois-tu, ligne après ligne, l'indiquer dans un tableau ?
    - Faut-il Incrémenter le N° de ligne de ton tableau chaque fois que tu écris une valeur ou pour chaque ligne examinée ?
    Précise EXACTEMENT, en français, non en code, ce que doit faire ton code au fur et à mesure, point par point, opération par opération.
    Là je crois qu'on finira par se comprendre.
    A+

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    alors oui on va finir par se comprendre tk pas sinon le tableau a remplir et ce que je t ai envoye il s appelle SLI8T1....les donnes sont prises d un autre onglet appele requete_ticket_horaire.....en fait je COMPTE le nombre de ticket par JOUR ET PAR HEURE et a chaque heure du jour je dois marque le nombre de ticket dans le tableau


    exemple:jour 1 heure 1,3 tickets,on rempli le tableau que je t ai donne en marquant 3 dans la bonne cellules (C6 dans ce cas)

    voila.......dsl d avoir du mal a te l explique @+++

  14. #14
    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
    Par défaut
    Ok. Alors ce qui serait intéressant, c'est de nous mettre la structure de ta feuille "requete_ticket_horaire".
    Par exemple, je ne comprends plus Like "SLI8T1" qui est un nom de feuille.
    Si tu pouvais mettre ton fichier sur le forum, ça irait plus vite. Tu le "zip", et tu l'ajoutes à ton message (icône trombone)
    A+

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    euhhh dsl mais ce document n as pas le droit de quitte mon entreprise.... dsl (c France telecom alors bon....)sinon pour SLI8T1 c le nom d un groupe (en fait je dois trier selon ce groupe c pour ca que j ai une feuille avec SLI8T1^^)donc je fais pas appel a une feuille mais bien a une valeur!!j aurais du mieu l explique......je suis dsl....

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    re moi vu qu'on me repond pas xD j'ai un pb avec ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SimplifierPourRépéter()
        Dim LaPlage As Range, nomb As Integer, LaCell As Range
        Set LaPlage = Range(Cells(2, 1), Cells(Range("A1").SpecialCells(xlCellTypeLastCell).Row, 1))
        For Each LaCell In LaPlage
            nomb = nomb + (Cells(LaCell.Row, 8).Value Like "SLI8T1" And _
                Cells(LaCell.Row, 15).Value Like "7" And _
                Cells(LaCell.Row, 16).Value Like "1") * -1
        Next
        Worksheets("SLI8T1").Range("C12") = nomb
    End Sub
    car le pb c'est que quand on a aucun "ticket"correspondant au tri effectue il plante.....pourrais t-on m'aide?

  17. #17
    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
    Par défaut
    Ok, pas de fichier et SLI8T1 est une variable. Mais si c'est une variable, pourquoi la mets-tu entre guillemets ? Ou alors je n'ai rien compris (c'est fréquent en ce moment) et dans ce cas-là, je vais laisser la place à quelqu'un d'autre qui aurat tout compris
    Ce ne dit toujours pas où tu dois coller nomb ni la structure de la feuille où tu dois le coller
    A+... selon

    NB - Si SLI8T1 est bien une variable, et une valeur, pour l'utiliser avec like, c'est cstr(SLI8T1) que tu dois utiliser

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    bon pour le fichier si je te l'envoie en mp ca te va?(enfin si on peut xD)quand au guillemets ca marche pas si on les mets pas xD

    edit : nn quelle ***(je parle de moi^^) c'est pas une variable mais juste une donne comme le like "1" j te jure....frais mieu d alle me couche moi....

  19. #19
    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
    Par défaut
    Quand tu auras une minute, tu me diras si le compte est ok... ou s'il est ko...
    A+

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    j'ai bien recu ton fichier....j'ai voulu execute la macro pour voir ce que ca donné.....et le tableau c'est éffacé xD j'ai pas tout compris...

Discussions similaires

  1. [VBA-E] Aide pour simplification de mon code.
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 11h34
  2. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  3. [VBA-E] Problème pour enregistrer en csv (; et non ,) par macro
    Par bounette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/12/2005, 09h34
  4. [Livre] Débuts sur VBA 6.3 pour EXCEL 2002
    Par thulvar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 10h45
  5. [VBA-A] Condition pour boucle if
    Par ptitegrenouille dans le forum Access
    Réponses: 6
    Dernier message: 23/11/2005, 09h33

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