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

 

 

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

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

n°3427274
arnuche
Posté le 21-10-2022 à 00:48:06  profilanswer
 

Reprise du message précédent :

MaybeEijOrNot a écrit :

Charts("Graphique 1" ).Axes(xlValues).MaximumScale = Sheets("Nom de la feuille avec la date" ).Range("H2" )


Il bugue avec ce code, pareil si je remets celui que tu avais posté plus haut (mais en ayant remplacé ActiveSheet par Sheets("Graphique" )).

mood
Publicité
Posté le 21-10-2022 à 00:48:06  profilanswer
 

n°3427277
MaybeEijOr​Not
but someone at least
Posté le 21-10-2022 à 08:59:13  profilanswer
 

Ton graphique il est sur une feuille de calcul ?
Le code que j'ai posté mets à jour lors de l'ouverture du classeur la valeur maximale de l'axe d'un graphique dans une feuille de graphique avec la valeur d'une cellule dans une feuille de calcul qui contient la formule aujourdhui.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427280
arnuche
Posté le 21-10-2022 à 09:30:21  profilanswer
 

Ah donc pour que cette formule fonctionne ils ne peuvent pas être sur la même feuille ? Et il ne faut pas préciser sur quelle feuille se trouve le graphique, juste son nom suffit ?
 
Et quand tu dis feuille de graphique et feuille de calcul, je suppose qu'il n'y a pas de différence entre les deux (en tout cas dans la manière de les créer), c'est juste que sur l'une on met juste un graphique et sur l'autre juste des calculs.
 
Jusqu'à présent j'ai toujours mélangé les deux sans que ça ne pose de souci.

n°3427287
MaybeEijOr​Not
but someone at least
Posté le 21-10-2022 à 11:05:50  profilanswer
 

Il existe deux types de feuilles pour le VBA :
- les feuilles des calculs (avec des cases),
- les feuilles de graphiques (sans case).
 
Et donc en fonction d'où se trouve le graphique il faut traiter différemment pour y accéder. La formule que je t'ai donnée fonctionne avec une feuille de graphique.


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

Ah ok, je ne savais même pas qu'il pouvait y avoir des feuilles sans case, donc la mienne est bien une de calcul.
 
J'ai tenté ça, il bugue ;

Code :
  1. Private Sub Workbook_Open()
  2.     Charts("Graphique 1" ).Chart.Axes(xlValues).MaximumScale = Worksheets("Graphique" ).Range("H2" )
  3. End Sub


 
pareil si je mets la cellule de référence sur une autre feuille ;

Code :
  1. Private Sub Workbook_Open()
  2.     Charts("Graphique 1" ).Chart.Axes(xlValues).MaximumScale = Worksheets("MM" ).Range("B2" )
  3. End Sub


 
et celui-là fonctionne mais uniquement si je ferme et sauve (et donc ré-ouvre) sur la feuille du graphique en question ;

Code :
  1. Private Sub Workbook_Open()
  2.     Worksheets("Graphique" ).ChartObjects("Graphique 1" ).Chart.Axes(xlValue).MaximumScale = Range("H2" )
  3. End Sub


Si je ferme et sauve en étant sur une autre feuille du classeur, il le ré-ouvre sans message sauf que le graphique n'est plus bon, il m'a complètement changé les valeurs MIN et MAX de l'axe  :heink:  
 
Par contre celui-ci fonctionne toujours  :)  ;

Code :
  1. Private Sub Workbook_Open()
  2.     Worksheets("Graphique" ).ChartObjects("Graphique 1" ).Chart.Axes(xlValue).MaximumScale = Worksheets("MM" ).Range("B2" )
  3. End Sub


Et il n'empêche pas l'autre code (de 11 lignes, voir plus haut) que j'ai mis sur la feuille du graphique de fonctionner.
Mais je trouve étonnant avec ta formule pour ThisWorkbook de devoir mettre la cellule de référence sur une autre feuille que celle du graphique. Ou alors il faut juste spécifier 2 fois la feuille dans le code, 1x pour le graphique et 1x pour la cellule de référence, même si elle est sur la même feuille.
 
edit :
bingo, ils peuvent être sur la même feuille mais il faut spécifier 2 fois la feuille dans le code. ;)  

Code :
  1. Private Sub Workbook_Open()
  2.     Worksheets("Graphique" ).ChartObjects("Graphique 1" ).Chart.Axes(xlValue).MaximumScale = Worksheets("Graphique" ).Range("I2" )
  3. End Sub

Message cité 1 fois
Message édité par arnuche le 21-10-2022 à 13:13:12
n°3427303
MaybeEijOr​Not
but someone at least
Posté le 21-10-2022 à 14:20:02  profilanswer
 

arnuche a écrit :

Ah ok, je ne savais même pas qu'il pouvait y avoir des feuilles sans case, donc la mienne est bien une de calcul.
 
J'ai tenté ça, il bugue ;

Code :
  1. Private Sub Workbook_Open()
  2.     Charts("Graphique 1" ).Chart.Axes(xlValues).MaximumScale = Worksheets("Graphique" ).Range("H2" )
  3. End Sub



 
