IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Compilation d'un planning en utilisant Tbl


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Compilation d'un planning en utilisant Tbl
    Bonjour,

    J'ai un planning (format du planning imposé), je cherche à récupérer toutes les données et les mettre en ligne, j'ai fait (merci JB pour tes tutos) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub ColonnesArray3()
      Set f = Sheets("Planning")
      Tbl1 = f.Range("A3:BA" & f.[A65000].End(xlUp).Row).Value
     Dim Tbl2
      For l = 0 To 5
     
      ReDim Tbl2(1 To UBound(Tbl1), 1 To 53)
      j = 0
      For Each k In Array(1, 2, 3, 4, 5, l + 6, l + 7, l + 8)
          j = j + 1
          For i = 1 To UBound(Tbl1): Tbl2(i, j) = Tbl1(i, k):  Next i
       Next k
       Sheets("Feuil3").Cells(1, 3).Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2
     
       Stop
     
       Next l
    End Sub
    mais la boucle L ne fonctionne pas.... : comme il faut récupérer chaque demi journée, je pensais que la boucle résoudrait le problème, mais....marche pas et je ne sais pas pourquoi.....cela fonctionne bien pour la première demi journée, mais pas pour les autres...

    Je mets en PJ, exceptionnellement au premier post, pour une compréhension plus rapide....La feuille "Compil" est le résultat recherché...mon résultat obtenu en Feuil3,

    En vous remerciant par avance,
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en ligne 14, tu pars toujours de la cellule C1 pour injecter tes tableaux, ils s'écraseraient pas les uns après les autres sur la même plage ?


    avec ça, ça va mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Cells(Rows.Count, 3).End(xlUp)(2).Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci joe.levrai,

    Effectivement cela rajoute la deuxième demi journée, mais le résultat n'est toujours pas là : il s'occupe des 2 demi journées du lundi, mais ne va pas sur mardi, mercredi, etc....(j'avais mis un stop dans mes essais, c'est pourquoi je restais sur C1, pour voir les changements....

    Merci pour ton aide,

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bon, j'ai regardé 5 minutes ton fichier

    regarde ça, il te reste à gérer tes deux premières colonnes maintenant (Date et 1/2 journées)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub ColonnesArray3()
    Dim Tbl1, Tbl2, f As Worksheet
     
    Sheets("Feuil3").Cells.Clear
    Set f = Sheets("Planning")
    Tbl1 = f.Range("A4:BA" & f.[A65000].End(xlUp).Row).Value
     
        For l = 0 To 5
            ReDim Tbl2(1 To UBound(Tbl1), 1 To 53)
            j = 0
            For Each k In Array(1, 2, 3, 4 + 5 * l, 5 + 5 * l, 5 * l + 6, 5 * l + 7, 5 * l + 8)
                j = j + 1
                For i = 1 To UBound(Tbl1)
                    Tbl2(i, j) = Tbl1(i, k)
                Next i
            Next k
     
            Sheets("Feuil3").Cells(Rows.Count, 3).End(xlUp)(2).Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2
        Next l
    End Sub
    j'ai fais deux modif' majeures (les autres c'est accessoires) :

    - le champs "4" de ton array doit également être décalé en fonction de l'indice l
    - tu additionnais l'indice l ... or il faut additionner l'indice 5*l car tu disposes de 5 colonnes par demie-journée ... forcément ça mettait le boxon dans ton résultat
    ==> au lieu d'utiliser l*5, tu peux simplement changer les bornes de ta boucle et faire un step 5

    tu n'as plus qu'à remettre ce code au propre (fait en 5 minutes je le répète) et gérer des deux premières colonnes ... c'est assez easy par rapport à ce que tu avais déjà fait

    Ps : attention, j'aspire la plage en partant de A4 et pas A3 ! Je t'ai réservé la première ligne de la feuille "résultat" vide afin que tu puisse écrire les titres (au début ou à la fin de la procédure, à ta convenance)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Super Merci joe.levrai, le code fonctionne parfaitement....

    C'est bon, j'ai trouvé....pas très orthodoxe, j'aurai préféré un truc style Tbl, mais je ne domine vraiment pas trop/assez....si une bonne âme charitable pouvait éclairer mes zones d'ombres....Merci
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    Sub ColonnesArray3()
    Dim Tbl1, Tbl2, f As Worksheet
     
    Sheets("Feuil3").Cells.Clear
     
    With Sheets("Planning")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
    End With
     
     
     
    Set f = Sheets("Planning")
    Tbl1 = f.Range("A4:BA" & f.[A65000].End(xlUp).Row).Value
     
        For l = 0 To 9
            ReDim Tbl2(1 To UBound(Tbl1), 1 To 100)
            j = 0
            For Each k In Array(1, 2, 3, 4 + 5 * l, 5 + 5 * l, 5 * l + 6, 5 * l + 7, 5 * l + 8)
                j = j + 1
                For i = 1 To UBound(Tbl1)
                    Tbl2(i, j) = Tbl1(i, k)
                Next i
            Next k
     
            Sheets("Feuil3").Cells(Rows.Count, 3).End(xlUp)(2).Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2
        Next l
     
     
     
     For j = 4 To 53 Step 10
     For i = 1 To (derlig - 3) * 2
      a = a + 1
    Sheets("Feuil3").Cells(a + 1, 1) = Sheets("Planning").Cells(1, j)
    Next
    Next
    a = 0
     
    For j = 4 To 53 Step 5
     For i = 1 To derlig - 3
      a = a + 1
    Sheets("Feuil3").Cells(a + 1, 2) = Sheets("Planning").Cells(2, j)
    Next
     
     
    Next
     
     
    End Sub
    On avait aussi fait une erreur : pour L, il y a 10 demi journées et pas 5... mais c'est moi qui t'ai induit dans l'erreur...

    j'ai aussi modifié suivant tes conseils :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set f = Sheets("Planning")
    Tbl1 = f.Range("A4:BA" & f.[A65000].End(xlUp).Row).Value
     
        For l = 0 To 45 Step 5
            ReDim Tbl2(1 To UBound(Tbl1), 1 To 100)
            j = 0
            For Each k In Array(1, 2, 3, 4 + l, 5 + l, l + 6, l + 7, l + 8)
                j = j + 1
                For i = 1 To UBound(Tbl1)
                    Tbl2(i, j) = Tbl1(i, k)
    Aurais tu, par hasard un lien vers des explications et/ou tutos sur les Tbl....j'aimerai bien me renforcer, pour l'instant j'utilise les tutos de JB qui sont supers, mais je ne comprends pas tout....(enfin, j'ai aussi la comprenette un peu longue.....

    Merci pour ton aide,
    Eric

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2TUP] Plan d'utilisation de 2TUP
    Par bellatun dans le forum xUP
    Réponses: 4
    Dernier message: 26/11/2018, 18h29
  2. Probleme avec PHPmyvisit (compilation php avec GD2 pour utiliser Artichow)
    Par chaoued dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 24/07/2009, 11h28
  3. Compilation minimale / Filtrage des classes utilisées
    Par atchoumix dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 08/06/2009, 09h09
  4. Réponses: 1
    Dernier message: 26/05/2008, 18h41
  5. Impossible d'avoir un arrière plan en utilisant CSS
    Par Tartenpion dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/06/2005, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo