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

Autres macros Excel

Cheminotbelgiantrain

XLDnaute Nouveau
Bonjour tout le monde , tout d'abord je vous remercie pour ce forum pour résoudre différents problèmes confrontés lors de création des macros en Excel . je viens de m'inscrire aujourd'hui car je voulais comprendre beaucoup mieux ce programme pour trouver des solutions avec vos soutiens bien sûr à des questions sur les macros.
ma question d'aujourd'hui est la suivante:
je cherche à créer automatiquement un onglet à partir d'une première feuille et lui donner le nom avec la date du jour sous la forme jj-mm-aaaa.
le contenu de la feuille jj-mm-aaaa doit être sauvegardé et recopié dans la feuille jj+1-mm-aaaa.
ce travail est journalier !!
d'avance merci pour votre aide !
 

ChTi160

XLDnaute Barbatruc
Re
Je viens de Lire et tu dis :
"je n'arrive pas à avoir le menu déroulant des lundis et quand j'ai changé la date au B2 ,D3 et D4 il affiche ce qui est en haut."
tu dis : "et quand j'ai changé la date au B2 ,D3 et D4"
Tu n'as pas a changer les dates , tu as Juste à sélectionner la semaine dans le Combobox.
les dates se mettent automatiquement .
Oui il y a des macros Lol
Tu Clicques droit sur le Nom de la feuille "BDD" et tu selectionnes : "Visualiser le Code" et tu verras "
VB:
Private Sub CBx_Semaines_Change()
With Worksheets("BDD")
    ' Année concernée
     Anne_Select = Year(Date) ' Remplacez par l'année souhaitée
    ' Définir les dates
    Premier_Jour_Annee = DateSerial(Anne_Select, 1, 1) ' Premier jour de l'année cible
     Dernier_Jour_Annee = DateSerial(Anne_Select, 12, 31) ' Dernier jour de l'année cible
   
      With .CBx_Semaines
                      Lundi_Semaine = .List(.ListIndex, 1) 'on récupére le Lundi de la semaine
        Lundi_Semaine_Suivante = .List(.ListIndex, 2) 'on récupére le Lundi de la semaine suivante
                       Num_Semaine = .List(.ListIndex, 3) 'on récupére le Numéro de la semaine
      End With
   
      .Range("B2") = Date 'On colle la date du Jour
      .Range("C3") = Premier_Jour_Annee 'On colle la date du premier jour de l'année
      .Range("C4") = Dernier_Jour_Annee 'On colle la date du dernier jour de l'année
 
   
      .Range("D3") = CDate(Lundi_Semaine) 'On colle la date du premier de la semaine concernée
      .Range("D3").NumberFormat = "dddd dd mmmm yyyy" ' On formate la date
   
      .Range("D4") = CDate(Lundi_Semaine_Suivante)
      .Range("D4").NumberFormat = "dddd dd mmmm yyyy" ' On formate la date
   
      .Range("I4") = "Semaine - " & Format(Num_Semaine, "00") ' On colle et on formate le Numéro de la semaine
      .Range("B2").Select
End With
'*********************************************************
                 Filtrage Lundi_Semaine, Lundi_Semaine_Suivante 'On passe les deux dates en argument de la Procédure
'*********************************************************
End Sub
Ensuite de cette procédure qui traite la selection d'une ligne dans le Combobox "CBx_Semaines" Tu peux accéder au Code de la procédure "Filtrage" il te faut cliquer droit sur le Nom de cette Procédure puis de choisir "Définition" tu aura ainsi le Code de cette Procédure soit qui se trouve dans le Module nommé "Mdl_Filtrage" :
Code:
Option Explicit
Public Function Filtrage(Lundi_Semaine As Date, Lundi_Semaine_Suivante As Date) As Boolean
Dim LigneFiltre As Range
Application.ScreenUpdating = False
    On Error GoTo ErrorHandler
    ' Définir la feuille et la plage des données dynamiquement
    Set Ws_Cible = Worksheets("BDD")
    With Ws_Cible
    Set PlageFiltre = .Range("B6:N" & .Cells(.Rows.Count, "B").End(xlUp).Row) ' Trouve la dernière ligne automatiquement
    ' Désactiver les filtres existants
    If .AutoFilterMode Then .AutoFilterMode = False
    ' Appliquer le filtre
    With PlageFiltre
            .AutoFilter Field:=1, _
                    Criteria1:=">=" & Format(Lundi_Semaine, "mm/dd/yyyy"), _
                    Operator:=xlAnd, _
                    Criteria2:="<=" & Format(Lundi_Semaine_Suivante, "mm/dd/yyyy")
    End With
    ' Vérifier si des lignes sont visibles après filtrage
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
        Filtrage = True
    Else
        MsgBox "Aucune ligne ne correspond aux critères de filtre.", vbInformation
        Filtrage = False
    End If