Là ce qui "bug", je suppose, c'est que comme je disais précédemment, tu n'accèdes pas au graphique par le bon objet puisqu'il se trouve sur une feuille de calcul et non sur une feuille de graphique (clic droit sur le graphique --> déplacer le graphique --> nouvelle feuille).
 
Chez moi je fais un classeur avec feuil1 et feuil2, je mets des données dans feuil1, je crées un graphique dans feuil1, je place aujourdhui dans feuil1 en H2, en VBA je mets dans ThisWorkbook :

Code :
  1. Private Sub Workbook_Open()
  2.     Worksheets("Feuil1" ).ChartObjects("Graphique 1" ).Chart.Axes(xlCategory).MaximumScale = Worksheets("Feuil1" ).Range("H2" )
  3. End Sub


Je me mets sur feuil2, j'enregistre, je quitte, j'ouvre, je vais sur feuil1 et le graphique mets bien son échelle à jour avec la date d'aujourd'hui.
 
Tu n'as probablement rien besoin de plus puisque tes données ne seront jamais plus récentes que le jour J et donc quand tu ouvres le classeur tu seras déjà avec une échelle jusqu'au jour J.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427305
arnuche
Posté le 21-10-2022 à 14:25:31  profilanswer
 

Là tu postes exactement le même code que le dernier que j'ai posté et qui fonctionne bien chez moi aussi. ;)

n°3427416
arnuche
Posté le 25-10-2022 à 15:23:13  profilanswer
 

MaybeEijOrNot a écrit :

H26 (formule matricielle) à déployer sur tout ton tableau :

Code :
  1. {=PETITE.VALEUR(($A$2:$A$14=$G26)*($E$2:$E$14=0)*($B$2:$B$14);NBVAL($A$2:$A$14)-NB.SI.ENS($A$2:$A$14;$G26;$E$2:$E$14;"0" )+H$25)}


 
B26 (formule matricielle) à déployer sur la colonne uniquement :

Code :
  1. {=PETITE.VALEUR(($A$2:$A$14=$A26)*($B$2:$B$14);NBVAL($A$2:$A$14)-NB.SI($A$2:$A$14;$A26)+1)}


 
C26 (formule matricielle) à déployer sur le reste du tableau :

Code :
  1. {=PETITE.VALEUR(($A$2:$A$14=$A26)*($B$2:$B$14)*($B$2:$B$14>H26);NBVAL($A$2:$A$14)-NB.SI.ENS($A$2:$A$14;$A26;$B$2:$B$14;">"&H26)+1)}



Salut,
je reviens là-dessus parce que je me suis rendu compte qu'il y avait un souci avec ces formules dans le cas où il y a au moins 2 achats et reventes de la même action le même jour !  :o  Il ne met pas les bonnes dates et en plus il y a un achat et une vente en trop  :??:  
 
J'ai refait un tableau mieux présenté avec tout ce dont j'ai besoin pour ma ligne du temps, les 2 problèmes étant dans les feuilles achats et ventes, voir les notes que j'y ai mises ;
https://www.cjoint.com/c/LJznu5OU86K
 
Tu verras que dans la partie vente, j'ai rajouté des trucs aux formules pour que la date d'aujourd'hui soit mise si le dernier solde est >0 et pour qu'il ne mette rien si la cellule précédente contient déjà la date d'aujourd'hui (à partir de la 2è vente, colonne C) ou si elle est vide (à partir de la 3è vente, colonne D).
 
Il y a aussi un truc étrange, c'est que si je change la date en B25 dans la feuille Liste et que je mets 14-10-22 au lieu de 13-10-22, il indique bien 14-10-22 comme date de dernier achat en F10 dans la feuille Achats alors que si je laisse 13-10-22, il met 16-10-22 en F10 alors que c'est la date d'une revente partielle et pas d'un achat. :pfff:  
Il est sans doute perturbé par les mêmes dates consécutives pour la même action.
 
Si tu as une idée  :jap:  
 
P.S. : je rappelle qu'il ne faut tenir compte que des ventes complètes (solde à 0) et que des rachats qui suivent les ventes complètes.
Si on rajoute une action dans la liste, on incrémente les autres feuilles vers le bas et si on rajoute des opérations pour des actions déjà dans la liste, on incrémente les autres feuilles vers la droite.


Message édité par arnuche le 25-10-2022 à 15:37:13
n°3427445
MaybeEijOr​Not
but someone at least
Posté le 25-10-2022 à 20:04:53  profilanswer
 

Cela fonctionne très bien avec mes formules de base avec un SIERREUR(maformule;"" ) en plus.
Mais oui Excel n'est pas magicien il ne peut pas comprendre l'ordre dans lequel les transactions ont été faites si elles sont toutes mises à la même date. Donc soit tu rajoutes l'heure pour discriminer (bonne solution) soit tu prends pour critère les numéro de ligne (mauvaise solution qui implique de saisir strictement les données dans l'ordre chronologique).

Message cité 1 fois
Message édité par MaybeEijOrNot le 25-10-2022 à 20:05:11

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427446
arnuche
Posté le 25-10-2022 à 20:25:04  profilanswer
 

MaybeEijOrNot a écrit :

