Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2606 connectés 

 

 

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  93  94  95  ..  111  112  113  114  115  116
Auteur Sujet :

[Topic Unique] Excel : Keep calm and Pivot Table !

n°3426204
DjiDji5943​0
Posté le 27-09-2022 à 23:11:42  profilanswer
 

Reprise du message précédent :
dans le fichier que j'ai mis,vas sur Données==>requetes et connexions.
tu vois la requete et si tu 2cliques dedans, t'arrive directement dans PQ.
Autrement
Tu selectionnes ta plage et tu lui donnes un nom.
tu fais données==>etc ...
Dans PQ tu as ton tableau que tu filtres (comme un tableau normal).
tu fais charger dans (en haut a gauche, onglet accueil), tu choisis ta destination.
C'est fini.
Si tu modifies le tableau source, tu cliques sur le nouveau tableau et tu fais "actualiser".


Message édité par DjiDji59430 le 27-09-2022 à 23:14:03
mood
Publicité
Posté le 27-09-2022 à 23:11:42  profilanswer
 

n°3426209
arnuche
Posté le 28-09-2022 à 08:52:12  profilanswer
 

Merci pour l'explication mais tu n'as donné qu'un fichier gif, pas un xlsx, donc je ne peux pas le tester.
Mais je peux essayer de le reproduire.

n°3426320
sergent_mi​yagi
LaPeurnExistePasDansCeDojo
Posté le 30-09-2022 à 17:22:22  profilanswer
 

Drapal [:kb208:3]

n°3426351
arnuche
Posté le 01-10-2022 à 14:03:13  profilanswer
 

polionamen a écrit :

OK J'ai omis une partie du blème.  
 
Le tableau est "dynamique", il est basé sur un questionnaire.  
Donc si d'autres lignes apparaissent, il faut que le camembert puisse les inclure automatiquement.  
 
Donc je veux que les lignes vides ne soient pas affichées, et cela sans que je ne fasse rien


J'ai trouvé une solution qui marche avec Excel 2016 ;
-sélectionner le tableau (issu du questionnaire) dont les en-têtes sont par exemple dépenses et montant et insérer un TCD (onglet insertion, tableau croisé dynamique) sur une 2ème feuille dans le même fichier
-sauver en xlsm (noter le m comme macros)
-clic sur le TCD, aller dans développeur, visualiser le code, choisir "Worksheet" au lieu de "général" (à gauche), choisir "Activate" (à droite), rajouter "ThisWorkbook.RefreshAll" sur la 2ème ligne, on se retrouve avec ça ;

Code :
  1. Private Sub Worksheet_Activate()
  2. ThisWorkbook.RefreshAll
  3. End Sub
  4. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  5. End Sub


-fermer la fenêtre où se trouve ce code puis la fenêtre VBA
-tester si la mise à jour automatique fonctionne en retournant sur la 1ère feuille et en changeant une valeur du tableau ou en y rajoutant une ligne, la mise à jour devrait se faire sur le TCD.
 
Ensuite, pour ne pas afficher les lignes dont le total est 0 ;
-clic droit sur une cellule de la 1ère colonne du TCD, filtrer, filtres s'appliquant aux valeurs, un cadre intitulé "afficher les éléments pour lesquels" apparaît ; choisir "somme de montant" | "est différente de" | "0".
-tester en mettant une valeur du 1er tableau à 0, la ligne correspondante dans le TCD doit disparaître.
-sélectionner le TCD, insérer un graphique sur la même feuille.
 
Le graphique s'adapte bien aux changements du TCD et ne montre pas les libellés de la colonne dépenses dont le total est 0. :)  
 
Par contre chez moi ça ne marche que si c'est bien réparti sur 2 feuilles et pas tout sur la même. Donc il n'y a qu'une contrainte, cliquer sur la 2ème feuille pour voir le graphique s'adapter.
J'ai aussi essayé de mettre le graphique sur la 1ère feuille mais il ne se met pas à jour si je ne vais pas sur la 2ème.


Message édité par arnuche le 01-10-2022 à 14:12:17
n°3426384
otobox
Maison fondée en 2005
Posté le 02-10-2022 à 08:52:54  profilanswer
 

