Passage de "SheetActivate" à bouton d'execution

Bonjour à tous,

il y à quelques jours sur ce forum l'un de vous a réussi à résoudre un de mes problème.

Cependant après tentative de compréhension et de modification du code (afin de l'addapter et l'appliquer à un cas plus complexe) je me rends compte que les chose ne sont pas claires pour moi.

Je m'explique: le code proposé commence par "Private Sub Workbook_SheetActivate(ByVal Sh As Object)" il se lance donc (si j'ai bien compris) lors de l'activation d'une feuille.

Le problème est que si je modifie le code et fait une erreur le code ne marche pas (normal). Mais si je recorrige le code comme à l'origine il ne se lance plus: mes feuilles excel son figée..

J'aurai donc voulu pouvoir transformer ce code "Private Sub Workbook_SheetActivate(ByVal Sh As Object)" en "Sub xxx ()" afin de pouvoir associer cette macro à un bouton et donc pouvoir le relancer à ma guise.

Etant totalement novice en VBA peut etre que ma requête peu paraître absurde. Je suis preneur de toutes remarques...

Je vous joins le fichier dont je parle:

6essai-vba3.xlsm (29.00 Ko)

En vous remerciant!

Baptiste

Bonjour,

D'abord tu n'as pas pris le bon code car tu ne m'as pas suivi !! non, je déconne ... ah tiens, je pensais y avoir répondu mais je ne trouve plus le cas.

Ensuite, si ton code se bloque suite à une erreur, réactive la détection des événements, à défaut d'avoir inclus une gestion des erreurs dans le code.

Sub reactiver()
        Application.EnableEvents = True
        Application.ScreenUpdating = True
End Sub

Bonjour

Il faudra mettre un bouton sur chaque feuille dans ce cas pour exécuter le code ou prévoir un raccourci clavier par exemple

Votre fichier en retour dans lequel vous devez utiliser les touches CTRL + e pour exécuter le code

3essai-vba4.xlsm (28.75 Ko)

Cordialement

Bonjour à vous et merci beaucoup!

Une fois de plus, je pensais avoir compris! mais finalement il semblerai que non...

J'avais légèrement modifier le code afin d'ajouter un paramétré de tri supplémentaire en fonction de l'année ce qui fonctionnais super bien sur le fichier de base!

En essayant de l'appliquer sur le fichier final (bien plus gros) un bug apparaît et je n'arrive pas a comprendre pourquoi! De plus, appliqué à ce nouveau tableau le code ne "rajoute" plus des lignes dans les tableaux cible (afin d'avoir le total toujours en bas) mais recouvre le total lorsque nous ajoutons des données! message "les cellules actuelles comportent des donnée, voulez vous les remplacer"

Un autre problème que je rencontre est le fait que lorsque la macro plante, mon tableau saisie (onglet "courrier") se masque complètement (ou partiellement) et je ne peu plus le consulter...

Si quelqu'un pense avoir des explications je suis preneur

Un des bugs semble apparaitre lorsque le tri ne recense pas de valeurs.

Je ne peut malheureusement pas joindre le fichier final (trop lourd)...

Je joins par contre le fichier test léger (illustration du problème lorsqu'il n'y à pas de valeur en indiquant 2020 dans l'onglet "G21")

Sur ce fichier test le probleme de "cellules comportant des donnée" n'apparrait pas...

1essai-vba-ok.xlsm (27.50 Ko)

Encore une fois merci à vous, j'essai d’alléger le fichier final pour pouvoir le poster!

Me revoila avec le tableau allégé!

Ici on peu constater toutes les sortes de bugg ^^

Bonjour,

j'ai ajouté ceci

On Error GoTo sortie

et

sortie:
        Application.EnableEvents = True
        Application.ScreenUpdating = True

et d'autres bricoles qui plantaient comme T et [saisie]

et je pense qu'il serait préférable de le réactiver

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Merci beaucoup,

J'ai également corrigé quelques détails (certaines cellules fusionnées dans certaines feuilles, les nom de feuilles qui ne correspondent pas).

Par contre ce problème de données qui se copient en dehors du tableau persiste... Les tableaux (T) ne s'adaptent pas à la quantité de données issues du tri de (saisie).. (exemple Revoul) Je ne comprend pas car cela marchait très bien dans le test simplifié...

En tout cas merci de votre aide! Je reste preneur si vous savez solutionner ce problème de tableau!

Par contre ce problème de données qui se copient en dehors du tableau persiste... Les tableaux (T) ne s'adaptent pas à la quantité de données issues du tri de (saisie).. (exemple Revoul)

cela fonctionne très bien !

capture d ecran 102

dans l'onglet de recopie, quelle est l'importance d'avoir un tableau (même si j'apprécie beaucoup de travailler avec eux, mais j'ai un soucis quand j'emploi le filtre avancé)

En tout cas merci de votre aide! Je reste preneur si vous savez solutionner ce problème de tableau!

je sais résoudre mais avec une macro qui ne fait pas 60 lignes, mais 5 fois mois ... avec un filtre avancé programmé.

Bonjour à tous,

Désolé pour la réponse tardive! mon emploi du temps ne m'a plus permis de me pencher sur le problème!

Mais me revoila avec tout un tas de soucis!

Le problème de données qui se copient en dehors du tableau persiste... Les tableaux (T) ne s'adaptent pas à la quantité de données issues du tri de (saisie).. Par exemple , essayez d'ajouter un ligne "revoul" (bien penser à mettre une date en 2019) au tableau saisie. Lorsque que l'on active la macro sur la feuille Revoul, la nouvelle valeur se copie en dehors du tableau (sur la ligne de total la première fois, puis sur les lignes suivantes après avec le message "cette cellule contient des données. Voulez vous les remplacer?".

Mon intérêt d'avoir un tableau sur les feuilles copies est de pouvoir éventuellement faire un tri particulier par la suite (par entreprise par exemple). Je ne veux pas ajouter ce tri à la macro car il doit pouvoir etre fait au cas par cas sur les feuilles par la personne qui va utiliser le tableau (pour trouver le devis d'une entreprise sur un établissement par exemple).