Cela fonctionne très bien avec mes formules de base avec un SIERREUR(maformule;"" ) en plus.


Quand les dates sont différentes oui, mais pas dans le cas que j'expliquais.
 

MaybeEijOrNot a écrit :

Mais oui Excel n'est pas magicien il ne peut pas comprendre l'ordre dans lequel les transactions ont été faites si elles sont toutes mises à la même date. Donc soit tu rajoutes l'heure pour discriminer (bonne solution)


Ok, tu crois qu'il y a moyen de faire ça juste pour les jours où il y a eu plusieurs transactions ou il faudrait rajouter l'heure pour toutes les transactions ? Et comment modifier la formule pour ce faire ?
 

MaybeEijOrNot a écrit :

soit tu prends pour critère les numéro de ligne (mauvaise solution qui implique de saisir strictement les données dans l'ordre chronologique).


Vu que je les encode d'office dans l'ordre chronologique, ça me paraît la solution la plus simple à mettre en œuvre, sauf que je ne vois pas comment faire.

mood
Publicité
Posté le 25-10-2022 à 20:25:04  profilanswer
 

n°3427448
MaybeEijOr​Not
but someone at least
Posté le 25-10-2022 à 20:37:18  profilanswer
 

arnuche a écrit :


Ok, tu crois qu'il y a moyen de faire ça juste pour les jours où il y a eu plusieurs transactions ou il faudrait rajouter l'heure pour toutes les transactions ? Et comment modifier la formule pour ce faire


Non, seulement pour les transactions qui ont lieu le même jour, mais ce serait absurde d'avoir les heures uniquement pour une partie des transactions. Pas de changement de formule nécessaire.
 

arnuche a écrit :


Vu que je les encode d'office dans l'ordre chronologique, ça me paraît la solution la plus simple à mettre en œuvre, sauf que je ne vois pas comment faire.


Oui c'est probablement assez merdique à mettre au point, raison de plus pour éviter. :o  
Sans compter le risque d'une perte de la donnée chronologique parce que quelqu'un aura fait un tri ou exporté les données.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427453
arnuche
Posté le 25-10-2022 à 21:32:59  profilanswer
 

MaybeEijOrNot a écrit :

Non, seulement pour les transactions qui ont lieu le même jour, mais ce serait absurde d'avoir les heures uniquement pour une partie des transactions.


Pas tant que ça parce que vu qu'il y en a des centaines et que je n'ai pas les heures, ça va me prendre un temps fou d'en inventer et de les rajouter. Mais pour les jours où il y en a plusieurs, pas le choix.
 

MaybeEijOrNot a écrit :

Pas de changement de formule nécessaire.


Ah bon, et je les mets dans les mêmes cellules que les jours ? Normalement les cellules sont formatables en dates ou en heures mais pas les 2 ensemble.
Tu es sûr que ta formule peut s'adapter aux heures ?
Parce que dans ton explication, tu parlais de matrices qui permettent d'obtenir soit la date (1x1xdate) soit 0 ;
https://forum.hardware.fr/hfr/Windo [...] m#t3427008
Ou alors il faudrait rajouter une colonne pour les heures mais ça compliquerait la formule.
Ça me semble galère, ce serait peut-être plus simple de rajouter une allusion à la ligne ou au nombre de transactions pour cette date.
 
Ou je rajoute une colonne avec le n° de transaction, ça c'est facile, mais il faudra modifier les formules.
Et de toute façon j'ai besoin des dates pour ma ligne du temps.


Message édité par arnuche le 25-10-2022 à 21:53:10
n°3427455
MaybeEijOr​Not
but someone at least
Posté le 25-10-2022 à 21:55:46  profilanswer
 

01/01/2022 04:38
Le format date heure existe.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427457
arnuche
Posté le 25-10-2022 à 22:09:54  profilanswer
 

Ok, je vois qu'il y a ça dans les formats personnalisés.
Mais je vois mal comment tes formules pourraient s'adapter à ce changement, surtout si je ne mets les heures que pour une partie des transactions.

n°3427458
MaybeEijOr​Not
but someone at least
Posté le 25-10-2022 à 23:05:46  profilanswer
 

C'est quoi le rapport entre les formules et les dates ?
Une date c'est juste un nombre qui exprime le temps écoulé, quand tu rajoutes les heures/minutes c'est juste un nombre plus précis.


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

Ok, je vais tenter ça, mais alors j'ai mal compris ton explication de la formule où tu parlais de date.

n°3427464
MaybeEijOr​Not
but someone at least
Posté le 26-10-2022 à 08:24:48  profilanswer
 

La formule sort le nombre représentant la date, après la format le transforme en date, avec date/heure c'est pareil, le format te permet après de transformer en date ou en date/heure si tu veux.
Dans mon explication j'ai écrit "date" pour être plus explicite. D'ailleurs tu vois bien qu'il y a des multiplications, ça n'a pas de sens de multiplier une date comme quoi c'est simplement un nombre. ;)

 

Édit : une date sans heure c'est simplement une date à 00:00 qui n'affiche pas l'heure.


Message édité par MaybeEijOrNot le 26-10-2022 à 08:26:09

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427484
arnuche
Posté le 26-10-2022 à 09:58:37  profilanswer
 

Merci pour ces précisions. :jap:  
 
J'ai essayé et ça va mieux pour les dates mais il reste un gros souci que je ne parviens pas à comprendre que j'évoquais déjà hier : pour les jours où il y a plusieurs transactions, la formule renvoie un achat et une vente en trop, malgré les heures rajoutées  :heink:  
Je te passe le fichier modifié, si tu as le temps de jeter un œil (voir les lignes Schoups et Plastoc dans les feuilles achats et ventes) ;)  ;
https://www.cjoint.com/c/LJAh56iDGqE
 
