Recherchev en vba entre 2 feuilles avec boucle EXCEL

Résolu
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -  
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je recherche la traduction de recherchev en vba excel, dans un cas précis avec une boucle.

J'ai 6 calculs pour éviter les formules, mais le code (6èmè calcul) me renvoit #N/A dans la colonne P de la feuille TAO2019.

Les autres fonctionnent....voir fichier joint ci dessous

https://www.cjoint.com/c/IKgjnDitgXC

Cordialement,

Configuration: Windows / Internet Explorer 11.0

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, suggestion:
Dim FeuilleData As Worksheet, FeuilleRésultat As Worksheet, FeuilleDATES As Worksheet 'Déclaration et affectation des variables de travail
Dim IndiceFinData As Long, IndiceFinRésultat As Long 'Déclaration et affectation des variables de la boucle - Calcul dernière ligne
Dim PlageValeurJOUV As Variant 'Déclaration et affectation de la variable > plage ou appliquer le résultat du calcul en nbre de jours ouvrés
Dim CalcDatesJOUV As Range
Dim N As Long, cl As Range, dt As Date

Set FeuilleRésultat = Sheets("TAO2019")
IndiceFinRésultat = FeuilleRésultat.Range("A1").End(xlDown).Row
Set FeuilleDATES = Sheets("CalcDates")
Set CalcDatesJOUV = FeuilleDATES.Range("m19:m30")
For N = 2 To IndiceFinRésultat
    dt = DateSerial(FeuilleRésultat.Cells(N, "M"), FeuilleRésultat.Cells(N, "N"), 1)
    For Each cl In CalcDatesJOUV
        If cl = dt Then
            FeuilleRésultat.Cells(N, "P") = cl.Offset(0, 1)
            Exit For
        End If
    Next cl
Next N
1
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
 
Bonjour yg_be,
Merci pour cette suggestion !
Le fichier plante pendant l'exécution de la macro....
J'ai séparé les 5 premiers calculs du 6ème et à l'enchaînement du 6ème , ça mouline et puis plantage...
0
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
 
Quand j'ouvre de nouveau le fichier récupéré, après redémarrage du programme Excel, le résultat est bon.

J'ai essayé avec 25 lignes, cela fonctionne, mais 80000 lignes c'est long et plantage...

Les 5 premiers calculs prennent quelques secondes. C'est à la 6ème qu'excel rame.

Encore Merci pour ton aide !
0
ALS35 Messages postés 1033 Date d'inscription   Statut Membre Dernière intervention   145
 
Bonjour,

Essaie ce code corrigé (à partir de ton code initial) pour ton sixième calcul

' 6ème calcul Nombre de jours ouvrés

Dim PlageValeurJOUV As Variant 'Déclaration et affectation de la variable > plage ou appliquer le résultat du calcul en nbre de jours ouvrés
PlageValeurJOUV = FeuilleRésultat.Range("P1:P" & IndiceFinRésultat).Value 'Boucle sur la colonne pour définir la dernière ligne et saisie résultat en colonne P

Dim PlageMois As Variant
PlageMois = FeuilleRésultat.Range("N1:N" & IndiceFinRésultat).Value

Dim CalcDatesJOUV As Variant
CalcDatesJOUV = FeuilleDATES.Range("L19:N30").Value '

Dim N As Long
'Calculs
For N = 2 To IndiceFinRésultat 'Boucle sur les lignes feuille Résultat
    PlageValeurJOUV(N, 1) = Application.VLookup(PlageMois(N, 1), CalcDatesJOUV, 3, False) 'Boucle sur les lignes feuille Data
Next N ' boucle
FeuilleRésultat.Range("P1:P" & IndiceFinRésultat).Value = PlageValeurJOUV 'Ecriture résultat


Cordialement
1
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
 
Un grand Merci pour ta disponibilité ! Cela fonctionne !
Bonne fin de journée !
0