Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 vba trop longue

Quicksland

XLDnaute Occasionnel
Bonsoir a tous ,

Jai un soucis de vba trop longue ...

Serait il possible de la raccourcir de façon que le fichier "1 EFFECTIF PN JUILLET" fonctionne correctement sans supprimer des données de lecture et d'écriture

Le fichier "3 JUILLET ASTUCE SIRENE" est un des tableaux qui alimente "1 EFFECTIF PN JUILLET"

Merci d'avance pour votre aide
 

Pièces jointes

  • 1 EFFECTIF PN JUILLET.xlsm
    272.6 KB · Affichages: 13
  • 3 JUILLET ASTUCE SIRENE.xlsm
    95.5 KB · Affichages: 8

TooFatBoy

XLDnaute Barbatruc
Coucou

Jai un soucis de vba trop longue ...
VBA, ça veut dire "Visual Basic for Application". C'est le nom d'un langage de programmation pour écrire des macros sous Excel ou Word.
Du coup, comment ce langage de programmation peut-il être "trop longue" ???

Si tu parles de ta macro Mise_a_jour_onglets, saches que déjà tu peux la couper en morceaux et appeler chacun des morceaux les uns après les autres.


Les tableaux de juillet me disent quelque chose...

ps : pas le temps de regarder tes classeur, je pars virtuellement aux USA et j'en reviens dans deux heures...
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Juste en passant :

Le code VBA est limité à 64 Ko ==> Voir ici et les 2 seules solutions sont :

1ere solution : Code VBA mal conçu et à revoir totalement ou en partie

2eme solution : Voir la partie est en jaune pour l'explication



De plus transmettre un fichier avec un MDP c'est pas cool
Perso je me pose toujours des questions pourquoi police 48 et réduire à 40 %



Bonne chance
 

TooFatBoy

XLDnaute Barbatruc
Je n'ai regardé que le fichier "3 JUILLET...", mais déjà là tu as une macro qui est "simplifiable".
La simplification que je te propose est toute simple et tu vas immédiatement comprendre le principe que tu pourras probablement appliquer à ton autre fichier.

Ta macro actuelle est celle-ci :
VB:
Private Sub CommandButton1_Click()
'     LUNDI
    Range( _
        "E11:E13,E15:E19,E21:E25,E27:E31,E33:E34" _
        ).Select
        Selection.ClearContents
 
'     MARDI
        
    Range( _
        "I11:I13,I15:I19,I21:I25,I27:I31,I33:I34" _
        ).Select
        Selection.ClearContents
        
'     MERCREDI
        
   Range( _
        "M11:M13,M15:M19,M21:M25,M27:M31,M33:M34" _
        ).Select
        Selection.ClearContents
        
'     JEUDI
        
   Range( _
        "Q11:Q13,Q15:Q19,Q21:Q25,Q27:Q31,Q33:Q34" _
        ).Select
        Selection.ClearContents
        
'     VENDREDI
        
    Range( _
        "U11:U13,U15:U19,U21:U25,U27:U31,U33:U34" _
        ).Select
        Selection.ClearContents
        
    Range( _
         "E11").Select
        
End Sub

Je te propose de la remplacer par celle-ci :
VB:
Private Sub CommandButton1_Click()
' Supprime les données de lundi à vendredi
Dim MaPlage As Range
Dim i As Byte

    Set MaPlage = Range("E11:E13,E15:E19,E21:E25,E27:E31,E33:E34")
    For i = 0 To 4
        MaPlage.Offset(0, 4 * i).ClearContents
    Next i

End Sub
 

TooFatBoy

XLDnaute Barbatruc
Perso je me pose toujours des questions pourquoi police 48 et réduire à 40 %
Pourtant j'ai déjà abordé le problème en juillet 2022, et j'avais même totalement refait un de ses fichiers pour le rendre lisible correctement.



De plus transmettre un fichier avec un MDP c'est pas cool
Moi je m'en fous, j'ai le MdP...
 
Dernière édition:

Quicksland

XLDnaute Occasionnel
Bonjour @TooFatBoy ,

Euh ouais tu as raison

Ah ! c'est intéressant de pouvoir couper en deux la macro
Mais comment je doit faire exactement ?

Normal que les tableaux te disent quelque chose car c'est toi qui a modifier mes tableaux de base pour qu'il soit plus lisible

Pour le mot de passe , 3 personnes le possèdent donc sans doute qu'une personne a modifier le format de la police sans me le dire !

Merci pour avoir simplifier la macro pour le fichier 3 JUILLET ...

Pour le mot de passe , je suis désolé de ne pas l'avoir mis dans mon post de départ

En tout cas merci pour ton aide si précieuse a chaque intervention de ta part
 
Dernière édition:

Quicksland

XLDnaute Occasionnel
Bonjour @Phil69970 ,

Merci pour ton intervention

Désolé de ne pas avoir mis le mot de passe dans mon post de départ