Et j'ai vu que ça posait souci aussi pour le calcul de nombre de jours mais ça je verrai après (je pourrai faire un arrondi et trouver le moyen d'éviter de compter plusieurs fois la même date).


Message édité par arnuche le 26-10-2022 à 10:02:29
n°3427503
MaybeEijOr​Not
but someone at least
Posté le 26-10-2022 à 12:22:20  profilanswer
 

Oui tu n'as pas corrigé la feuille Ventes, formule matricielle en C2 à déployer sur le reste :

Code :
  1. =SIERREUR(PETITE.VALEUR((Tableau1[Société]=$A2)*(Tableau1[Solde
  2. nombre]=0)*(Tableau1[Date]);NBVAL(Tableau1[Société])-NB.SI.ENS(Tableau1[Société];$A2;Tableau1[Solde
  3. nombre];"0" )+C$1);"" )


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427506
arnuche
Posté le 26-10-2022 à 12:30:42  profilanswer
 

C'est bien la formule que j'utilise, sauf que j'y ai rajouté un SI/ET pour faire face au cas où j'ai besoin de la date d'aujourd'hui au lieu du vide et un autre SI pour mettre du vide (à partir de la 3è colonne) s'il y en a déjà sur la case d'avant.

n°3427508
MaybeEijOr​Not
but someone at least
Posté le 26-10-2022 à 13:29:11  profilanswer
 

MaybeEijOrNot a écrit :

Oui tu n'as pas corrigé la feuille Ventes, formule matricielle en C2 à déployer sur le reste :

Code :
  1. =SIERREUR(PETITE.VALEUR((Tableau1[Société]=$A2)*(Tableau1[Solde
  2. nombre]=0)*(Tableau1[Date]);NBVAL(Tableau1[Société])-NB.SI.ENS(Tableau1[Société];$A2;Tableau1[Solde
  3. nombre];"0" )+C$1);"" )



Fonctionnait sur ton dernier fichier.


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

Ah oui, j'ai tout effacé et remis et c'est bon, merci d'avoir insisté. :jap:  
En fait mes formules étaient bonnes mais je crois qu'à un moment j'ai dû inverser les formules d'achats et de ventes.
 
Me reste juste à trouver le moyen d'éviter les doublons pour la durée de possession quand il y a plusieurs achats le même jour.

n°3427521
arnuche
Posté le 26-10-2022 à 22:09:57  profilanswer
 

Je crois que j'ai trouvé comment faire, je vais déduire 1 jour si la date d'achat correspond à la date de la précédente revente.
Sauf que je bute sur un détail : je voudrais utiliser la date mais pas l'heure (puisque l'heure diffère), alors j'ai pensé à une formule de ce genre ;

Code :
  1. =SI(GAUCHE(B2;10)=GAUCHE(B3;10);"oui";"non" )


Curieusement il me renvoie non alors que les 10 premiers caractères des 2 cellules sont bien identiques  :heink:  
Leur contenu étant ;
pour B2 ;

Code :
  1. 12-02-2020  00:00:00


et B3 ;

Code :
  1. 12-02-2020  00:00:01


 
Mais si je tape le contenu des 2 cellules à la place de B2 et B3, donc comme ça ;

Code :
  1. =SI(GAUCHE("12-02-2020  00:00:00";10)=GAUCHE("12-02-2020  00:00:01";10);"oui";"non" )


là il me renvoie oui  :??:
 
Même si je formate les 2 cellules en nombre, les 10 premiers caractères sont bien identiques donc je ne vois pas où est le souci  :o
Je viens de voir qu'il met oui jusqu'à 5, il met non à partir de 6  :heink: Donc c'est à partir de la décimale que ça lui pose souci.
 
edit ;
C'est bon, j'ai pigé : le "12-02-2020  00:00:00" correspond à 43873, donc seulement 5 caractères (même si on a mis en forme pour faire apparaître plusieurs décimales), la décimale n'apparaît qu'à partir de "12-02-2020  00:00:01" qui correspond à 43873,000011...
Il suffit de commencer à 00:00:01 au lieu de 00:00:00 pour avoir plus que 5 caractères  :)  
Sauf que dans mon cas, 5 sont visiblement suffisants.

Message cité 1 fois
Message édité par arnuche le 26-10-2022 à 22:26:01
n°3427549
polionamen
Hop
Posté le 27-10-2022 à 13:17:33  profilanswer
 

Bonjour chers amis,

 

Nouveau petit problème.

 

Dans un tableau Excel, je compile des commentaires sur un produit.
J'ai 2 colonnes :
- commentaire récent
- commentaire ancien
Ces commentaires peuvent faire plus de 256 caractères.

 

