[résolu] Manipuler les données des tableaux automatiques avec VBA

peper_eliot

XLDnaute Junior
[édit] classeur en PJ retiré. voir le dernier post pour le classeur final. Merci à JNP pour son accompagnement ;)
Bonjour a tous ;)
Depuis que je suis passé sous Excel 2010, j'apprécie de plus en plus les mises en forme auto sous forme de tableau avec les fameuses colonnes calculées automatiquement... :)

Mais j'aimerai bien savoir comment y accéder en VBA.

Jusqu'à présent, pour séléctionner une zone de saisie, je passais par
Code:
Dim Tablo ()
Tablo=Range ("A1:D" & Range("D65536").End(xlUp).Row)
qui me renvoyait par exemple une plage comprise entre A1 et D7

Mais maintenant, j'aimerai savoir s'il est possible de s'appuyer sur le mécanisme de tableau "dynamique" qui fait que, maintenant, chaque nouvelle saisie augmente la taille du tableau aussi bien sur le nombre de lignes que de colonnes.

La finalité pour moi serai de pouvoir faire référence à ce tableau nommé sans me préocuper de réviser le code si j'ajoute une colonne, voire même si j'ajoute un autre tableau en dessous de mon premier tableau ;)

Voilà, ça c'est dans un premier temps.

Pour le deuxième temps, je joins un petit fichier Excel qui comprend 3 tableaux auto avec ce que je souhaite en faire ;)

Il s'agit de la création auto d'un petit planning de passage de candidats devant un jury. Tous les jurys devaient faire 10 passages de 20 minutes. J'avais patiemment monté un beau classeur en utilisant du TCD et de la recherchev() à gogo... jusqu'au moment ou le "demandeur" m'a dit "oui, mais..." :rolleyes:
Et du coup, en raison du nombres de passages variable pour chaque groupe de jury... je me retrouve le bec dans l'eau... bien obligé de passer par VBA :(
Mais bon, prenons ça comme un challenge ;), grâce au Fofo d'XLD, je suis sûr d'y arriver ;)

D'avance merci pour vos pistes, liens ou conseils ;)
[édit] le classeur ayant été supprimé, je vous met une copie écran de celui placé sur mon dernier post
captur47.jpg
 
Dernière édition:

peper_eliot

XLDnaute Junior
Re : Manipuler les données des tableaux automatiques avec VBA

Bon, je vous donne des nouvelles de l'avancement "à taton" du projet ;)

En fait, je peut donc faire référence à un tableau automatique assez simplement...

Code:
Range("Tableau8[[#Headers],[JURY]]").Select
ici je suis directement dans mon en-tête JURY.
Mais je me touve confronté au mêmes problèmes pour copier X fois des valeurs, a savoir, repérer la première ligne vide dans le cas ou le tableau auto n'a pas encore de données, ou alors aller dans la ligne suivante vide...
Code:
For j = 1 To v_tours 'nombre de passage du jury
    Range("Tableau8[[#Headers],[JURY]]").Select
    Selection.End(xlDown).Select
    If Selection = "" Then 'c'est le cas ou le tabeau8 n'a encore rien de saisi, par défaut, j'ai une ligne vide
    ActiveSheet.Paste
    Else 'dans les autre cas, il faut bien que j'aille coller en décalé à la première cellule vide sous le tableau
    Range("Tableau8[[#Headers],[JURY]]").Select
    Selection.End(xlDown).Offset(1, 0).Select
    ActiveSheet.Paste
Et c'est long...

M'en vais tricoter ça autrement ;)
Mais je suis toujours a l'affut de vos remarques ;)
 

JNP

XLDnaute Barbatruc
Re : Manipuler les données des tableaux automatiques avec VBA

Bonjour Peper_Eliot :),
Tu part un peu dans tous les sens :rolleyes:...
Tu veux du VBA mais tu fournis du XLSX :mad:...
Tu t'attaques à VBA avec le seul mot qu'il faut rayer de ta mémoire : Select :p...
Pour ton premier tableau, j'utiliserais
Code:
Application.DisplayAlerts = False
Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Copy
Range("Tblo1[[Étudiant ]]").PasteSpecial xlPasteValues
Application.DisplayAlerts = True
A + :cool:
 

peper_eliot

XLDnaute Junior
Re : Manipuler les données des tableaux automatiques avec VBA

[édit] classeur en PJ retiré. voir le dernier post pour le classeur final
salut JNP ;)
Et paf, 2 baffes :eek:
Pour le .xlsx, c'était juste pour vous donner les éléments ;) m'en vais te mettre mon .xlsm de cochon avec toutes mes bavures lol