End With
Application.ScreenUpdating = True
Exit Function
ErrorHandler:
    ' Gestion des erreurs
    MsgBox "Erreur : " & Err.Description, vbExclamation
    Filtrage = False
End Function
Tu as aussi du Code dans le Module "Mdl_AlimenterComboBoxSemaines"
Code:
Option Explicit
    Public x As Byte
    Public Indx As Byte
    Public Ws_Cible As Worksheet
    Public CBx As Object
    Public PlageFiltre As Range
    Public Anne_Select As Integer
    Public Premier_Jour_Annee As Date
    Public Dernier_Jour_Annee As Date
    Public Lundi_Semaine As Date
    Public Lundi_Semaine_Suivante As Date
    Public Num_Semaine As Byte
    Public Detail_Semaine As String
    Public Premier_Lundi As Date
    Public Semaine_Actuelle As Byte
    Public Str_Semaine$
 

Sub AlimenterComboBoxSemaines(Anne_Select As Integer)
    ' Référence à la feuille contenant le ComboBox
    Set Ws_Cible = ThisWorkbook.Worksheets("BDD")
                x = 0
    ' Référence au ComboBox sur la feuille
    Set CBx = Ws_Cible.OLEObjects("CBx_Semaines ").Object ' Assurez-vous que le nom est correct
    'Semaine actuelle
        Semaine_Actuelle = WorksheetFunction.IsoWeekNum(Date) ' Numéro de semaine ISO
    ' Définir les dates
    Premier_Jour_Annee = DateSerial(Anne_Select, 1, 1) ' Premier jour de l'année cible
     Dernier_Jour_Annee = DateSerial(Anne_Select, 12, 31) ' Dernier jour de l'année cible
 
    ' Trouver le premier lundi de l'année
    Premier_Lundi = Premier_Jour_Annee - Weekday(Premier_Jour_Annee, vbMonday) + 1 ' Trouver le premier lundi de janvier

    ' Inclure la semaine 52 de l'année précédente si elle contient les 1er et 2 janvier
    If Weekday(Premier_Jour_Annee, vbMonday) <> 1 Then
        ' La semaine 52 de l'année précédente commence le lundi 25 décembre 2023
        Lundi_Semaine = DateSerial(Anne_Select - 1, 12, 25) ' Dernier lundi de l'année précédente
    Else
        ' Si la semaine 1 commence normalement
        Lundi_Semaine = Premier_Lundi
    End If
    With CBx
    ' Nettoyer le contenu existant du ComboBox
              .Clear
    ' Définir le nombre de colonnes du ComboBox
              .ColumnCount = 4 ' On définit le Nombre de Colonnes
              .ColumnWidths = "1;0;0;0" ' On définit la largeur des colonnes (1 visible)
              .ListRows = 10 'On définit le Nombre de Lignes affichées
   End With
 
    ' Parcourir les semaines et remplir le ComboBox
    Do While Lundi_Semaine <= Dernier_Jour_Annee
 
        Num_Semaine = WorksheetFunction.IsoWeekNum(Lundi_Semaine) ' Numéro de semaine ISO
   If Num_Semaine = Semaine_Actuelle And Year(Lundi_Semaine) = Year(Date) Then
         Indx = x
    Str_Semaine = "S-[" & Num_Semaine & "]" 'on formate l'affichage de la semaine si semaine en cours
          Else
    Str_Semaine = "S-" & Format(Num_Semaine, "00") 'on formate l'affichage de la semaine si semaine autre
   End If
        Detail_Semaine = Application.Proper(Trim(Format(Lundi_Semaine, "dddd dd mmmm yyyy")) & " au " & _
                       Trim(Format(Lundi_Semaine + 6, "dddd dd mmmm yyyy")) & _
                       "   " & Str_Semaine) 'On définit le texte à afficher dans la première colonne du Combobox des Semaines
     
        ' Ajouter les informations dans le ComboBox
      With CBx 'Avec La Combobox des Seamines
              .AddItem Detail_Semaine 'On colle le Texte des Limites de chaque semaines
              .List(.ListCount - 1, 1) = CDate(Lundi_Semaine) ' On colle le  le Lundi de la semaine
              .List(.ListCount - 1, 2) = CDate(Lundi_Semaine + 7) ' On colle le Lundi de la semaine suivante
              .List(.ListCount - 1, 3) = Num_Semaine 'On colle le numéro de la semaine considérée
        x = .ListCount 'on récupére l'index de la semaine qui est ajoutée
      End With
         
        Lundi_Semaine = Lundi_Semaine + 7 ' On Passe au Lundi de la semaine suivante
    Loop
             CBx.ListIndex = Indx 'on affiche la semaine en fonction de l'Index définit 0 ou semaine en Cours         