Je crée une 3e colonne : commentaire (quelque soit sa fraicheur).
Je voudrai une fonction dans la 3e colonne, qui va afficher le commentaire récent s'il existe sinon le plus ancien.
Cette cellule sera appelée par un autre tableur.

 

J'ai donc bâti :
SI(ESTVIDE([@[Comm récent]]);TEXTE([@[Comm vieux ]];0);TEXTE([@[Comm récent]];0))

 

Ça marche sauf quand il y a plus de 256 caractères.

 

Comment faire ? Sur Internet, ils parlent d'utiliser Index Equiv mais je ne comprends pas comment l'utiliser ici.

Message cité 1 fois
Message édité par polionamen le 27-10-2022 à 13:24:34
n°3427550
MaybeEijOr​Not
but someone at least
Posté le 27-10-2022 à 13:47:54  profilanswer
 

arnuche a écrit :

Je crois que j'ai trouvé comment faire, je vais déduire 1 jour si la date d'achat correspond à la date de la précédente revente.
Sauf que je bute sur un détail : je voudrais utiliser la date mais pas l'heure (puisque l'heure diffère), alors j'ai pensé à une formule de ce genre ;

Code :
  1. =SI(GAUCHE(B2;10)=GAUCHE(B3;10);"oui";"non" )


Curieusement il me renvoie non alors que les 10 premiers caractères des 2 cellules sont bien identiques  :heink:  
Leur contenu étant ;
pour B2 ;

Code :
  1. 12-02-2020  00:00:00


et B3 ;

Code :
  1. 12-02-2020  00:00:01


 
Mais si je tape le contenu des 2 cellules à la place de B2 et B3, donc comme ça ;

Code :
  1. =SI(GAUCHE("12-02-2020  00:00:00";10)=GAUCHE("12-02-2020  00:00:01";10);"oui";"non" )


là il me renvoie oui  :??:
 
Même si je formate les 2 cellules en nombre, les 10 premiers caractères sont bien identiques donc je ne vois pas où est le souci  :o
Je viens de voir qu'il met oui jusqu'à 5, il met non à partir de 6  :heink: Donc c'est à partir de la décimale que ça lui pose souci.
 
edit ;
C'est bon, j'ai pigé : le "12-02-2020  00:00:00" correspond à 43873, donc seulement 5 caractères (même si on a mis en forme pour faire apparaître plusieurs décimales), la décimale n'apparaît qu'à partir de "12-02-2020  00:00:01" qui correspond à 43873,000011...
Il suffit de commencer à 00:00:01 au lieu de 00:00:00 pour avoir plus que 5 caractères  :)  
Sauf que dans mon cas, 5 sont visiblement suffisants.


Utilise arrondi() ou tronque() ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427551
MaybeEijOr​Not
but someone at least
Posté le 27-10-2022 à 13:57:16  profilanswer
 

polionamen a écrit :

Bonjour chers amis,  
 
Nouveau petit problème.  
 
Dans un tableau Excel, je compile des commentaires sur un produit.  
J'ai 2 colonnes :  
- commentaire récent
- commentaire ancien
Ces commentaires peuvent faire plus de 256 caractères.  
 
Je crée une 3e colonne : commentaire (quelque soit sa fraicheur).  
Je voudrai une fonction dans la 3e colonne, qui va afficher le commentaire récent s'il existe sinon le plus ancien.  
Cette cellule sera appelée par un autre tableur.  
 
J'ai donc bâti :  
SI(ESTVIDE([@[Comm récent]]);TEXTE([@[Comm vieux ]];0);TEXTE([@[Comm récent]];0))
 
Ça marche sauf quand il y a plus de 256 caractères.  
 
Comment faire ? Sur Internet, ils parlent d'utiliser Index Equiv mais je ne comprends pas comment l'utiliser ici.


Code :
  1. =SI(récent<>"";récent;ancien)


 
https://i.ibb.co/Qc7p60n/excel04.png

Message cité 1 fois
Message édité par MaybeEijOrNot le 27-10-2022 à 13:57:37

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°3427552
arnuche
Posté le 27-10-2022 à 14:08:54  profilanswer
 

MaybeEijOrNot a écrit :

Utilise arrondi() ou tronque() ?


Ok je retiens, ça fait 3 fonctions possibles.

n°3427561
polionamen
Hop
Posté le 27-10-2022 à 16:22:04  profilanswer
 

MaybeEijOrNot a écrit :


Code :
  1. =SI(récent<>"";récent;ancien)


 
https://i.ibb.co/Qc7p60n/excel04.png


 
 
Merci [:roi]

n°3427591
LaRoueEstT​ombee
Hortense ! Pour moi !
Posté le 28-10-2022 à 11:57:29  profilanswer
 

Je viens de découvrir un truc marrant après avoir passé du temps à me faire chier avec la gestion des fenêtres [:tinostar]  
 
https://rehost.diberie.com/Picture/Get/f/95765


---------------
Votre couroux impitoiable Veut-il renverser l'Univers ?
n°3427592
arnuche
Posté le 28-10-2022 à 12:19:01  profilanswer
 