C'est parce que tu as mis la procédure sur la mauvaise feuille.
Essaye de la mettre sur la fenêtre de code de tes données et au lieu de choisir Worksheet_Activate(), choisis Worksheet_Change(). (ou quelque chose comme ça, je n'ai pas Excel sous la main pour être sûr).
Et puis au lieu de mettre ThisWorkbook.RefreshAll tu peux juste rafraîchir la feuille qui t'intéresse. Pareil, le code je ne l'ai pas en tête mais ça devrait donner quelque chose comme ThisWorkbook.Refresh("Nom de l'onglet" )


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°3426388
arnuche
Posté le 02-10-2022 à 09:54:52  profilanswer
 

Ok, j'avais moi-même posté un autre code sur la page précédente mais n'avais pas réussi à le faire fonctionner ;
https://forum.hardware.fr/hfr/Windo [...] m#t3426185

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("sheet name" ).PivotTables("PivotTable name" ).PivotCache.Refresh End Sub


 
J'ai mis le tableau et le TCD sur la même feuille et testé ce code ;

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. ThisWorkbook.RefreshAll
  3. End Sub
  4. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  5. End Sub


Quand je change une valeur dans le tableau, le TCD ne se met pas à jour et Excel bugue ; j'obtiens le message "erreur d'exécution 28, espace pile insuffisant".
 
J'ai testé plein de codes, j'ai chaque fois un message d'erreur si les 2 tableaux sont sur la même feuille  :o
 
Apparemment ça viendrait d'une boucle ;
https://fr.extendoffice.com/documen [...] nt-23752,0
 
Et même en les laissant sur 2 feuilles, je ne trouve aucun autre code qui fonctionne. :??:


Message édité par arnuche le 02-10-2022 à 10:16:35
n°3426404
otobox
Maison fondée en 2005
Posté le 02-10-2022 à 13:04:56  profilanswer
 

Ah oui, j'imagine que lorsque le TCD change, ca relance la macro qui rechange le tcd qui relance la macro... Probablement un truc comme ça.
 
Dans ce cas, essaye de mettre une condition du genre
si target = range("tes colonnes du tableau de données" ) alors refresh


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°3426424
arnuche
Posté le 02-10-2022 à 17:44:20  profilanswer
 

Ok, je peux tenter ça (je débute en VBA donc je galère) mais j'aimerais aussi réussir à ce que le graphique se mette à jour quand il est mis sur la même feuille que le 1er tableau, sachant que ce graphique est basé sur le TCD qui lui est sur une autre feuille.
Avec mon code actuel ça ne marche pas.

n°3426431
arnuche
Posté le 02-10-2022 à 22:03:22  profilanswer
 

J'ai trouvé ce tuto bien fait mais chez moi ça ne marche pas  :??:  ;
https://trumpexcel.com/refresh-pivo [...] -VBA-Macro
Il donne un fichier test, et celui-là fonctionne !  :heink:  
J'ai rajouté un graphique sur la page Data (basé sur le TCD de la feuille Sheet1) et il se met bien à jour dès que je modifie les datas !
 
Pas moyen de reproduire ça dans mon fichier  :( Pas de message d'erreur mais l'actualisation ne se fait pas (et j'ai bien sûr mis le bon nom de la feuille et du TCD).  :??:
Et si je tente d'actualiser manuellement, j'ai un plantage avec le message "la méthode refresh de l'objet pivotcache a échoué"  :pfff:


Message édité par arnuche le 02-10-2022 à 22:34:46
n°3426529
arnuche
Posté le 05-10-2022 à 09:53:08  profilanswer
 

Est-ce qu'une âme charitable pourrait comparer le fichier dont je parlais plus haut à mon fichier qui utilise la même formule et voir pourquoi ça marche avec celui d'origine et ça plante avec le mien ?
 
Celui qui marche ;
https://www.dropbox.com/s/rjjywr6dk [...] .xlsm?dl=1
Quand on modifie des montants dans la feuille "data", le TCD (feuille "sheet1" ) se met bien à jour.
 
Je l'ai modifié pour rajouter un graphique sur la même feuille que les montants et il se met bien à jour directement, donc ce n'est pas ma version d'Excel qui pose problème sinon il ne marcherait pas chez moi ;
https://www.cjoint.com/c/LJfhTNJrpmQ
 
Le mien qui plante (même sans graphique) ;
https://www.cjoint.com/c/LJfhYUuMw6Q
Quand on modifie un montant dans le tableau de la "Feuil1", le TCD de la feuille "TCD" ne s'actualise pas et si on le fait par clic droit, actualiser, il y a un message d'erreur. :??:  
 
Merci d'avance  :jap:


Message édité par arnuche le 05-10-2022 à 09:55:28
mood
Publicité
Posté le 05-10-2022 à 09:53:08  profilanswer
 

n°3426542
MaybeEijOr​Not
but someone at least
Posté le 05-10-2022 à 13:40:37  profilanswer
 

Pas tout suivi, si tu mets les données et le TCD dans la même feuille ceci devrait fonctionner :

Code :
  1. Private Sub Worksheet_Change(ByVal target As Excel.Range)
  2.     If Intersect(target, Application.ActiveSheet.ListObjects(1).DataBodyRange) Is Nothing Then
  3.         Exit Sub
  4.     Else
  5.         ActiveSheet.PivotTables(1).PivotCache.Refresh
  6.     End If
  7. End Sub


À mettre dans la feuille et non dans un module.

 

Ton code ne fonctionne pas car tu as mis ta macro dans la feuille du TCD donc elle surveille un changement sur cette feuille et non sur la feuille des données.

 

Si tu veux mettre les données et le TCD sur deux feuilles différentes il faut changer "ActiveSheet" par l'objet qui représente chaque feuille :

Code :
  1. Worksheet("Nom_De_La_Feuille" )


Mais toujours faire bien attention à bien placer la macro dans la feuille des données.


Message édité par MaybeEijOrNot le 05-10-2022 à 13:41:26

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426548
arnuche
Posté le 05-10-2022 à 14:37:30  profilanswer
 

Merci pour la réponse, ton 1er script fonctionne nickel quand les 2 tableaux sont sur la même feuille  :jap:  
 
Pour le cas où ils sont sur 2 feuilles différentes, ma formule est bien sur une feuille (dans la liste des Excel objects il y a feuil1 et feuil2, c'est sur feuil2).
 

Citation :

Ton code ne fonctionne pas car tu as mis ta macro dans la feuille du TCD donc elle surveille un changement sur cette feuille et non sur la feuille des données.


J'ai mis la formule sur la page du TCD, comme expliqué dans le tuto et ça marche avec son fichier.
Le code ne sert qu'à forcer l'actualisation du TCD donc logiquement il doit se mettre à jour en fonction des changements faits dans la source du TCD (en l'occurrence un petit tableau), même si cette source est sur une autre feuille.
Sauf que j'ai remarqué qu'il avait mis 2 fois le même code sur les 2 feuilles, j'ai fait pareil mais alors ça fait planter Excel, mais uniquement avec mon fichier, pas le sien ! :??:  
J'obtiens le message d'erreur "La méthode refresh de l'objet pivotcache a échoué".
 

Citation :

Si tu veux mettre les données et le TCD sur deux feuilles différentes il faut changer "ActiveSheet" par l'objet qui représente chaque feuille

Code :
  1. Worksheet("Nom_De_La_Feuille" )



C'est bien ce que j'ai mis mais ça bugue.
 
Pourrais-tu télécharger les fichiers pour les comparer ?


Message édité par arnuche le 05-10-2022 à 14:48:23
n°3426555
MaybeEijOr​Not
but someone at least
Posté le 05-10-2022 à 15:27:46  profilanswer
 

J'avais téléchargé les fichiers, pour être clair j'ai juste remarqué ça sur ton fichier :
https://i.ibb.co/MnhSTsd/excel-tonfichier.png

 

Après pourquoi ça fonctionne chez lui en mettant sur les deux feuilles et pas chez toi, je n'en sais rien et ce n'est pas important car ce n'est pas comme ça qu'il faut faire. La macro est un évènement qui se déclenche lorsqu'une valeur change sur la feuille, et c'est bien un changement de valeur sur la feuille des données qui nous intéresse et non un changement de valeur dans le TCD.
Je disais justement hier sur un autre topic :

Citation :

Parfois tu arrives au résultat escompté avec la mauvaise forme, le problème c'est que dans certaines conditions très particulières cela fonctionne, mais dès qu'une condition change ça ne fonctionnera plus. Alors que si tu mets les bonnes formes ça fonctionnera tout le temps.


Je ne vais pas me prendre la tête à chercher quelle futilité fait que ça marche alors que ce n'est qu'un concours de circonstances bien particulières et que si on fait ça correctement et bien ça fonctionne toujours.

 

Sinon, dans mon code, première ligne tu peux mettre juste "As Range" plutôt que "As Excel.Range", j'ai repris ça en copiant/collant l'exemple dans l'aide Microsoft mais je ne vois pas bien où ils veulent en venir, ça marche très bien sans.

 

EDIT : si ça peut te rassurer, quand je mets le TCD sur une autre feuille et que je mets cette macro sur les deux feuilles, chez moi aussi ça bug :

Code :
  1. Private Sub Worksheet_Change(ByVal target As Range)
  2.     Worksheets("Feuil2" ).PivotTables(1).PivotCache.Refresh
  3. End Sub


Message édité par MaybeEijOrNot le 05-10-2022 à 15:40:57

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426556
arnuche
Posté le 05-10-2022 à 15:50:34  profilanswer
 

Ok, mais le souci est que ça bugue aussi même si je ne le mets que sur la feuille du tableau au lieu de la feuille du TCD  :??:  C'est seulement ce midi que j'avais testé de mettre le code sur les 2 feuilles, mais dans les 2 cas ça plante. Pas au moment où je change une valeur dans le 1er tableau mais l'actualisation ne se fait pas et si je vais cliquer dans le TCD pour l'actualisation, c'est là que ça se plante.
Alors que s'il n'y a aucun code VBA, l'actualisation se fait (en cliquant dessus), mais le but est de l'automatiser.
 
Donc si tu peux trouver le moyen pour que le TCD de mon fichier s'actualise quand tu modifies le tableau, je suis preneur.


Message édité par arnuche le 05-10-2022 à 15:51:33
n°3426557
MaybeEijOr​Not
but someone at least
Posté le 05-10-2022 à 15:53:16  profilanswer
 

Si je reprends ton fichier (2 feuilles) et que je mets sur la feuille avec les données :

 
Code :
  1. Private Sub Worksheet_Change(ByVal target As Range)
  2.     If Intersect(target, Application.ActiveSheet.ListObjects(1).DataBodyRange) Is Nothing Then
  3.         Exit Sub
  4.     Else
  5.         Worksheets("TCD" ).PivotTables(1).PivotCache.Refresh
  6.     End If
  7. End Sub
 

Cela fonctionne.

 

:??:

 

EDIT : pense à virer le code dans la feuille TCD.

Message cité 1 fois
Message édité par MaybeEijOrNot le 05-10-2022 à 15:58:59

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426561
arnuche
Posté le 05-10-2022 à 16:08:52  profilanswer
 

MaybeEijOrNot a écrit :

Si je reprends ton fichier (2 feuilles) et que je mets sur la feuille avec les données :
 

Code :
  1. Private Sub Worksheet_Change(ByVal target As Range)
  2.     If Intersect(target, Application.ActiveSheet.ListObjects(1).DataBodyRange) Is Nothing Then
  3.         Exit Sub
  4.     Else
  5.         Worksheets("TCD" ).PivotTables(1).PivotCache.Refresh
  6.     End If
  7. End Sub


 
Cela fonctionne.
 
 :??:  
 
EDIT : pense à virer le code dans la feuille TCD.


Ok, ça marche, un grand merci  :jap:  
Je pensais que la partie "Intersect ..." n'était utile que quand les 2 tableaux étaient sur la même page, donc j'avais simplement utilisé le même code que le tuto anglais pour l'autre cas.
Alors pourquoi son code fonctionne avec son fichier sur mon pc, mystère. Mais comme tu dis ce n'est peut-être pas si important à comprendre, mais je suis curieux.
J'ai tout de même noté une différence entre son fichier et le mien (outre le fait qu'il ait mis le code sur les 2 feuilles), c'est que ses data ne sont pas dans un tableau. Mais pour le TCD normalement ça ne change rien puisqu'il peut être basé soit sur un tableau soit sur une sélection de cellules.

n°3426567
arnuche
Posté le 05-10-2022 à 17:18:01  profilanswer
 

En fait j'avais bien compris, la partie "Intersect ..." n'est utile que si les 2 tableaux sont sur la même feuille parce que s'ils sont sur 2, ce code fonctionne ;

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.         Worksheets("TCD1" ).PivotTables(1).PivotCache.Refresh
  3. End Sub


Donc le souci était simplement que le code était mis sur la mauvaise feuille.
Marche aussi en mettant le nom du TCD au lieu de (1) derrière PivotTables.

n°3426571
MaybeEijOr​Not
but someone at least
Posté le 05-10-2022 à 18:12:44  profilanswer
 

La partie intersect sert uniquement à limiter le rafraîchissement quand c'est une valeur du tableau qui est modifiée et non une valeur ailleurs.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426573
arnuche
Posté le 05-10-2022 à 18:27:26  profilanswer
 

Ok merci, je me doutais que ça devait servir à un truc du genre mais la définition que j'avais trouvée de la fonction n'était pas très claire.

n°3426610
nicko
Posté le 06-10-2022 à 11:35:35  profilanswer
 

Salut à tous,

 

Je récupère pour le boulot pas mal de devis qui ont :
Séparateur de millier : ,
Séparateur de décimales : .

 

Tout apparaît en #####
Je dois mettre manuellement dans les options les séparateur tels que décrit au dessus.

 

Il y a pas un moyen de faire ça plus proprement, sans toucher les réglages globaux de Excel ?


Message édité par nicko le 06-10-2022 à 11:36:17
n°3426611
SuppotDeSa​Tante
Aka dje69r
Posté le 06-10-2022 à 11:43:00  profilanswer
 

En remplaçant ?
 
Ctrl+H
Rechercher : ,
Remplacer : rien
 
Et re Ctrl + H
Rechercher : .
Remplacer : ,


---------------
Soyez malin, louez entre voisins !
n°3426613
nicko
Posté le 06-10-2022 à 12:51:09  profilanswer
 

Mouif, ça pourrait marcher, il y a pas mal de texte descriptif, mais a priori peu/pas de virgule là dedans...

n°3426614
flash_gord​on
Posté le 06-10-2022 à 17:36:35  profilanswer
 
n°3426651
nicko
Posté le 07-10-2022 à 12:39:41  profilanswer
 

flash_gordon a écrit :

changer tes regional settings en US.


Non, car à part pour ces devis, je veux que rien ne change ! Hors de question d'adopter la , comme séparateur de millier ! Et pourquoi pas passer au système d'unité impériales tant qu'on y est ?  :o

n°3426652
arnuche
Posté le 07-10-2022 à 12:48:02  profilanswer
 

Tu pourrais remplacer les virgules par de points avec Powershell dans tes devis avant de les importer dans Excel.
Si tu ne veux pas modifier les originaux, rien ne t'empêche d'en faire d'abord une copie et de modifier la copie.


Message édité par arnuche le 07-10-2022 à 12:49:45
n°3426653
nicko
Posté le 07-10-2022 à 13:30:04  profilanswer
 

Mais ce qui est bizarre c'est que cela ne devrait pas se produire non ? Un séparateur est un séparateur, qui ensuite prends la forme définie dans les options, c'est que du formatage ...

n°3426654
MaybeEijOr​Not
but someone at least
Posté le 07-10-2022 à 14:03:07  profilanswer
 

Tes devis sont faits sur Excel ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426655
flash_gord​on
Posté le 07-10-2022 à 14:19:36  profilanswer
 

nicko a écrit :

Mais ce qui est bizarre c'est que cela ne devrait pas se produire non ? Un séparateur est un séparateur, qui ensuite prends la forme définie dans les options, c'est que du formatage ...


 
Si ce sont des fichiers excel, non ça devrait pas se produire.
 
Mais si ça se produit je suppose que ce sont des csv ou autre.


---------------
Survivre à sa migration WP->Android /  Les features Windows que vous ne connaissez pas
n°3426738
genghis77
-_-'
Posté le 08-10-2022 à 22:46:38  profilanswer
 

salut, petite question sur excel online (dans office 365)  
j'utilise power automate et actuellement je traite un fichier excel que power automate recupère d'un mail quotidien.
 
je lance un flux bureau tous les matins et j'aimerais utiliser power automate pour appliquer la mise en forme que ma macro applique.
 
Probleme, j'ai tenté de refaire ma macro en utilisant excel online script en mode enregistrement
 
manuellement le script fonctionne mais dès lors que je l'appel dans un flux cloud automatisé ca plante.
 
j'ai essayé de decortiquer mon script en plusieurs petits et ca merde toujours une fois dans le flux cloud, meme un script d'un simple delete de cellule plante.
 
vous avez des retours sur les scripts d'excel online avec power automate ? :jap:


---------------
Je sais que je plais pas à tout le monde... mais quand je vois à qui je plais pas... je me demande si ça me dérange vraiment
n°3426831
Dave2003
Posté le 11-10-2022 à 00:25:05  profilanswer
 

Bonjour à tous, :hello:  
Je ne sais pas si c'est possible, mais je recherche un moyen de renommer environ 13 000 classeurs Excel en fonction de la valeur d'une cellule dans une feuille bien précise.
Aujourd'hui, chaque classeur porte, dans son nom, la date suivi de l'heure (ex : 20221011_002018)
La cellule dont je parle est le nom d'un commercial (ex : Jean MARTIN)
A la fin, il faudrait que le classeur porte ce nom : Jean MARTIN_20221011_002018
NB : Dans les 13000 classeurs, la cellule est toujours au même endroit (B5) dans la même feuille toujours nommé "Général"
Si quelqu'un a une piste, une solution,... je suis preneur !  :jap:  
J'ai fait quelques recherches et dans ce que j'ai trouvé, on peut le faire via du VBA dans chaque classeur. Mais moi, j'ai 13 000 classeurs...  ! :sweat:  
Merci par avance

n°3426833
otobox
Maison fondée en 2005
Posté le 11-10-2022 à 06:35:19  profilanswer
 

Tu fais une macro dans un nouveau classeur qui pour chaque fichier présent dans ton répertoire :
Ouvre le fichier
Lit le contenu de la cellule
Extrait le nom
Lit le nom du fichier
Concatene le nom et le nom fichier
Enregistre sous ce nouveau nom le fichier
Ferme le fichier
Supprime le fichier


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°3426837
Aardpeer
Transmuteur grognon de Bluxte
Posté le 11-10-2022 à 08:20:33  profilanswer
 

Je dirais que ca doit être faisable en powershell si tes fichiers sont en csv?

n°3426863
Dave2003
Posté le 11-10-2022 à 14:29:10  profilanswer
 

Ok merci pour vos conseils.
Mes fichiers sont en XLS pour les plus anciens et en xslx pour les plus récents.

n°3426900
arnuche
Posté le 12-10-2022 à 10:15:11  profilanswer
 

Hello,
je reviens sur une question que j'avais posée il y a qq semaines concernant un tableau qui montre les périodes où j'ai possédé certaines actions ;
https://forum.hardware.fr/hfr/Windo [...] m#t3424625
 
J'ai trouvé une solution pour faire le graphique en m'inspirant de ce tuto ;
https://www.youtube.com/watch?v=dVq8BW6W9i0
 
En résumé c'est un diagramme de Gantt et pour avoir plusieurs événements espacés sur la même ligne, il suffit de rajouter une colonne qui calcule la durée des intervalles entre les événements et d'effacer ces intervalles du graphique (ou plutôt de les rendre invisibles).
 
Sauf que j'ai testé ça sur une petite liste de dates et que j'ai transposé ça manuellement en tableau pour faire le graphique mais j'aimerais trouver des formules pour automatiser le plus possible ce processus.
 
Ma liste se présente sous cette forme (ordre chronologique toutes opérations confondues) ;
https://i.ibb.co/bd26kJC/excel-actions-liste-b.jpg
 
J'ai fait un tableau en y copiant les dates d'achat et de revente et j'ai rajouté une colonne pour calculer la durée en jours et une pour les intervalles entre vente et rachat, voilà ce que ça donne avec le graphique (clic pour agrandir) ;
https://i.ibb.co/XsWm8Gm/excel-graph-actions-b.jpg
Si je ne les ai pas revendues je mets la date d'aujourd'hui comme date de fin.
Les MIN et MAX au-dessus du graphique sont les 1ère et dernière dates du tableau (au format nombre) qui me servent à déterminer les valeurs min et max de l'axe horizontal du graphique.
 
En réalité ma liste est bien plus longue et pour pouvoir faire des formules incrémentables, je me dis qu'il faudrait peut-être 5 tableaux ;
-1 pour les dates de 1er achat et de rachat si je les ai toutes revendues puis rachetées
-1 pour les dates de vente (mais uniquement quand je les ai toutes vendues, donc quand le solde est à 0 dans la première liste)
-1 pour calculer la durée de possession (simple soustraction entre vente et achat et je fais +1 pour inclure le 1er jour)  
-1 pour calculer les intervalles entre les ventes et rachats (et je fais -1 sinon il y a un jour en trop) => rendus invisibles sur le graphique mais qui permettent de placer aux bons endroits les périodes de possession
-1 pour assembler tout ça en intercalant les colonnes dans l'ordre chronologique et qui ressemblerait à celui ci-dessus.
 
 
En gros je cherche 2 formules ;
-une pour aller chercher la date d'achat qui se trouve à côté de la 1ère apparition du nom d'une action (avec index/equiv c'est pas difficile) mais aussi la date du rachat qui suit la revente totale, donc qui suit le premier 0 associé à cette action (sachant qu'il n'y en a pas toujours puisqu'il y en a que je n'ai jamais revendues ou que j'ai revendues partiellement, dans ce cas je mets la date d'aujourd'hui comme date de fin puisque j'en ai encore).
Je me dis que je pourrais mettre ça dans un tableau (avec uniquement les achats) avec simplement des numéros en en-tête (1, 2, 3 ...) et que la formule utiliserait ce chiffre pour aller chercher le 1er achat, puis le 2ème, puis le 3ème ...
 
-une pour aller chercher la date de revente totale (donc pas les ventes partielles) qui se trouvent à côté des 0 (quand il y en a, sinon ça veut dire que je les ai encore, dans ce cas il faut utiliser la fonction AUJOURDHUI() ).
Là aussi la difficulté vient du fait qu'il peut y avoir un seul 0, plusieurs ou pas du tout.
 
Si vous avez une idée pour ces 2 formules ...  :jap:  
Je suppose que ça passe par un mélange de SI et d'index/equiv.
Je précise que j'ai d'abord tenté un TCD mais n'ai trouvé aucun moyen d'obtenir le format dont j'ai besoin sur lequel baser le graphique.

Message cité 1 fois
Message édité par arnuche le 12-10-2022 à 10:53:46
n°3426962
Aardpeer
Transmuteur grognon de Bluxte
Posté le 13-10-2022 à 15:37:56  profilanswer
 

Faudrait vérifier dans les formules s'il n'y a pas des liens avec un autre classeur qui forcerait la vérification des liaisons ?

 

Tu peux te mettre en mode "Montrer les formules" dans l'onglet formule, pour pouvoir visualiser plus rapidement si c'est le cas ?


Message édité par Aardpeer le 13-10-2022 à 15:38:39
n°3426966
MaybeEijOr​Not
but someone at least
Posté le 13-10-2022 à 18:49:25  profilanswer
 

Et si tu fais onglet "Données" et que tu vas sur "Requêtes et connexions" ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426967
MaybeEijOr​Not
but someone at least
Posté le 13-10-2022 à 18:52:00  profilanswer
 

arnuche a écrit :

Hello,
je reviens sur une question que j'avais posée il y a qq semaines concernant un tableau qui montre les périodes où j'ai possédé certaines actions ;
https://forum.hardware.fr/hfr/Windo [...] m#t3424625

 

J'ai trouvé une solution pour faire le graphique en m'inspirant de ce tuto ;
https://www.youtube.com/watch?v=dVq8BW6W9i0

 

En résumé c'est un diagramme de Gantt et pour avoir plusieurs événements espacés sur la même ligne, il suffit de rajouter une colonne qui calcule la durée des intervalles entre les événements et d'effacer ces intervalles du graphique (ou plutôt de les rendre invisibles).

 

Sauf que j'ai testé ça sur une petite liste de dates et que j'ai transposé ça manuellement en tableau pour faire le graphique mais j'aimerais trouver des formules pour automatiser le plus possible ce processus.

 

Ma liste se présente sous cette forme (ordre chronologique toutes opérations confondues) ;
https://i.ibb.co/bd26kJC/excel-actions-liste-b.jpg

 

J'ai fait un tableau en y copiant les dates d'achat et de revente et j'ai rajouté une colonne pour calculer la durée en jours et une pour les intervalles entre vente et rachat, voilà ce que ça donne avec le graphique (clic pour agrandir) ;
https://i.ibb.co/XsWm8Gm/excel-graph-actions-b.jpg
Si je ne les ai pas revendues je mets la date d'aujourd'hui comme date de fin.
Les MIN et MAX au-dessus du graphique sont les 1ère et dernière dates du tableau (au format nombre) qui me servent à déterminer les valeurs min et max de l'axe horizontal du graphique.

 

En réalité ma liste est bien plus longue et pour pouvoir faire des formules incrémentables, je me dis qu'il faudrait peut-être 5 tableaux ;
-1 pour les dates de 1er achat et de rachat si je les ai toutes revendues puis rachetées
-1 pour les dates de vente (mais uniquement quand je les ai toutes vendues, donc quand le solde est à 0 dans la première liste)
-1 pour calculer la durée de possession (simple soustraction entre vente et achat et je fais +1 pour inclure le 1er jour)
-1 pour calculer les intervalles entre les ventes et rachats (et je fais -1 sinon il y a un jour en trop) => rendus invisibles sur le graphique mais qui permettent de placer aux bons endroits les périodes de possession
-1 pour assembler tout ça en intercalant les colonnes dans l'ordre chronologique et qui ressemblerait à celui ci-dessus.

 


En gros je cherche 2 formules ;
-une pour aller chercher la date d'achat qui se trouve à côté de la 1ère apparition du nom d'une action (avec index/equiv c'est pas difficile) mais aussi la date du rachat qui suit la revente totale, donc qui suit le premier 0 associé à cette action (sachant qu'il n'y en a pas toujours puisqu'il y en a que je n'ai jamais revendues ou que j'ai revendues partiellement, dans ce cas je mets la date d'aujourd'hui comme date de fin puisque j'en ai encore).
Je me dis que je pourrais mettre ça dans un tableau (avec uniquement les achats) avec simplement des numéros en en-tête (1, 2, 3 ...) et que la formule utiliserait ce chiffre pour aller chercher le 1er achat, puis le 2ème, puis le 3ème ...

 

-une pour aller chercher la date de revente totale (donc pas les ventes partielles) qui se trouvent à côté des 0 (quand il y en a, sinon ça veut dire que je les ai encore, dans ce cas il faut utiliser la fonction AUJOURDHUI() ).
Là aussi la difficulté vient du fait qu'il peut y avoir un seul 0, plusieurs ou pas du tout.

 

Si vous avez une idée pour ces 2 formules ...  :jap:
Je suppose que ça passe par un mélange de SI et d'index/equiv.
Je précise que j'ai d'abord tenté un TCD mais n'ai trouvé aucun moyen d'obtenir le format dont j'ai besoin sur lequel baser le graphique.


La date de revente totale c'est simplement quand le solde passe à "0", non ? Donc index/equiv aussi ?
Et pour trouver la date du rachat, un sommeprod avec min(date) > date du solde 0, mais si tu passes plusieurs fois par revente totale c'est forcément merdique et je pense qu'il vaut mieux passer en bdd.

Message cité 2 fois
Message édité par MaybeEijOrNot le 13-10-2022 à 18:54:33

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426969
arnuche
Posté le 13-10-2022 à 23:13:23  profilanswer
 

Merci d'avoir pris le temps de lire ma tartine  :jap:  
 

MaybeEijOrNot a écrit :

La date de revente totale c'est simplement quand le solde passe à "0", non ? Donc index/equiv aussi ?


Oui, mais il peut y en avoir plusieurs par action donc il faut que la formule puisse s'incrémenter en donnant la liste des dates associées à un 0, et je crois que ça marche avec la formule ci-dessous.
 

MaybeEijOrNot a écrit :

Et pour trouver la date du rachat, un sommeprod avec min(date) > date du solde 0


Je pensais justement à ça mais je ne sais pas très bien comment l'intégrer à la formule que j'ai trouvée (voir plus bas).
 

MaybeEijOrNot a écrit :

mais si tu passes plusieurs fois par revente totale c'est forcément merdique et je pense qu'il vaut mieux passer en bdd.


C'est à dire ?
Pas sûr que ce soit un souci parce que j'ai retrouvé une formule matricielle qu'on avait évoquée il y a quelques semaines permettant de lister tous les montants associés à un vendeur quand ce vendeur est présent plusieurs fois dans une liste et qui marche même si le même montant est présent plusieurs fois pour ce vendeur. Voir la question d'elaraz et ma réponse plus bas sur cette page ;
https://forum.hardware.fr/hfr/Windo [...] m#t3424067
 
Adapté à mon cas présent, ça donne ça (sans distinction de vente ou d'achat, donc pas encore tout à fait au point) ;
https://i.ibb.co/wMS632R/Excel-actions-dates-a.jpg

Code :
  1. =INDEX($B$2:$B$14;PETITE.VALEUR(SI($A$2:$A$14=$A26;LIGNE($B$2:$B$14)-1);$B$25))


A26 n'est pas bloqué pour la ligne mais B25 l'est pour pouvoir l'incrémenter vers le bas, sauf qu'après je dois l'incrémenter vers la droite donc là je fais l'inverse. B25 fait allusion au chiffre 1 pour remplacer LIGNES($1:1) qui est incrémentable verticalement mais pas horizontalement alors j'ai dû ruser.
Les erreurs à partir de A31 c'est parce que j'utilise cette matricielle (à partir de A26) pour avoir une liste sans doublon basée sur la liste de A2 à A14 ;

Code :
  1. =INDEX($A$2:$A$14;EQUIV(0;NB.SI($A$25:A25;$A$2:$A$14);0))


Je pourrais bien sûr rajouter un sierreur ... "".
 
Mais comme tu le vois, les résultats ne sont pas ceux dont j'ai besoin puisque comme tu l'as compris l'achat n°2 doit être celui qui suit le premier 0 (vente totale), donc en C26 je devrais avoir 02-11-2020 et pas 01-11-2020.
 
Pour le tableau des ventes à droite j'ai testé la même formule et qui n'est bien sûr pas adaptée mais j'ai l'impression qu'il doit y avoir moyen de mixer ma formule avec ce que tu proposes.
 
Quand j'aurai les bonnes formules je préparerai un tableau bien plus grand que nécessaire pour ne pas avoir à incrémenter à chaque nouvelle entrée dans la liste de base (avec éventuellement un sierreur ... "" ).
Puis je ferai des liaisons vers un tableau récapitulatif qui me sert pour ma ligne du temps.


Message édité par arnuche le 13-10-2022 à 23:33:41
n°3426985
arnuche
Posté le 14-10-2022 à 13:56:13  profilanswer
 

MaybeEijOrNot a écrit :

La date de revente totale c'est simplement quand le solde passe à "0", non ? Donc index/equiv aussi ?


Pour le tableau "vente", j'ai pensé à intégrer comme condition que le montant de la colonne E doit être égal à 0 avec la fonction ET mais ça ne marche pas (toujours une matricielle) ;

Code :
  1. =INDEX($B$2:$B$14;PETITE.VALEUR(SI(ET($A$2:$A$14=$A26;E2:E14=0);LIGNE($B$2:$B$14)-1);$H$25))


Pas de message d'erreur mais il affiche 10-01-2017, soit la 1ère date de la colonne au lieu de 01-11-2020, la 1ère date pour laquelle le solde est de 0 (voir la capture 2 messages plus haut).
 
Je rappelle que la formule matricielle qui permet de lister toutes les dates (sans condition) associées au nom d'une société est celle-ci ;

Code :
  1. =INDEX($B$2:$B$14;PETITE.VALEUR(SI($A$2:$A$14=$A$26;LIGNE($B$2:$B$14)-1);H$25))


 
J'ai aussi tenté ça mais alors ça m'affiche la date d'aujourd'hui (au lieu de 01-11-2020) pour la société "Bidule" ;

Code :
  1. =SI(E2:E14=0;INDEX($B$2:$B$14;PETITE.VALEUR(SI($A$2:$A$14=$A26;LIGNE($B$2:$B$14)-1);$H$25));AUJOURDHUI())


 
Ou je dois trouver le moyen d'intégrer EQUIV mais je ne vois pas trop comment, et je dois garder les parties INDEX et PETITE.VALEUR (cette dernière me permet d'égrener une à une les dates que je recherche).


Message édité par arnuche le 14-10-2022 à 14:06:58
n°3426989
MaybeEijOr​Not
but someone at least
Posté le 14-10-2022 à 18:27:14  profilanswer
 

Pour commencer dans l'ordre, je te propose :

Code :
  1. =SOMMEPROD(($A$2:$A$14=$A26)*($E$2:$E$14=0)*PETITE.VALEUR($B$2:$B$14;H$25))


Tu devrais pouvoir récupérer horizontalement les dates des reventes complètes.
 
Est-ce que ça fonctionne bien ? Si oui, il faut quoi maintenant ? (j'ai du mal à suivre)


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3426996
arnuche
Posté le 14-10-2022 à 18:52:12  profilanswer
 

Non ça ne va pas, il me sort une date en 2134 (que je sauve en matriciel ou pas d'ailleurs) :heink:  
Pour procéder par étapes, il faudrait peut-être déjà trouver une formule qui renvoie bien le 01-11-2020 pour la société "Bidule" et puis trouver le moyen d'intégrer ça dans une formule qui permet d'incrémenter vers la droite pour trouver la date de la 2ème vente complète de la même société (29-03-2021).
Je me demande si SOMMEPROD est bien approprié pour chercher une date.


Message édité par arnuche le 14-10-2022 à 18:52:45
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  93  94  95  ..  111  112  113  114  115  116

Aller à :
Ajouter une réponse
 

Sujets relatifs
[EXCEL] Faire une mise à jour dynamique de valeur entre champsExcel : rechercher et afficher une liste
[EXCEL] Conversion/multiplication de massequestions sur la téléphonie avec free en 512k
Excel: Comment insérer automatiquement un titre à chaque page ?[excel] largeur de colonne différente
[Excel] (N00B Inside :-/ )Je veux additionner ...2 questions urgentes : Remplacer Photoshop et achat de scanner
changer la police par défaut sous Excel[Excel] Comment faire pivoter une feuille ?
Plus de sujets relatifs à : [Topic Unique] Excel : Keep calm and Pivot Table !


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)