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 :

Chercher date dont la ligne correspond à deux critères [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Chercher date dont la ligne correspond à deux critères
    Bonjour à tous,
    Je dispose de deux tableaux sur deux feuilles de calcul différentes:
    -Feuille1: 3 colonnes modele/ numerodeserie / datelivraison (+ d'autres colonnes)
    - Feuille 2: 3 colonnes: modele/numerodeserie/datelivraison (+ d'autres colonnes)
    (voir classeur exemple en PJ de ce post)

    Je cherche une fonction qui permettrait, tant que le tableau de données de la feuille une n'est pas vide, de recopier la datedelivraison correspondant au bon modele/numerodeserie de la feuille2 dans la colonne numerodeserie de la feuille1.
    J'ai réussi à la faire à l'aide de boucle While et If, mais lorsque le tableau de données est grand cela prend beaucoup de temps (environ 5000 dossiers à traiter):

    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
     
    Do While Sheets(feuille1).Range("A1").Offset(M, 0) <> ""
     
                            modele = Sheets(feuille1t).Range("F1").Offset(M, 0)
                            numerodeserie = Sheets(feuille1t).Range("G1").Offset(M, 0)
     
                                N = 1
                                While Sheets(feuille2).Range("A1").Offset(N, 0) <> ""
     
                                    If Sheets(feuille2).Range("A1").Offset(N, 0) = modele And Sheets(feuille2).Range("B1").Offset(N, 0) = numerodeserie Then
                                        datelivraison = CDbl(Sheets(feuille2).Range("C1").Offset(N, 0)):
                                        Worksheets(feuille1).Range("J1").Offset(M, 0) = datelivraison
                                    End If
     
                                N = N + 1
                                Wend
                        M = M + 1
                        Loop

    Pourriez vous m'aider à optimiser mon code pour que la recherche/recopie soit beaucoup plus rapide?
    Merci à vous,
    Camille

  2. #2
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut renseignement complémentaire
    Bonjour, votre macro traite combien de ligne et en combien de temps ?

    Cordialement,
    Cordialement

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour, merci pour votre intéressement. La macro doit pouvoir remplir les dates de plusieurs milliers de ligne, environ 10000 à l'heure actuelle.
    Avec mon code qui traite environ 1 ligne par seconde ce n'est clairement pas acceptable dans le cas ou on doit remouliner la macro plusieurs fois pour différentes requêtes.
    Il doit surement y avoir plus simple que cet enchevetrement de boucles qui est la seule chose que mon niveau me permette et qui était satisfaisant pour quelques dizaines de lignes, mais plus à cette échelle...
    Merci du coup de pouce !

  4. #4
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Je vous laisse le soin de vérifier la pertinence des résultats avec une base de donnée plus grande. N'hésitez pas à me faire part de vos impressions où des eventuels bugs existant.



    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
    Option Explicit
     
    Sub macro2()
    Dim vchrono As Date
    Dim mo As String
    Dim c As Range
    Dim i As Long
    i = 2
     
    vchrono = Now()
    While Sheets(1).Range("a" & i) <> ""
        mo = Sheets(1).Range("b" & i)
        With Worksheets(2).Range("a1:a" & Worksheets(2).Range("a" & Rows.Count).End(xlUp).Row)
            Set c = .Find(mo, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
            If c.Offset(0, 1) = Sheets(1).Range("c" & i) Then
            Sheets(1).Range("e" & i) = c.Offset(0, 2)
            End If
            End If
        End With
     i = i + 1
     Wend
     vchrono = Now() - vchrono
    MsgBox Format(vchrono, "h:mm:ss")
    End Sub
    Cordialement,
    Cordialement

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    C'est super merci beaucoup pour votre aide, c'est vraiment très rapide !
    Pourrais je vous solliciter à nouveau pour d'autres questions? J'ai besoin d'avancer sur mon fichier mais je bloque sur quelques points.
    Merci encore et bon dimanche

    Camille

  6. #6
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Bonjour, c'est rapide mais il faudra surveiller les erreurs car là vos cellules c'est "bb" ou "bc" mais dans la réalité, les chaines de caractères sont beaucoup plus complexe.

    Je suis débutant comme vous mais si je peux répondre à toutes vos questions j'y répondrai.

    Bon dimanche également
    Cordialement
    Cordialement

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    C'est génial merci, bientôt de nouvelles questions pour mon fichier. Pour résumer je suis chargé de faire une macro qui permettrait de mettre régulièrement une liste de pièces qui reviennent le plus souvent dans les dossiers traités par mon service.
    Il faut donc compter les dossiers pour chaque pièces concernée, piocher la date de chaque dossier (c'était le but de ce post) et les classer par ordre croissant.
    J'essaye de me débrouiller de moi même mais je suis vite limité car je ne connais que les fonctions de base et l'ordinateur du boulot n'a pas d'accès internet donc je dois ramer la journée et me renseigner le soir.
    J'ai quelques questions à la volée qui me vienne j'essayerais d'être plus précis dans la journée de demain.

    Comment a partir d'une liste décroissante à deux colonnes de dossiers exemple:
    Courroie de distribution / 18
    Bougies / 15
    Alternateur / 8
    etc.
    On peut attribuer un dégradé de couleur allant du rouge au vert afin d'attirer le regard sur les pièces à traiter en urgence ? Je ne sais pas si c'est possible pour l'instant j'ai trouvé comme seul moyen de dire que entre 0 et 5 dossiers c'est vert, 5 à 10 jaune et > à 10 rouge mais cela ne tient pas compte de la proportion du nombre de dossier par rapport à l'ensemble.

    Je trouve vraiment génial que des passionnées prennent la peine de se pencher sur les problèmes des débutants, merci pour cette entraide !

  8. #8
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Pour être honnête, un dégradé de couleur est je pense superflu. Vos trois couleurs suffisent largement et elles ont l'avantage de fixer des bornes qui évite de se poser la question a laquelle personne ne saura répondre " Qu'est-ce qu'on fait , on le prend ou pas " . Non non croyez moi, garder votre quantification actuelle. Au pire si vraiment vous allez plus loin dans la recherche vous pouvez faire un paréto pour accentuer les décisions à prendre.

    Cordialement,
    Cordialement

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

Discussions similaires

  1. Chercher une ligne selon deux critère dans un formulaire
    Par abdelkarim_1987 dans le forum Excel
    Réponses: 0
    Dernier message: 16/09/2013, 11h05
  2. [XL-2003] Progress bar + rercherche d'une ligne selon deux critères (sur plusieurs feuilles)
    Par khroutchev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/07/2013, 12h10
  3. Renvoyer lignes correspondant à un critère sur les colonne
    Par Stepsbysteps dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/02/2013, 13h44
  4. Chercher un prix en fonction de deux critères
    Par pldk06 dans le forum Excel
    Réponses: 2
    Dernier message: 29/08/2012, 09h43
  5. chercher toutes les entrées comprise entre deux dates
    Par kabool dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/03/2006, 10h12

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