@ polionamen : tu n'avais plus répondu après ta question précédente concernant le graphique qui devait se mettre à jour sans faire apparaître les lignes dont le total était à 0, tu avais bien vu nos réponses ?
Je t'avais montré comment filtrer ça avec un TCD.

n°3427600
Aardpeer
Transmuteur grognon de Bluxte
Posté le 28-10-2022 à 14:46:58  profilanswer
 

LaRoueEstTombee a écrit :

Je viens de découvrir un truc marrant après avoir passé du temps à me faire chier avec la gestion des fenêtres [:tinostar]  
 
https://rehost.diberie.com/Picture/Get/f/95765


Très pratique dans Word aussi :D

n°3427712
kmara2
Posté le 01-11-2022 à 20:44:23  profilanswer
 

Aardpeer a écrit :


Je viens de tester et ca fonctionne...
https://rehost.diberie.com/Picture/Get/r/94091
(le TCD à gauche a le filtre global activé, à droite non, les deux sont filtrés en ligne par top 5)
(les valeurs sont pas les mêmes c'est normal :o pour éviter ca il faut d'abord filtrer les lignes puis enlever les 0 au filtre global)


 
 
Pas eu le temps de me replonger dans le pb, j'en profite ce soir pour regarder et en effet ça fonctionne. Merci  :jap:


---------------
Dr. Van Helsing: The superstition of yesterday can become the scientific reality of today
n°3427714
Dave2003
Posté le 02-11-2022 à 00:15:34  profilanswer
 

Bonjour les experts  :hello:  
 
J'ai besoin de votre aide pour un truc dont je suis sûr que la solution est toute conne :
J'ai plusieurs fichiers (xlsx - mais à la base c'est du Json reconverti) où à l'intérieur j'ai des 100aines de liens hypertexte (qui renvoient vers des photos stockés sur un Cloud AWS).
Sauf qu'Excel ne les voit pas comme des liens justement... seulement comme du texte.
Mais si je clique 2 fois sur l'une des cellules, alors celle-ci devient bien un lien hypetexte "cliquable".
Sauf que je ne me vois pas faire ça manuellement sur chaque cellule  :pt1cable: !!!
Existe t-il une solution à mon problème ?
Merci par avance pour vos réponses  :jap:  

n°3427716
arnuche
Posté le 02-11-2022 à 08:22:25  profilanswer
 

Faisable avec du code VBA ;
https://fr.extendoffice.com/documen [...] rlink.html
On peut sans doute virer la 2è ligne et changer le nom de la 6è (xTitleId).


Message édité par arnuche le 02-11-2022 à 08:24:47
n°3428418
Hegemonie
Posté le 21-11-2022 à 13:18:04  profilanswer
 

J'ai deux questions sur lesquelles je m'arrache les cheveux.
Contexte : un collègue me demande de faire une "concaténation" de deux extractions excel en me basant sur une valeur commune. En gros, j'ai des éléments à venir chercher sur chaque tableau si le numéro d'identification est le même (ligne par ligne).

 

Pour cela, j'ai fait une macro avec deux boucles imbriquées, qui parcourt ligne à ligne les deux onglets avec les valeurs à comparer. Si correspondant, je remplis la ligne d'un "array" que je garde en mémoire.

 

Jusqu'à présent, je copie ce tableau tel quel dans un nouvel onglet.

 

Questions

 

1) J'ai l'impression que les deux colonnes sont dans des formats différents : l'une est au format texte, l'autre au format nombre. J'aimerais mettre les deux au format texte automatiquement.

 

2) Comment est ce que je peux faire pour n'avoir que les lignes non nulles dans le tableau final?

 

