Besoin aide VBA

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Comme le rajout de lignes (une fois le rapport édité, je le transmets aux personnes concernées qui peuvent rajouter des lignes) suscite des erreurs (elles ne seront pas prise en compte dans les sous totaux), je préfère avoir une liste avec toutes les données que je retraite ensuite sous forme de graphique avec des sommeprod etc.
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Si. Des lignes insérées seraient forcément prise en compte par les totaux puisque ils ne se réfèrent qu'à des ligne de rubriques, étant de la forme =SOUS.TOTAL(9;DECALER(CetteCelluleDeRubrique;+1;0):
DECALER(CelluleRubriqueSuivante;-1;0))
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Je pense que je me suis mal exprimé : la ligne sera ajoutée directement dans le rapport, pas dans la base ! Si je rajoute une ligne à la fin du rapport (onglet budget) le montant de celle ci n'est pas pris en comtpe dans les totaux (ce qui parait logique). Là aussi c'est une de mes grandes problématiques (j'en avais parlé quelque page avant avec l'ajout de ligne par usf).

Comme pas de solution, le plus simple est d'avoir une liste simple des résultats et de les retraiter ensuite.
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

C'est pourquoi j'ai ajouté une bordure à la fin. Il ne faut de toute façon jamais écrire sur la ligne qui suit une rubrique, tout spécialement celle après la dernière puisque ce n'est plus une rubrique. Toujours insérer une ligne devant. On devrait d'ailleurs y inscrire en rouge petits caractères et italique "Ne rien inscrire dans cette ligne. Si besoin, en insérer une nouvelle devant."
Parce que si on se contente d'écrire dedans, bien sûr elle n'est pas prise en compte puisque le total se réfère à DECALER(CetteLigne; -1;0). Tandis que si on la chasse une ligne plus bas en insérant une nouvelle ligne, celle ci sera incluse.
Pourquoi croyez vous que je ne me sois amusé à faire des formules SOUS.TOTAL si compliquées avec des DECALER si ce n'est pas parce que j'avais pensé à ça ?
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Ok donc si j'ai bien compris je m'y prends mal et je dois insérer la ligne non pas en dernier, mais en avant dernier ? Je teste, merci.

Une question : comment je fais pour exporter mon résultat pour qu'il soit exploitable par d'autres personnes ? Sachant que je ne transmettrai que l'onglet budget donc plus aucun lien ne pourra se faire avec la base ?
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

La Private Sub TotalJusqÀLrDispM1 installe une formule SUBTOTAL qui se réfère à la prochaine ligne disponible mais en faisant seulement, grâce au DECALER, le calcul jusqu'à celle qui la précède. On peut tout à fait insérer une ligne devant celle qui suit la dernière. Le tout c'est de ne pas utiliser celle qui suit la dernière sous prétexte qu'elle est vide, puisque la formule de total s'y réfèrent, bien qu'elle ne fasse pas le calcul jusqu'à elle.
Les feuilles de Rapport n'ont pas de lien avec la base.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour,

lorsque je copie l'onglet dans une autre feuille, j'ai un message d'erreur par rapport à

Option Explicit

Private Sub Worksheet_Activate()
SélectionColonnes Me
UfBudget.Show
End Sub

Private Sub Worksheet_Deactivate()
Unload UfBudget
End Sub

Si c'était aussi possible que la colonne Société et Département et nom de centre de cout soient rempli pour chaque ordre

Merci d'avance
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour.
Cherchez les 4 dans tous le projet et remplacez les par des 1.
Mais au coup par coup, hein ! Parce qu'il y en a aussi dans les modules de classe, ceux là il ne faut pas les toucher !
Essayez un tout petit peu de comprendre avant chaque remplacement si ça peut avoir un rapport avec un numéro de colonne de départ !
Et s'il y a une instruction "CrMax = 3:" devant un Redim, enlevez la au passage.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Ben si, vous n'avez rien compris.
Vous faites Ctrl+H, Rechercher : 4, Remplacer par : 1, Dans "Projet en cours", cochez "Mot entier", bouton Suivant.
À chaque fois que c'est en relation avec le numéro de colonne de départ vous cliquez sur le bouton Remplacer, sinon Suivant.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour,

je reviens vous voir car malgré mes efforts, impossible de modifier ce que je souhaite :
_j'ai essayé de jouer avec crmax et chercher les 4 pour les remplacer par 1 mais rien. J'ai seulement réussi a remplir la colonne "nom centres de couts",
_j'ai rajouté des arguùments dans la combobox, je les pense bien implémentées mais j'aurai aimé que vous vérifiiez,
_toujours le problème d'erreru quand je souhaite copier la feuille budget dans un autre classeur (car ce fichier va bouger)
_depuis que j'ai modifié, j'ai un "#ref" qui est apparu dans le total général

Merci à vous
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour.
Premier module sur lequel je tombe : SélectColonnes, les 4 n'ont pas été changé en 1 de sorte qu'il ne traite toujours qu'à partir de la colonne 4. Il en reste aussi un a changer dans l'UfBudget et dans l'Worksheet_SelectionChange de FBdD. Quoique là c'est tout le dernier Or qui doit être supprimer plutôt puisque Target.Column ne peut pas être < 1. Et dans le même esprit CrMax = 3 devrait être supprimé dans SélectionColonnes, puisqu'il est d'office à 0 alors. Vous voulez bien en somme que les 3 1ères colonnes soient en tout point comme les autres et plus des titres de rubriques.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

