VBA = Cas Financier plusieurs macro
Bonjour à tous!
suite à https://forum.excel-pratique.com/excel/supprimer-blancs-de-2-colonnes-t28857.html
me revoilà avec la partie ardue de la chose, j'ai tenté tout seul, j'ai une nouvelle fois échoué. Par avance je m'excuse pour les termes j'ai beaucoup de mal à anticiper excel, je n'aurai jamais du snober les cours d'excel du samedi matin!
Première précision ces macros doivent être toujours sous forme de bouton.
Le principe sans rentrer dans les détails; il s'agit de comptes clients la première macro très gentiment réalisée par tulipe_4 permet de virer les funds et de mettre les totaux en face de chaque client. Chaque mois il y a une nouvelle feuille 1 à une date D1, le mois suivant D2, D3 etc... ou le bouton sera appliqué.
La feuille 2 est la partie difficile! Nom est la feuille est Valuation
Comme vous pouvez voir sur cette feuille il y a tjrs les clients (en réalité ils sont 600).
2ème macro=> quelque chose qui compare depuis chaque nouvelle feuille 1 (donc chaque nouveau mois), les noms des clients en Feuille 2 avec la nouvelle feuille 1 et qui crée un espace pour pouvoir insérer ce nom en feuille 2 qui est présent en feuille 1. En gros, il peut y avoir des nouveaux clients en feuille 1 (donc ici Janvier 2012) qu'il faut insérer en feuille 2
3ème macro=> après avoir activé la macro 1, récupérer les valeurs de la nouvelle feuille du mois et les coller à la suite (c'est à dire les totaux de feuille 1, coller à total feuille 2 en face du bon client).
Pour la colonne total perf c'est un calcul que je ferais après.
En faite pour dire vrai je compte sur vous, ça me stresse pas mal tout ça j'espère m'être bien fait compris, j'ai rajouté un schéma et un excel. Il suffirait ensuite que je copie/colle les macro je suppose?
Si vous désirez un coup de main dans le domaine finance/trading je suis tout ouvert à ça, n'hésitez pas!
En espérant votre aide, sincèrement merci d'avance!
Bonjour PYD,
Ce qui est important ici c'est que la structure de tes données soient représentatives de tes données réelles.
Car en fonction de cette structure, la solution qui sera proposée change.
Exemple : est-ce que tes feuilles s'appellent bien Feuil1 D1 ? Feuil2 ?
A la place de D1, D2, D3..., peux-tu mettre des exemples de dates ? Tu peux mettre des dates bidons mais qui soient dans le bon format. C'est-à-dire au format que l'on retrouve dans ton fichier réel.
Ce n'est pas aussi simple. Mais je te rassure, ce n'est pas difficile. Il faut juste que la structure, le format... correspondent.PYD a écrit :Il suffirait ensuite que je copie/colle les macro je suppose?
Arrivé à ce stade, adapter une solution à ton cas sera plus aisé.
Un autre point. Sois clair dans tes explications ! La phrase suivante par exemple me semble difficilement compréhensible pour quelqu'un qui ne connait pas ton problème :
PYD a écrit :les noms des clients en Feuille 2 avec la nouvelle feuille 1 et qui crée un espace sur un nouveau nom est présente en feuille 1 et absent en feuille 2.
A te relire.
Bonjour VBA new! Oui c'était incompréhensible je suis très fatigué. Il est 19H12 ici.
voici la phrase correcte éditée au dessus:
2ème macro=> quelque chose qui compare depuis chaque nouvelle feuille 1 (donc chaque nouveau mois), les noms des clients en Feuille 2 avec la nouvelle feuille 1 et qui crée un espace pour pouvoir insérer ce nom en feuille 2 qui est présent en feuille 1. En gros, il peut y avoir des nouveaux clients en feuille 1 (donc ici Janvier 2012) qu'il faut insérer en feuille 2. C'est ce qu'on m'a demandé donc ça doit être possible?
En ce qui concerne les dates ce sera janvier 2012, février 2012 (enfin en anglais en faite) January 2012, february 2012 etc...
Re,
J'avais compris la demande après avoir galéré un peuPYD a écrit :voici la phrase correcte éditée au dessus:
2ème macro=> quelque chose qui compare depuis chaque nouvelle feuille 1 (donc chaque nouveau mois), les noms des clients en Feuille 2 avec la nouvelle feuille 1 et qui crée un espace pour pouvoir insérer ce nom en feuille 2 qui est présent en feuille 1. En gros, il peut y avoir des nouveaux clients en feuille 1 (donc ici Janvier 2012) qu'il faut insérer en feuille 2. C'est ce qu'on m'a demandé donc ça doit être possible?
C'est justement là qu'il faut me donner le format exactdes dates. Ne pas dire Janvier 2012 mais directement January 2012.PYD a écrit :En ce qui concerne les dates ce sera janvier 2012, février 2012 (enfin en anglais en faite) January 2012, february 2012 etc...
Donc si j'ai bien compris, c'est le nom des feuilles ? On retrouve bien exactement les mêmes dates dans les cellules J10, K10, L10... de la Feuille 2 ?
Si oui, une solution :
Bonjour VBA new!
Merci beaucoup je suis très étonné ça marche vraiment bien! Awesome Excel.
Par contre le seul truc c'est sur la feuille 1 (exemple January 2012) les clients sont rangés par ordre alphabétique et parfois les nouveaux clients sont donc au milieu de la feuille, la j'ai remarqué que le bouton "new clients" ne marche que pour les clients ajoutés à la suite.
En faite il faudrait que ce bouton compare la colonne client feuille 1 et 2 (valuation) et qu'il ajoute un espace (ou le nom) à l'endroit ou un nouveau client est présent sur la feuille 1 par rapport à la feuille 2. Tu vois le concept?
En tous cas vraiment merci, c'est sincère!
Bonjour PYD,
Si j'ai bien compris, étant donné que tes clients sont triés par ordre alphabétique, un petit tri sur la liste clients de la feuille 2 devrait répondre à ta demande.
Puisque tu seras probablement amené à faire du VBA, plutôt que de te joindre le fichier contenant la macro, je vais te montrer comment ajouter la ligne de code qu'il faut où il faut.
1- Dans le fichier que j'ai posté ci-dessus, appuie sur Alt+F11.Ceci t'ouvrira l'éditeur Visual Basic
2- Dans la fenêtre qui se trouve à gauche, double-clique sur Module1. C'est dans ces différents modules que tu pourras écrire la plupart des macros
3- Dans la fenêtre qui s'affiche à droite, tu vois les différentes macros appartenant au Module1. Ici, nous avons les macros cache, clientListet dataFeed.
Dans la macro (Sub) clientList, rajoute la ligne suivante :
MstrSht.Range("a12:o" & MstrSht.Range("a" & Rows.Count).End(xlUp).Row).Sort MstrSht.[a12], xlAscending, , , , , , xlNocomme ci-dessous :
Sub clienList()
Dim i As Long, derlign&
Dim Wsht As Worksheet, MstrSht As Worksheet
Set Wsht = Sheets("January 2012")
Set MstrSht = Sheets("Feuil2")
With Wsht
For i = 2 To .Range("b" & Rows.Count).End(xlUp).Row 'boucle sur tous les clients de la feuille mois
If .Range("b" & i) <> "" Then
'si le client n'existe pas dans la feuille principale
If Application.CountIf(MstrSht.Range("a12").CurrentRegion.Resize(, 1), .Range("b" & i)) = 0 Then
derlign = IIf(MstrSht.Range("a12") = "", 12, MstrSht.Range("a" & Rows.Count).End(xlUp).Row + 1)
'on ajoute le client inexistant
MstrSht.Range("a" & derlign) = .Range("b" & i)
End If
'passe au client suivant
i = .Range("b" & i).End(xlDown).Row - 1
End If
Next i
End With
MstrSht.Range("a12:o" & MstrSht.Range("a" & Rows.Count).End(xlUp).Row).Sort MstrSht.[a12], xlAscending, , , , , , xlNo
End SubFerme ensuite la fenêtre de l'éditeur ou appuie sur Alt+F11 pour passer à la fenêtre Excel puis clique sur le bouton New clients