Le code :

 
Code :
  1. Sub Import()
  2. Application.ScreenUpdating = False
  3. '-----------------------LECTURE
  4. Dim i As Integer 'compteur i
  5. Dim j As Integer 'compteur j
  6. Dim n As Integer 'compteur n
  7. Dim k As Integer 'compteur k
  8. Dim m As Integer 'compteur m
  9. Dim D(2000, 15) As String 'tabl
  10. Dim DS(2000, 15) As String 'tabl
  11. Sheets("ARGOS" ).Select 'déclarer l'onglet ARGOS comme étant actif
  12. kd = WorksheetFunction.CountA(Range("A:A" )) + 2
  13. Sheets("eFEP" ).Select 'déclarer l'onglet eFEP comme étant actif
  14. kds = WorksheetFunction.CountA(Range("A:A" )) + 2
  15. 'reset du tableau
  16. For i = 1 To kd
  17.     For j = 0 To 14
  18.         D(i, j) = ""
  19.         DS(i, j) = ""
  20.     Next j
  21. Next i
  22. 'Remplissage du tableau "provisoire"
  23. Sheets("RES" ).Select 'déclarer l'onglet RES comme étant actif
  24. For i = 2 To kd 'boucle pour parcourir tous les éléments ARGOS
  25.     For j = 2 To kds 'boucle parcourir tous les éléments eFEP
  26.         If Worksheets("ARGOS" ).Range("A" & i).Value = Worksheets("eFEP" ).Range("GG" & j).Value Then 'comparaison des valeurs du programme de surveillance entre Argos et eFEP
  27.             'Argos
  28.             DS(i, 0) = Worksheets("ARGOS" ).Range("E" & i) ' Entreprise
  29.             DS(i, 1) = Worksheets("ARGOS" ).Range("F" & i) ' N° Commande ou PS
  30.             DS(i, 2) = Worksheets("ARGOS" ).Range("I" & i) ' Projet
  31.             DS(i, 3) = Worksheets("ARGOS" ).Range("B" & i) ' activité
  32.             DS(i, 4) = Worksheets("ARGOS" ).Range("C" & i) ' CSI
  33.             DS(i, 5) = Worksheets("ARGOS" ).Range("G" & i) ' LDP
  34.             DS(i, 6) = Worksheets("ARGOS" ).Range("A" & i) ' Programme de surveillance
  35.             DS(i, 7) = Worksheets("ARGOS" ).Range("L" & i) ' Avancement PS
  36.             DS(i, 8) = Worksheets("ARGOS" ).Range("N" & i) ' NC
  37.             DS(i, 9) = Worksheets("ARGOS" ).Range("O" & i) ' C
  38.             DS(i, 10) = Worksheets("ARGOS" ).Range("P" & i) ' BP
  39.             DS(i, 11) = Worksheets("ARGOS" ).Range("Q" & i) ' taux d'observation inopiné
  40.             'eFEP
  41.             DS(i, 12) = Worksheets("eFEP" ).Range("G" & j) 'Référence eFEP
  42.             DS(i, 13) = Worksheets("eFEP" ).Range("J" & j) 'Etat de la FEP
  43.             DS(i, 14) = Worksheets("eFEP" ).Range("FH" & j) 'Date de changement de la FEP
  44.         End If
  45.     Next j
  46. Next i
  47. 'Remplissage du tableau d'écriture
  48. For i = 0 To kd
  49.     If DS(i, 0) <> "" Then
  50.         For j = 0 To 14
  51.             D(i, j) = DS(i, j)
  52.             Next j
  53.     End If
  54. Next i
  55.        
  56. k = len(
  57.    
  58. '__________________ECRITURE
  59.  
  60. Range("B3:P153" ).ClearContents 'Effacer le tableau
  61. For n = 2 To kd 'Commencer ligne 3
  62.     If D(n, 6) = "" Then
  63.        GoTo End1
  64.     Else
  65.         For m = 0 To 14 'commencer colonne B
  66.             Range("A1" ).Offset(n, m + 1) = D(n, m) '
  67.         Next m
  68.     End If
  69. End1:
  70. Next n
  71. Application.ScreenUpdating = True
  72. End Sub

 

merci :jap:

Message cité 1 fois
Message édité par Hegemonie le 21-11-2022 à 13:18:52
n°3428520
polionamen
Hop
Posté le 24-11-2022 à 15:46:42  profilanswer
 

Bonjour,  
 
Pas capable d'aider les copains avant.  
 
J'ai une nouvelle requête.  
 
J'ai plusieurs onglets avec un tableau au format similaire.  
Je veux rassembler le contenu des tableaux de ces onglets sur un nouvel onglet dans un grand tableau.  
 
J'ai les mêmes colonnes partout.  
onglet A :  
Opération - Valeur
A1  - 100
A2  - 150  
 
Onglet B
Opération - Valeur
B1  - 200
B2  - 350  
 
Je veux Onglet Consol
Opération - Valeur
A1  - 100
A2  - 150  
B1  - 200
B2  - 350  
 
Il me suffit alors de presser dans Données "Actualiser les données" et tout arrive ensemble.  
 
Je ne veux pas faire de copier / coller ni de Recherchev / index match car je vais ajouter et retrancher des lignes dans le futur.  

n°3428531
arnuche
Posté le 24-11-2022 à 21:58:40  profilanswer
 

Donc si plus tard tu vires la ligne A2, tu veux que ton tableau récap donne ceci ;
A1  - 100
B1  - 200
B2  - 350
 
ou ceci ?
A1  - 100
A3  - x
B1  - 200
B2  - 350
 
Cela dit, je ne vois pas comment faire ce tableau récap sans faire de copier/coller (avec liaison pour la mise à jour).

n°3428532
polionamen
Hop
Posté le 24-11-2022 à 22:04:42  profilanswer
 

Le 2e oui

n°3428538
Lagwiyann
Posté le 25-11-2022 à 08:49:42  profilanswer
 

arnuche :
Tu peux utiliser les requêtes.
Tes deux tables sont bien des "tableaux" (avec un nom ?)

 

Tu sélectionnes ton premier tableau > tu vas dans Données > A partir de Tableau ou d'une plage > ça ouvre le module requête > tu cliques sur Fermer et charger
Ca va te créer une feuille avec une copie de ton premier tableau
Tu fais pareil avec le deuxième, tu auras une deuxième feuille avec ton deuxième tableau

 

Tu créé une nouvelle feuille, tu vas dans Données > Obtenir des données > Combiner des requêtes > Ajouter
Tu sélectionnes toutes tes tables > OK
Ca ouvre l'éditeur de requête (tu peux modifier le nom de la requête par "Consol", ça nommera ta nouvelle feuille et ta nouvelle table fusionnée "Consol" )
Fermer et charger

 

Tu obtiens une nouvelle feuille avec ta table fusionnée
Dans le volet à droite "Requête et connexions", pour les premières requêtes créées, tu fais un clique droit > charger dans > Ne créer que la connexion (ça permettra de ne plus générer de nouvelles feuilles pour les tables de base)
Tu peux supprimer les feuilles créées (sauf la dernière avec la table fusionnée)

 

NB : A la création des premières requêtes, tu peux aussi faire "Ferme et charger dans " > Ne créer que la connexion pour éviter la création des pages et la manip' pour les supprimer ensuite.
Perso je préfère le faire en deux fois, ça me permet de vérifier que les tables créées soient mises en forme comme je le souhaite avant de passer à l'étape "Ajouter"

 

En cliquant sur actualiser, ta table finale se mettra à jour des valeurs (en ajout ou en suppression)

 


Message cité 1 fois
Message édité par Lagwiyann le 25-11-2022 à 09:05:37
n°3428539
Lagwiyann
Posté le 25-11-2022 à 09:03:04  profilanswer
 

Hegemonie a écrit :

J'ai deux questions sur lesquelles je m'arrache les cheveux.
Contexte : un collègue me demande de faire une "concaténation" de deux extractions excel en me basant sur une valeur commune. En gros, j'ai des éléments à venir chercher sur chaque tableau si le numéro d'identification est le même (ligne par ligne).

 

Pour cela, j'ai fait une macro avec deux boucles imbriquées, qui parcourt ligne à ligne les deux onglets avec les valeurs à comparer. Si correspondant, je remplis la ligne d'un "array" que je garde en mémoire.

 

Jusqu'à présent, je copie ce tableau tel quel dans un nouvel onglet.

 

Questions

 

1) J'ai l'impression que les deux colonnes sont dans des formats différents : l'une est au format texte, l'autre au format nombre. J'aimerais mettre les deux au format texte automatiquement.

 

2) Comment est ce que je peux faire pour n'avoir que les lignes non nulles dans le tableau final?

 

Le code :

 

[spoiler][/spoiler]

 

merci :jap:

 

Vous allez me trouver relou avec mes histoires de requêtes mais je pense que tu peux aussi passer par là pour régler ton problème.
Même procédé que pour arnuche pour créer les 2 requêtes qui correspondent à tes deux tables.
A noter que dès cette étape, tu peux "forcer" le format d'une colonne en texte / nombre ou autre

 

Ensuite tu vas dans Obtenir les données > Combiner les requêtes > Fusionner
Tu sélectionnes ta colonne "commune" sur tes deux tables
Tu sélectionnes le type de jointure que tu souhaites, tu cliques sur OK
Dans l'éditeur de requête tu peux ensuite mettre en forme comme tu le souhaites, notamment supprimer les lignes nulles via les filtres)

 



Message édité par Lagwiyann le 25-11-2022 à 09:06:15
n°3428541
arnuche
Posté le 25-11-2022 à 09:27:14  profilanswer
 

Lagwiyann a écrit :

arnuche :
Tu peux utiliser les requêtes.
Tes deux tables sont bien des "tableaux" (avec un nom ?)


C'était une question de polionamen, pas de moi  ;)  
Cela dit je ne vois pas comment ta solution permet d'intercaler 2 lignes de chaque tableau et pas une.
 
J'ai pensé à une autre méthode mais n'ai pas encore réussi à la faire fonctionner ; en gros ça consiste à copier/coller avec liaison dans le tableau récapitulatif les 2 premières lignes du premier tableau, puis en-dessous les 2 premières lignes du deuxième tableau. On a donc 4 lignes (en plus de l'en-tête).
Ensuite ça se corse, à partir de la 5ème ligne il faut trouver le moyen d'utiliser la référence utilisée dans la première ligne (en l'occurrence Feuil1!A2) et y ajouter 2. Et donc sur la 7ème ligne on aurait une référence à la 3ème qui contient =Feuil2!A2 (notez le changement de feuille).
 
J'ai essayé avec DECALER, CONCATENER, STXT, FORMULETEXTE, INDIRECT ... mais rien ne fonctionne comme il faudrait :o  
Sachant que STXT(FORMULETEXTE(A2);2;9) renvoie Feuil1!A2, j'avais pensé à ça ;

Code :
  1. =DECALER(STXT(FORMULETEXTE(A2);2;9);2;0)


On peut même remplacer 9 par 11 s'il y a un grand nombre de lignes.
L'idée étant que ça revienne au même que ;

Code :
  1. =DECALER(Feuil1!A2;2;0)


Mais ça ne va pas, sans doute parce que la référence est transformée en texte et il ne voit plus le lien avec la cellule.
Si je tape directement cette dernière formule alors ça va, sauf qu'il reste sur la Feuil1 quand on incrémente alors que le but est d'intercaler les tableaux par groupe de 2 lignes, d'où l'idée d'utiliser le contenu des cellules liées au-dessus.

Message cité 1 fois
Message édité par arnuche le 25-11-2022 à 09:32:50
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  95  96  97  ..  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)