End Sub
j'y ai mis des commentaires à presque chaque Ligne .
tu vois et tu n'hésite pas !
Jean marie
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
je n'arrive pas à avoir le menu déroulant des lundis
Comme je l'ai dit, en B2 tu as la date d'aujourd'hui, qui est ensuite utilisée pour calculer la date du premier jour de la semaine contenant la date inscrite en B2.

Donc tu peux mettre n'importe quelle date en B2, tu auras toujours l'affichage de 8 jours commençant le lundi.



je reviens vers toi pour la modification que tu as faite à partir du fichier de notre camarade TooFatBoy est très intéressante dans le sens où tu affiche juste la feuille de la semaine en cours.
Comme expliqué, c'est déjà ce que faisait le fichier que j'avais proposé.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc

tu m'as fait rire quand tu m'as dit " j'ai simplement ...." deriere ton fichier il y a beaucoup de travail !!!! l'entête qui est figée ? comment tu as mis en grand " du lundi ..........au ......." tout ça j'aimerai bien comprendre ....

Si tu ne sais pas comment figer les volets, il va être impossible de t'expliquer le peu qu'il y a à savoir pour créer ce classeur.
 

Cheminotbelgiantrain

XLDnaute Nouveau

hello jean marie ! mille merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
en fin j'ai réussi à mettre en route ton fichier !! il est en essai et il est très bien fait chapeau !!!
je suis entrain de comprendre le programme avec les commentaires que tu as mis sur les macros.
pour le menu déroulant avec les les lundis des semaines = il va changer automatiquement pour 2025 avec la date du système ??
 

ChTi160

XLDnaute Barbatruc
Bonsoir Le Fil
Oui car il y a cette procédure dans le Thisworkbook du Classeur !
VB:
Private Sub Workbook_Open()
Application.ScreenUpdating = False
        AlimenterComboBoxSemaines Year(Date) 'On passe l'année de la date du jour en Argument de la procédure
End Sub
Donc c'est a partir de la date du Jour que le Combobox des semaines est mis a jour .
n'hésite pas si besoin!
bonne fin de Soirée
Jean marie
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Il ne comporte qu'une seule macro dont le code est :
VB:
Sub Filtrage()
'
    Sheets("BDD").Range("$B$6:$N$1470").AutoFilter Field:=1, _
            Criteria1:=">=" & Range("D3").Value2, _
            Operator:=xlAnd, _
            Criteria2:="<=" & Range("D4").Value2

End Sub

Tu vois qu'elle est super simple, puisqu'elle se contente d'utiliser le filtre du tableau contenant toute l'année.
Comme tu le vois, le filtrage se fait entre la date inscrite en D3 et la date inscrite en D4.
C'est tout.

Donc soit tu inscrits manuellement les dates de début et de fin en D3 et D4, soit tu y mets des formules qui calculeront les dates de début et de fin de la période à afficher.

Ca te permet d'afficher le nombre de jours que tu veux (un jour, une semaine, deux semaines, un mois, un trimestre, etc.).
Tu n'as donc besoin de rien de plus que cette toute petite macro.
 

Cheminotbelgiantrain

XLDnaute Nouveau
hello Papy , merci infiniment !!!!
bon dimanche et à + !!!
salut camarade ! merci infiniment !!!
un bon dimanche !!! et à +
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Un fichier perfectible , car il n'est pas évident de travailler avec des ActiveX Lol
j'ai ajouté la possibilité de Chercher une Journée .
Tu regardes et tu mes dis .Si besoin de Plus de commentaires !
n'hésite pas .
Jean marie
 

Pièces jointes

  • Test Calendrier Chti160-2.xlsm
    167.9 KB · Affichages: 2

Discussions similaires

Réponses
12
Affichages
439
Réponses
1
Affichages
244
Compte Supprimé 979
C
Réponses
2
Affichages
432
Réponses
3
Affichages
102
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…