Dispatcher bd variable tableau
Bonjour,
BONNE ANNÉE 2018
Au fil de mes recherches je suis tombé sur le site de garbe.joel. J'ai suivi avec intérêt son tuto sur les variables Tableaux. Son exemple, propose de dispatcher des données d'une bd, en créant des feuilles par mois et par année. Sauf que, plusieurs feuilles ne contenant aucune données sont crées. Comment pourrait-on faire pour ne créer que les feuilles en se basant sur la colonne G (date), le nom des feuilles seraient "mois-année").
Liens du site et fichier:
http://garbe.joel.free.fr/Macro_et_VBA_Excel.htm#Automatisation25
http://garbe.joel.free.fr/Exos/Exos_Type_Excel/Outils/VariableTableau.xlsm
En vous remerciant par avance.
Bonjour
Tu devrais joindre un fichier avec sur une feuille ta bdd et sur une autre, un exemple de ce que tu veux en extraire.
Bye !
Bonjour Gmb,
Avant tout merci d'avoir lu et répondu à mon post.
En fait, je ne maîtrise pas bien (pour ne pas dire pas du tout) les tableaux vba.
J'ai suivi le tuto de garbe.joel, ça m'a permis de me familiariser un peu avec ce concept (tableau).
Je me suis aperçu que certaines feuilles étaient vides. Je n'en vois pas l’intérêt de créer des feuilles vides.
J'ai voulu adapter le code pour ne créer que les feuilles contenant des données.
Je travaille avec le même fichier. J'aurais pu ajouter une macro pour supprimer les feuilles vides à partir de la 2ème ligne.
Mais mon objectif est d'apprendre à manipuler les tableaux. Je voudrais donc apprendre comment créer et compléter les différentes feuilles dont le nom serait le mois et l'année, et y mettre les données du même mois et même année de l'onglet.
Sur le fichier joint des feuilles de: janvier-2010 à avril-2010 et de mai-2013 à dec-2013 ne comportent que la ligne de titre des entêtes.
Merci beaucoup, j'espère que mes explications sont claires.
J'ai commencé ainsi à coder mais j'avoue que je patauge depuis hier soir.
Option Explicit
Dim oSheet As Worksheet
Sub supprimer_feuilles()
'debut boucle pour supprimer feuilles
For Each oSheet In Sheets
If VBA.LCase(oSheet.Name) <> "export" Then
Application.DisplayAlerts = False
oSheet.Delete
Application.DisplayAlerts = True
End If
Next
'fin boucle pour supprimer feuilles
End Sub
Sub VentilerBase()
Dim dAn As Object, dMois As Object, base(), i As Long, cle
'repartition des données sur la feuille------------------------------------------------
'1-Commande;2-Code client;3-Employé;4-Destinataire;5-Ville livraison;6-Pays livraison
'7-Date commande;8-Produits;9-Type;10-Montant;11-Salaire;12-Coéficient
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
supprimer_feuilles
Set oSheet = ThisWorkbook.Worksheets("export")
Set dAn = CreateObject("Scripting.Dictionary")
Set dMois = CreateObject("Scripting.Dictionary")
base = oSheet.Range("A1").CurrentRegion.Value2
For i = 2 To UBound(base, 1)
'If Not Ddate.exists(base(i, 7)) Then Ddate(base(i, 7)) = ""
If Not dAn.exists(Year(base(i, 7))) Then dAn(Year(base(i, 7))) = ""
If Not dMois.exists(dMois(base(i, 7))) Then dMois(Month(base(i, 7))) = ""
Next i
Tban = dAn.keys
TbMois = dMois.keys
Stop
'MsgBox Ddate.Count
'MsgBox Ddate.keys()(0)
For Each cle In dAn.keys
'Debug.Print cle
MsgBox Year(cle) & " - " & Month(cle)
'Sheets.Add , Sheets(Sheets.Count)
'ActiveSheet.Name = cle 'sMois(cle) & "-" & Year(cle)
'Stop
Next cle
'Stop
End Sub
Bonjour,
Une piste :
Sub VentilerBase()
Dim dAn As Object
Dim Dico As Object
Dim oShedMois As Worksheet
Dim base()
Dim T
Dim I As Long
Dim Cle
Set oShedMois = ThisWorkbook.Worksheets("export")
Set dAn = CreateObject("Scripting.Dictionary")
Set Dico = CreateObject("Scripting.Dictionary")
base = oSheet.Range("A1").CurrentRegion.Value2
For I = 2 To UBound(base, 1)
'dédoublonne les mois
If Dico.exists(Year(base(I, 7)) & Month(base(I, 7))) = False Then
Dico.Add Year(base(I, 7)) & Month(base(I, 7)), ""
'concatène les numéros des mois de l'année
dAn(Year(base(I, 7))) = dAn(Year(base(I, 7))) & Month(base(I, 7)) & ","
End If
Next
'récupère les années et les mois
For Each Cle In dAn.Keys
T = Split(dAn(Cle), ",")
Debug.Print "Année : "; Cle
For I = 0 To UBound(T) - 1: Debug.Print " mois : "; MonthName(T(I)): Next I
Next Cle
End Sub