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
Rechercher des sujets similaires à "dispatcher variable tableau"