La feuille saisie correspond à notre feuille de données brutes. Les feuilles "établissement/date" correspondent à nos sorties que nous imprimons et sur lesquelles la mise en page est importante (afficher les totaux par exemple en bas du tableau, ce que la macro est sensée faire...).

Pour résumer: problème de données qui se copient dans sur la feuille "en vrac" et non dans le tableau cible.

Je reste à votre disposition pour tous renseignements complémentaires (avec plus de réactivité cette fois)!

Merci!!

Bonjour,

Pour avancer, j'ai juste un problème de correspondance entre les en-têtes des feuilles copie et de la feuille saisie.

N° BDC >> ?

Date envoie facture >> ?

Avencement >> en mettant Avancement, cela colle !

Pour résumer: problème de données qui se copient dans sur la feuille "en vrac" et non dans le tableau cible.

Il est tout à fait possible de faire un filtre avancé et copier dans un tableau ajusté à la réponse (ce qui contredit ma réponse précédente). La macro se réduit à quelques lignes

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Courrier" Or Sh.Name = "Listes" Or Left(Sh.Name, 5) = "Feuil" Then Exit Sub

    ' filtre avancé
    Sheets("Courrier").ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sh.Range("M1").CurrentRegion, CopyToRange:=Sh.Range("A4").CurrentRegion.Resize(1), Unique:=False

    ' redimensionnement du tableau
    On Error Resume Next ' si pas de réponse
    Sh.ListObjects(1).Resize Sh.Range("A4").CurrentRegion ' réponse en tableau
End Sub

Il me reste juste à y mettre les totaux si cette version convient ! mais là j'ai un autre problème ... sur quelle zone ? dans le dernier fichier il semble y avoir des valeurs sous une date et là je suis perdu ! Le filtre avancé fonctionne parfaitement à condition que les en-têtes de colonnes correspondent pile-poil.

Merci beaucoup Steelson! Cela semble fonctionner à merveille et est bien moins compliqué!

Je m'excuse pour la mise en page des tableaux et le nom des entêtes, à travailler vite, on travaille mal... Mais c'est bien des entêtes correspondantes comme tu a fait que nous sommes sensés avoir.

Pour ce qui est des totaux, il faudrait avoir ceux de la colonne "engagé" (qui remplace "date facture" dans les tableaux cibles) donc seulement des totaux de comptabilité.

Idem dans le tableau courrier.

Je te remercie une fois de plus!

Baptiste

Je ne suis pas sûr de savoir mettre le total en bas du tableau ... je l'ai mis en en-tête avec les autres renseignements.

Je te prépare une version v2 encore plus simple !

version v2

Private Sub Worksheet_Activate()
    charger True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Union(Range("C2"), Range("G2"))) Is Nothing Then Exit Sub
    charger True
End Sub

Private Sub charger(ok As Boolean)
    Sheets("Courrier").ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=ActiveSheet.Range("M1").CurrentRegion, CopyToRange:=ActiveSheet.Range("A4").CurrentRegion.Resize(1), Unique:=False
    On Error Resume Next ' si pas de réponse
    ActiveSheet.ListObjects(1).Resize ActiveSheet.Range("A4").CurrentRegion ' réponse en tableau
End Sub

Évite la multiplication des onglets !

Encore une fois, merci beaucoup.

Je vais travailler sur cette dernière version. Je pense que pour ma direction, la multiplication des onglets est incontournable (ils aiment bien avoir leur onglet pour chaque, et ont un macro qui imprime les feuilles "copies" automatiquement.

En quoi la multiplication des onglets pose problème selon toi?

Bonne journée et encore merci!

Baptiste

En quoi la multiplication des onglets pose problème selon toi?

C'est juste que

  • à chaque nouvelle année il faut les recréer
  • en cas de nouvel établissement idem
mais quoi qu'il en soit, tant que tu n'auras pas donné un autre nom que FeuilXXX, tu pourras travailler et créer ces nouvelles feuilles.

Je pense que pour ma direction, la multiplication des onglets est incontournable (ils aiment bien avoir leur onglet pour chaque

Ta remarque est criante de vérité !!

mais on peut aller plus loin !! et dans ce cas cela peut se justifier ... éclater l'onglet principal en autant de fichiers que de cas/direction !

Rechercher des sujets similaires à "passage sheetactivate bouton execution"