bonjour,

effectivement je souhaiterai que les 3 premieres colonnes soient aussi remplies à l'instar des autres colonnes.
Je souhaite aussi pouvoir copier ma feuille dans un autre classeur sans qu'il n'y ai de message d'erreur.
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour
Avez vous vérifié qu'il effectue bien toutes les opérations, aussi bien la sélection des colonnes à reproduire lors de l'analyse de la ligne 1 de Base en cours que par la suite, à partir de la colonne 1 et plus de la 4 ?

P.S. J'ai commis une erreur en disant que CrMax = 3 devrait être supprimé. C'est une variable Public, alors pour qu'elle ne reste pas initialisée à sa valeur précédente il faut CrMax = 0 à la place. Vous voyez bien comment ça marche: à chaque fois qu'on trouve quelque chose (une croix) on l'incrémente et on ajoute le numéro de colonne (Ce) de la boucle dans la tableau TCe.
Ce tableau TCe est ensuite utilisé dans les 1ères instructions de Private Sub BtnAjouter_Click pour obtenir pour chaque colonne résultante Cr la colonne d'entrée correspontante Ce. c'est la ligne Lr = Lr + 1: For Cr = 1 To CrMax: Ce = TCe(Cr): Rés(Lr, Cr) = Te(Le, Ce): Next Cr, N
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour,

je ne comprends pas vraiment : je souhaiterai que dans les 3 premières colonnes, il y ait les occurences. A savoir que les colonnes se remplissent à coup de EE, AD pour société, ainsi de suite.

Le code que vous me donnez à la fin ce celui que je dois coller à la place de l'ancien ?
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Je vous ai dit quelles procédures ça touchait. Il y a toujours des instructions comportant des "4 To" au lieu de "1 To"
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour,

faute de plus d'explication
Le code que vous me donnez à la fin ce celui que je dois coller à la place de l'ancien ?
J'ai essayé de me débrouiller et evidemment ça ne fonctionne pas.
Sachant qu'en plus les colonnes de résultats sont décalées.
J'ai donc recréé un onglet avec le résultat attendu.

J'ai quand même l'impression que cete macro, bien qu'automatique, soit beaucoup trop compliquée pour le problème donné sachant qu'elle ne devait pas être difficile à modifier (oui, mais par qui ? Son éditeur ? je n'en doute pas !)

A vous relire
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour.
Il est clair que c'est à vous d'adapter vos macro comme si c'était vous qui les aviez écrites. Moi je ne vous donne que des modules de service permettant une programmation aisée, et une technique de programmation essentielle, à savoir ne jamais travailler directement sur les cellules (beaucoup trop long), mais toujours mais le moins souvent possible sur des plages entières via des tableaux en mémoire chargés d'un coup, en entrée, et préalablement élaborés en sortie.
Là, dans ce que vous avez joint, dans le module SélectColonnes, procédure SélectionColonnes, il manque une instruction CrMax = 0 au début pour recommencer la construction du tableau TCe. C'est un peu de ma faute parce qu'il y avait bien CrMax = 3 et je vous avais dit de la supprimer. Or c'est une variable Public, elle n'est donc pas remise à 0 automatiquement.
Dans l'UfBudget, procédure BtnAjouter_Click(), phase Constitution du tableau le For Cr part toujours de 4 au lieu de 1.
Dans la Worksheet_SelectionChange de FBdD (Base en cours) il y a toujours ce Or Target.Column < 4 qui n'a plus lieu d'être puisqu'on doit maintenant pouvoir sélectionner aussi les 3 ères colonne à reproduire ou non. Et plus loin, il faut Me.[A1:IV1] au lieu de Me.[D1:IV1]
Je vais procéder à ces modifiations de mon coté et tester. Je vous tiens au courant s'il y a d'autres choses qui ne vont pas.

Vu : FBudget.[A:C].ColumnWidth = 5 à supprimer. Ces colonnes n'étant plus des colonnes de rubriques, elle doivent rester soumises au FBudget.Columns.AutoFit au début de cette ligne.

Voilà, maitenant en sélectionnant pour mettre des × les 3 1ères colonnes ligne 1 de Base en cours, puis en sélectionnant dans l'Uf Société : EE , on obtient sensiblement le même résultat que dans votre feuille Résultat attendu, sauf que tout est décalé d'une ligne vers le bas puisque vous avez précisé Public Const LTitre = 2 'Numéro de ligne où commence le rapport dans l'onglet
Le commentaire est faut, d'ailleurs, c'est plutot 'Numéro de ligne des intitulés du rapport.
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Je souhaite juste que vous compreniez que je suis vraiment nul en macro et que je donne tout mon possible pour comprendre. Je pense juste que, pour débuter, ce n'est pas la macro la plus facile.
Du coup je suis bcp plus long à faire les liens entre les différentes feuilles, modules, etc.

Ci joint le fichier modifié
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Voilà, ça me semble bon, il ne resta plus qu’à appliquer les derniers points signalés en édit poste précédent à 14h 36
Non, vous vous sous estimez: vous étiez vraiment nul en macro
 

Discussions similaires


Haut Bas