D'ailleurs trois personnes possèdent le mot de passe , donc sans doute que quelqu'un a modifier la police sans me le dire !

De plus je n'ouvre plus les tableaux donc difficile de m'en apercevoir ... (5 tableaux par centres sur 16 centres )

Le fichier qui m'intéresse le plus c'est le fichier " 1 EFFECTIF JUILLET " car il compile tout les tableaux de chaque centres .

Je ne savait pas que l'on pouvait couper la macro en deux ou plus ...

Merci pour toutes les infos et merci pour ton aide
 

TooFatBoy

XLDnaute Barbatruc
As-tu compris et essayé d'adapter la méthode que j'ai utilisée pour "3 JUILLET..." ?

J'ai constaté que les plages à vider étaient en fait toutes les mêmes mais décalée de 4 colonnes pour chaque jour, donc j'ai utilisé une seule plage et j'ai mis une boucle qui décale de 4 colonnes de plus à chaque tour.
 

Quicksland

XLDnaute Occasionnel

Bonjour @TooFatBoy

Pour être honnête avec toi je n'ai pas encore essayé ton code car le miens fonctionne
et puis le code qui me pose problème est dans l'autre fichier.
De plus même si J'ai compris le fonctionnement je ne vois pas comment je pourrais adapter ton code pour que mon fichier fonctionne correctement.

Merci pour ton aide


m
 

TooFatBoy

XLDnaute Barbatruc
J'ai commencé à regarder le fichier "1...".

Mais d'abord, peux-tu me dire pourquoi il y a des macros dans le fichier "3...", que ce soit dans "ThisWorkbook" ou dans "Mise_A_Jour" ???

Ensuite, dans chacune de tes feuilles du fichier "1...", est-ce normal que le bouton n'efface que les trois premières semaines, et n'efface pas les deux dernières ?
 
Dernière édition:

Quicksland

XLDnaute Occasionnel
le but de la "mise a jour" est de via un troisième fichier de récupérer la "date" le nom du "pic nic " et si jour "férié" ou si les "vacances" ne sont pas encore commencer ( c'est a dire que les cellules passe en rouge comme tu peux le constater dans le premier tableau (JUILLET 1)) et ceci sur tous les tableaux et tous les centres (60 fichiers)
"ThisWorkbook" est lié a la mise a jour

Pour le non effacement des deux dernières semaines c'est parce que le fichier est en construction et c'est un oubli de ma part
 

TooFatBoy

XLDnaute Barbatruc
Pour le non effacement des deux dernières semaines c'est parce que le fichier est en construction et c'est un oubli de ma part
On va déjà corriger ça en rationnalisant un peu ton fichier "3...".

Dans chacune des 5 feuilles du mois (donc pas dans la feuille "Liste"), tu mets uniquement cette macro qui appelle la macro d'effacement des données de la semaine :
VB:
Private Sub CommandButton1_Click()
    EffacerDonneesSemaine
End Sub

Et dans un module standard tu mets cette macro pour l'effacement des données de la semaine :
VB:
Sub EffacerDonneesSemaine()
' Supprime les données de la semaine
Dim Jour As Byte, i As Byte

    Application.ScreenUpdating = False

    For Jour = 0 To 4
        For i = 0 To 3
            ActiveSheet.Range("E11:E13,E15:E16").Offset(6 * i, 4 * Jour).ClearContents
        Next i
    Next Jour

End Sub



Je ne comprends pas.

Les macros de mise à jour sont les mêmes dans "1..." et dans "3...." alors que les feuilles n'ont pas la même structure.
Pour moi, la macro de mise à jour dans le fichier "3..." ne peut pas fonctionner et n'a donc rien à faire là.
Me trompé-je ?
 

Pièces jointes

  • 3 JUILLET ASTUCE SIRENE.xlsm
    92.6 KB · Affichages: 3

TooFatBoy

XLDnaute Barbatruc
Pour ton fichier "1..." même principe, pour effacer les données d'une feuille, que pour le fichier "3...".

Dans chacune des feuilles (sauf "TOTAL SEMAINE"), tu mets uniquement cette macro qui appelle la macro d'effacement des données de la feuille :
VB:
Private Sub CommandButton1_Click()
    EffacerDonneesFeuille
End Sub

Et dans un module standard tu mets cette macro pour l'effacement des données de la feuille :
VB:
Sub EffacerDonneesFeuille()
'
Dim Semaine As Byte, i As Byte

    Application.ScreenUpdating = False

    For Semaine = 0 To 4
        For i = 0 To 3
            ActiveSheet.Range("F14:J16").Offset(4 * i, 6 * Semaine).ClearContents
        Next i
    Next Semaine

End Sub
 

Pièces jointes

  • 1 EFFECTIF PN JUILLET.xlsm
    272.6 KB · Affichages: 4

Quicksland

XLDnaute Occasionnel
Pas tout a fait les mêmes et cela fonctionne
Dans le fichier 1...je récupère que la date et dans le fichier 3 je récupère la date le pic nic ect ...
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…