Mais bon, j'avance dans mon premier souci de copier X fois mes jurys...
voilà ce que ça donne.
Code:
'je détermine les variables de départ
LigDep = 35 'ligne d'en-tête
'ColDep = "F"
'chaque jury fait un nombre de tour

For i = 1 To v_jurys 'pour chaque ligne de jury
    'je copie la ligne de valeur du jury
    Range("G" & 1 + i).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    'je cherche le nombre de tour du jury
    v_tours = Range("K" & 1 + i).Value 'nbre de tour du jury
        'je vais copier en boucle mes tours (t)
        For t = 1 To v_tours
        LigDep = LigDep + 1 'ligne d'en-tête + 1 ou dernière ligne saisie
        'Range("F" & LigDep).select 'm'en vais me faire taper sur les doigts ;-)
        Range("F" & LigDep).Activate 'ouf!!    
        ActiveSheet.Paste
        Next
        'je termine ma boucle de copie des tours
'je reprend ma boucle des jurys
Next

Etapes suivantes :
-Je dois intégrer un boucle pour me copier l'horaire de départ avec l'incrément de 20minutes pour les passages suivants...
-et un Numéro de ligne qui me servira de rang pour l'étudiant
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Manipuler les données des tableaux automatiques avec VBA

Re :),
Et paf, 2 baffes :eek:
Et une de plus, une :p...
Que vois je dans ton code, des G, K, F :rolleyes:... Tu as bien dis que tu voulais raisonner en tableau, et ça y est, tu t'en écarte déjà :eek:...
Oh, VBAïste de peu de foi :p...
Teste
Code:
Sub Test()
Dim Cellule As Range, I As Byte, J As Byte, Horaire As Date
J = 1
For Each Cellule In Range("Tblo2[Passages]")
Horaire = Cellule.Offset(0, 1)
For I = J To Cellule + J - 1
Range("Tableau8[JURY]")(I) = Cellule.Offset(0, -4)
Range("Tableau8[Heure]")(I) = Horaire
Range("Tableau8[Rang]")(I) = J
Horaire = Horaire + Range("Tblo3[Durée]")
J = J + 1
Next I
Next Cellule
End Sub
à complèter (mais tu as déjà tout ce qu'il te faut :rolleyes:...)
Bonne suite :cool:
 
Dernière édition:

peper_eliot

XLDnaute Junior
Re : Manipuler les données des tableaux automatiques avec VBA

Voilà, les news sont là, fraiches du jour ;)
Encore merci JNP de m'avoir guidé.
Cela faisait plus de 7 ans que je n'avais pas touché une ligne de code VBA... mais ce fut un réel plaisir que de travailler en manipulant les données des tableaux automatiques d'Excel.

Je vous met le classeur final pour que vous puissiez vous en servir et tester par vous même.

Juste quelques petites remarques : pour l'insertion de formules... bien penser a passer par l'enregistreur de macro pour avoir l'équivalent de la formule... en anglais...
 

Pièces jointes

  • Planning-jurys.xld.xlsm
    68.2 KB · Affichages: 114
Dernière édition:

peper_eliot

XLDnaute Junior
Re : [résolu] Manipuler les données des tableaux automatiques avec VBA

Re :),
Juste ta RechercheV pour les étudiants qui ne fonctionne pas :rolleyes:...
:confused: Je viens de refaire l'essai... pour moi ça marche... ??? Tu peux me dire ce que tu as constaté ?

Pour ma part, le code
Code:
'===RECUPERATION DU NOM DE L'ETUDIANT DANS LE TABLEAU8=====================
 'Je rajoute la formule "RECHERCHEV()" de l'étudiant
 Range("Tableau8[ETUDIANT]")(1).Formula = "=VLOOKUP([@Rang],Tblo0,2,FALSE)"
me retourne bien =RECHERCHEV([@Rang];Tblo0;2;FAUX) dans mon tableau8
Par acquis de conscience, j'ai uploadé à nouveau le dernier classeur enregistré.

J'ai juste a saisir une liste de noms dans la colonne ETUDIANTS du Tblo0, vérifier que les "jurys" ont bien, au total, un nombre de passage équivalent au nombre d'étudiants (bien que cela ne soit pas bloquant), puis à cliquer sur MISE A JOUR DU PLANNING
 
Dernière édition:

Discussions similaires

A
Réponses
5
Affichages
675
A
Réponses
4
Affichages
191

Statistiques des forums

Discussions
312 152
Messages
2 085 796
Membres
102 978
dernier inscrit
bkarbet