XL 2010 Glissement de cellules en fonction de 2 caractères

fastingsenna

XLDnaute Nouveau
Bonjour la communauté, j'espère que vous allez tous très bien,

Je rencontre un problème dans mon travail :
Nous disposons de deux tableaux : le premier "tb_j" correspond à celui d'aujourd'hui et "tb_j_1" à celui de la veille (on importe tous les jours un nouveau tableau J et le tableau J de la veille se retrouve en J-1).
On souhaite remplir les cellules J, J-1, J-2, J-3 et J-4 au fur et à mesure des jours.
Pour le tableau "tb_j", dans la cellule J on y introduit le dépassement du jour, dans J-1 celui de la veille, dans J-2 celui de l'avant-veille ... jusqu'à J-4.

Problème :
J'ai essayé de réaliser le processus cherché avec la fonction RECHERCHEV d'excel en concaténant les cellules "liste" avec "regle" pour obtenir le dépassement chercher dans les différentes cellules J et J-1.
Cela fonctionne très bien sauf que la liste de fonds comporte plusieurs milliers de cellules et la fonction met énormément de temps pour remplir les cellules une à une avec cette méthode.

Solution :
Je souhaiterais créer une macro en VBA afin de réaliser cette tâche, je ne vois pas comment m'y prendre, sans doute avec deux boucles qui match liste avec règle, si c'est bon, on y introduit le dépassement de la veille dans J-1. Pour faire glisser les valeurs des cellules J à chaque nouveau jour, je ne vois vraiment pas comment faire. Si quelqu'un lis ce message et comprends où je veux en venir, merci de m'aider dans cette tâche qui me semble légèrement complexe, sinon, vous pouvez me demander davantage d'informations si je n'ai pas été assez clair.

Je vous remercie vraiment de votre quelconque aide.
Très bonne journée à vous,

Un utilisateur déjà comblé par Excel Downloads

PS : je vous joins le fichier simplifié en PJ, merci.
 

Pièces jointes

  • Dashboard.xlsx
    12 KB · Affichages: 3

fastingsenna

XLDnaute Nouveau
Bonjour,
Une proposition en attache
Bonjour,
C'est super très beau travail ! Je vous remercie, cependant, est-ce que si une règle vient à disparaître ou à être modifiée cela fonctionne tout de même ?
J'ai commencé avec plusieurs variables types et un dictionnaire, je pense que cela marchera très bien aussi, je publierai à la suite de cette discussion mon fichier avec le code si jamais quelqu'un est intéressé.
Encore merci à vous pour votre temps, très bonne soirée.
 

Gégé-45550

XLDnaute Accro
Bonjour,
C'est super très beau travail ! Je vous remercie, cependant, est-ce que si une règle vient à disparaître ou à être modifiée cela fonctionne tout de même ?
J'ai commencé avec plusieurs variables types et un dictionnaire, je pense que cela marchera très bien aussi, je publierai à la suite de cette discussion mon fichier avec le code si jamais quelqu'un est intéressé.
Encore merci à vous pour votre temps, très bonne soirée.
Le code proposé ne prend en compte que les règles contenues dans le tableau J, autrement dit, celles qui sont dans J-1 et pas dans J sont ignorées (on pourrait modifier le code pour les reprendre, mais est-ce utile si elles ne réapparaissent pas au bout de 4 jours ?).
C'est pour ça que j'ai volontairement modifié le tableau J-1 dans le fichier que j'ai envoyé, en ajoutant des items non présents dans J.
J'utilise la concaténation dans le dictionnaire
On peut très bien utiliser la concaténation dans le code, effectivement.
 

Gégé-45550

XLDnaute Accro
Le code proposé ne prend en compte que les règles contenues dans le tableau J, autrement dit, celles qui sont dans J-1 et pas dans J sont ignorées (on pourrait modifier le code pour les reprendre, mais est-ce utile si elles ne réapparaissent pas au bout de 4 jours ?).
C'est pour ça que j'ai volontairement modifié le tableau J-1 dans le fichier que j'ai envoyé, en ajoutant des items non présents dans J.

On peut très bien utiliser la concaténation dans le code, effectivement.
Attention, j'ai oublié un Exit For dans le code que je vous ai envoyé, son absence ralentit inutilement le code.
Voici la bonne version
VB:
If CleJ(0) = CleJm1(0) Then
                DataJour.Cells(i, 6) = CleJm1(1)
                DataJour.Cells(i, 7) = CleJm1(2)
                DataJour.Cells(i, 8) = CleJm1(3)
                DataJour.Cells(i, 9) = CleJm1(4)
                Exit For                'oubli dans la version précédente'
            End If
 

Discussions similaires

Réponses
8
Affichages
364