> Tous les forums > Forum Bureautique
 Ecrire un Code VBA
Ajouter un message à la discussion
Pages : 1 [2] ... Fin
Page 2 sur 2 [Fin]
Debrief
 Posté le 24/01/2019 à 13:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En fait si l'"export" de la sélection de la feuille MH en feuille Référence telle que programmée actuellement vous convient, on en reste là.

Si vous souhaitez des ajouts / modifications, il faut les spécifier.

D.

Gallagh
 Posté le 24/01/2019 à 15:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Comme je l'ai indiqué plus haut, il y a certainement plus simple que de faire du code VBA pour transférer des données d'une feuille à une autre, ou même de faire un TCD si on n'est pas à l'aise avec cette possibilité.
Il suffit d'appliquer quelques formules adaptées, et de filtrer le tableau.

Ci joint un classeur basé uniquement sur la feuille MH.
Les données sont insérées à partir de la ligne 15 (c'est à dire que j'ai décalé l'ensemble du tableau MH vers la ligne 15 pour les besoins de la cause).
De cette façon, j'ai pu mettre au dessus les formules de calcul nécessaires.
Tel quel, le tableau est filtré sur FRANCOIS et CENTRE LECLERCFIGEAC.
Vous pouvez constater que les formules indiquent bien les valeurs de somme attendues.

Malgré tout, pour faire plaisir à Debrief , j'ai juste inséré un peu de VBA pour une fonction personnalisée qui indique en clair quelles valeurs de filtres sont mises en oeuvre. Mais c'est juste du fun, ca n'est pas utile au fonctionnement du tableau.

Voila ..... Après , on peut mettre en forme comme on le souhaite. Il suffit de garder les formules au dessus du tableau pour qu'elles ne soient pas chamboulées lors des tris

le lien : https://www.cjoint.com/c/IAyoOMzIXoL



Modifié par Gallagh le 24/01/2019 15:51
Debrief
 Posté le 24/01/2019 à 17:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Et oui, bien joué Gallagh, des SOUS.TOTAL suffisent en effet à sommer les colonnes filtrées.

Je te remercie d'avoir fait un geste VBA pour ma satisfaction, je te revaudrai ça

Le tout est maintenant que MisterA puisse avec son Business Object exporter à la bonne ligne. Si ce n'est pas possible, ce qui est probable, une petite macro VBA pour insérer tes lignes et formules qui peuvent être stockées sur un feuille dédiée ou générées par programme.

Edit: Au final, importer les formules dans la feuille MH ou exporter la sélection de MH dans Références, c'est 2 méthodes assez symétriques. L'avantage d'importer les formules est que l'opération n'a lieu qu'une seule fois, alors que l'export de la sélection est nécessaire à chaque fois. L'autre avantage, si cette entête est dans une feuille dédiée, c'est de pouvoir la modifier simplement sans avoir à intervenir dans du code.



Modifié par Debrief le 24/01/2019 17:32
Gallagh
 Posté le 24/01/2019 à 17:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief a écrit :

Le tout est maintenant que MisterA puisse avec son Business Object exporter à la bonne ligne.

bjr,

Il importe son tableau, il le sélectionne, il le glisse à la ligne 15. Copier coller des formules au dessus et c'est tout.

A la limite, il faudra adapter le champ de calcul. Il me semble qu'en mettant le tableau en tableau dynamique, on récupère automatiquement les noms d'entêtes de colonnes. (là, je n'ai pas Excel sous la main pour le vérifier). Dans ce cas , on remplace la zone de calcul "A15:Axxx" par le nom du champ, c'est à dire "CA N" par exemple ou "Qté N". Et ca marchera quelque soit le nombre de lignes du tableau.

Pas de besoin de VBA, désolé ....



Modifié par Gallagh le 24/01/2019 18:18
Debrief
 Posté le 24/01/2019 à 21:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ah oui évidemment, tout peut se faire à la mano. Insérer des lignes, copier des formules.

C'est plus agréable avec un automatisme, de mon point de vue bien sûr. Surtout si ça ne coûte que quelques lignes de code.

J'ai réuni les 2 méthodes dans ce fichier -> https://www.cjoint.com/c/IAyu4MkyFez

Cordialement,
D.



Modifié par Debrief le 24/01/2019 21:58
Gallagh
 Posté le 24/01/2019 à 22:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief a écrit :

Ah oui évidemment, tout peut se faire à la mano. Insérer des lignes, copier des formules

En fait, je pense qu'il est préférable de faire le contraire. Une feuille toute prête avec la mise en forme et les formules. Et on colle les données en deux clics en dessous.

Je l'ai fait des années, à partir de données copiées depuis un (préhistorique) AS400, et sans jamais avoir le moindre soucis dans le traitement. Je n'ai pas ressenti le besoin d'automatiser la chose.

Mais, je comprendrais parfaitement qu'on veuille faire autrement. Je regarderais avec plaisir ton fichier.

Gallagh
 Posté le 25/01/2019 à 08:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief a écrit :

Ah oui évidemment, tout peut se faire à la mano. Insérer des lignes, copier des formules.

C'est plus agréable avec un automatisme, de mon point de vue bien sûr. Surtout si ça ne coûte que quelques lignes de code.

J'ai réuni les 2 méthodes dans ce fichier -> https://www.cjoint.com/c/IAyu4MkyFez

Cordialement,
D.

Salut,

Je pense que MisterA devrait être tout à fait satisfait avec la dernière version que tu as proposée.

Au plaisir !

MisterA
 Posté le 25/01/2019 à 09:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Merci à vous deux les mecs.

C'est super, je vais utiliser le tout dernier fichier envoyé par Debrief.

Publicité
Debrief
 Posté le 25/01/2019 à 10:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Petit bug (pour l'ajustement automatique avec / sans entête) et ne pas avoir de référence circulaire.

Gallagh
 Posté le 25/01/2019 à 16:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief ton chiffre 1048576 vient d'où ? un grand chiffre au hasard, histoire d'avoir de la marge ?

Debrief
 Posté le 25/01/2019 à 17:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Gallah,

1048576 c'est le Max de lignes en Exel 2007+ (Excel specifications and limits). Pour Excel 97-2003 c'est 65536 lignes et 256 colonnes. Ce qui fait que ces formules ne marcheraient pas dans une ancienne version sauf à les adapter.

Je suis revenu sur le fichier de MisterA pour un petit détail qui m'a contrarié:

Quand il y a une ou plusieurs sélections actives sur MH, il n'est pas possible d'insérer des lignes copiées, en l'occurrence celles de MHEntête. En tous cas je n'y suis pas arrivé.
Donc dans un premier temps j'ai supprimé Les filtres actifs sur MH pour pouvoir faire cette insertion (raison du libellé bouton Annule la sélection).

J'ai donc amélioré les routines développées pour les filtres et ajouté une fonction de restore des filtres actifs utilisée pour les rétablir après l'insertion.
Donc dans ce nouveau fichier, on peut insérer l'entête MH de la feuille MHEntête dans a feuille MH sans perdre les filtres actifs !

-> https://www.cjoint.com/c/IAzq2g1dOuL

D.

Edit: Et puis y avait un bug dans les anciennes routines de filtres, donc il faut utiliser ce dernier fichier.



Modifié par Debrief le 26/01/2019 08:23
Debrief
 Posté le 26/01/2019 à 10:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

@Gallah,

Pour répondre plus complètement à ta question sur la limite, je n'ai pas trouvé dans Excel un moyen d'intégrer dans un FORMULE le nombre maximum de lignes, ce qui est bien dommage.

Ainsi pour que les formules de SOUS.TOTAL (ou autres) fonctionnent dans toutes les versions d'Excel, sachant qu'on ne peut utiliser la colonne (ex. "$A:$A") sous peine de référence circulaire, il faut bidouiller.

1.a) Soit avec VBA dans la cadre d'un projet écrire une fonction:
Function MAXROWS()
MAXROWS = ActiveSheet.Cells.Rows.Count
End Function

1.b) Soit sans VBA utiliser NB.VIDE($Z:$Z)+NBVAL($Z:$Z) (le choix de la colonne, ici $Z, n'a pas d'importance mais ne pas utiliser la colonne où est placée la formule sous peine de référence circulaire)

2) Y faire référence avec INDIRECT:
Avec VBA: $A2:$A$1048576 devient $A2:INDIRECT("$A$" & MAXROWS())
Sans VBA: $A2:$A$1048576 devient $A2:INDIRECT("$A$" & NB.VIDE($Z:$Z)+NBVAL($Z:$Z))
(Mais attention, la partie de l'INDIRECT entre quottes ("$A$") ne suivra pas en cas d'insertion / suppression de colonne)

3) Y faire référence avec DECALER:
Avec VBA: $A2:$A$1048576 devient DECALER($A:$A;(2 -1);0;MAXROWS()-(2 -1))
Sans VBA: $A2:$A$1048576 devient DECALER($A:$A;(2 -1);0;NB.VIDE($Z:$Z)+NBVAL($Z:$Z)-(2 -1))
(Solution la meillleure. J'ai mis (2 - 1) au lieu de 1 pour faire plus clairement apparaître la référence au 2 de $A2)

Cordialement,
D.



Modifié par Debrief le 26/01/2019 10:30
Gallagh
 Posté le 26/01/2019 à 13:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief,

Merci, mais effectivement, je n'ai pas tilté sur le moment. Je travaille rarement avec 1 048 576 lignes .... j'avis oublié cette limite ... qui clairement n'en est pas vraiment une.

Merci ausi pour le petit complément, mais comme je disais au dessus .... 5 ou 6 000 lignes me suffisent largement en général.

Pages : 1 [2] ... Fin
Page 2 sur 2 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Aucun sujet pertinent lié trouvé
 > Tous les forums > Forum Bureautique