Créer un tableau de dates variable

  • Initiateur de la discussion Initiateur de la discussion Yoth
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Yoth

XLDnaute Nouveau
Bonjour,

J'ai problème à résoudre sur Excel 2007, sur lequel je me casse un peu les dents !
J'essaye de créer un outil pour gérer des stocks de locations de materiel. Pour ce faire, j'ai un nombre total de materiel (onglet Ressources), et des commandes de clients avec un certain nombre commandé ainsi qu'une une date de début et de fin de commande (onglet Etat des locations). Je souhaiterai faire un tableau dont les colonnes sont égales à tous les jours entre la plus petite date de début et la plus grande date de fin, (qui sera donc de taille variable si je rajoute ou supprime un client) et avec dans les cases l'état de mon stock (chaque jour) qui correspond à mes ressources moins les commandes en locations à la date t... je ne sais pas si c'est claire ?!
Je ne sais pas comment arriver à faire ce tableau variable !!
Si quelqu'un aurait une idée, ce serait génial !!
Ci-joint un exemple simplifié des données...
Merci d'avance!
 

Pièces jointes

Re : Créer un tableau de dates variable

Bonjour

Le début du travail en pièce jointe (la 1ère possibilité avec des formules matricielles à valider avec ctrl+maj+entrer, la deuxième avec SOMMEPROD). Attention, j'ai l'impression qu'il y a parfois des décalages de colonne, mais le système que tu as adopté (tableau) m'empêche d'utiliser des $ pour figer tout cela.

@ plus
 

Pièces jointes

Dernière édition:
Re : Créer un tableau de dates variable

Bonjour Yoth, Cisco 🙂

Une proposition par macro :
VB:
Sub test()
Dim Tabl, c As Range, d As Range, e As Range, dmin As Long, dmax As Long, t As Long

With Sheets("Etat des locations")
  Sheets("Détail").Activate
  Sheets("Détail").Range("3:1000").ClearContents
  Set c = .Range("C5")
  dmin = WorksheetFunction.Min(.Range("H5:H" & .Range("H65536").End(xlUp).Row))
  dmax = WorksheetFunction.Max(.Range("I5:I" & .Range("I65536").End(xlUp).Row))
  Set d = Sheets("Détail").Range("B3")
  d.Offset(-2).Resize(2, Sheets("ressources").Range("B4:B" & Sheets("ressources").Range("B65536").End(xlUp).Row).Count) = Application.Transpose(Sheets("ressources").Range("B4:C" & Sheets("ressources").Range("B65536").End(xlUp).Row).Value)
  d.Offset(, -1) = dmin
  d.Offset(, -1).NumberFormat = "dd/mm/yy"
  d.Offset(, -1).AutoFill d.Offset(, -1).Resize(dmax - dmin + 1)
  l = d.Offset(65500, -1).End(xlUp).Row - 2
  m = d.Offset(-2, 250).End(xlToLeft).Column - 1
  For t = 1 To m
    d.Offset(0, t - 1).Resize(l) = Cells(2, d.Offset(0, t - 1).Column)
  Next
  Do While .Cells(c.Row, 2) <> ""
    For t = 1 To l
        If Int(.Cells(c.Row, 8)) = Int(d.Offset(t - 1, -1)) Then
          Do While c.Column < 8
            If c <> "" Then
              For Each e In d.Offset(t - 1, c.Column - 3).Resize(.Cells(c.Row, 9) - .Cells(c.Row, 8) + 1)
                e = e - c
              Next e
            End If
            Set c = c(1, 2)
          Loop
          Set c = .Cells(c.Row + 1, 3)
        End If
    Next t
  Loop
End With
End Sub

cf. PJ
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
93
Réponses
12
Affichages
159
Réponses
1
Affichages
237
Réponses
24
Affichages
333
Retour