Convertir un tableau en matrice en tableau de base de données
shadowspirit
Messages postés
2
Statut
Membre
-
via55 Messages postés 14730 Date d'inscription Statut Membre Dernière intervention -
via55 Messages postés 14730 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'écris ce post afin de solliciter votre aide, je bloque sur la réalisation d'une macro pour exploiter des fichiers propre à mon boulot.
Je vous joint un fichier avec des extraits de feuilles pour présenter la situation et mieux exprimer mes attentes
Contexte :
La feuille "planning matricielle" est celle qui est utilisée pour définir l'emploi du temps du personnel sur l'année.
Je l'ai appelée matriciel par rapport à sa configuration: en ligne les dates et en colonne les noms du personnel. Les données dans la matrice correspondent au planning en 3*8 des 3 équipes (A, B, C).
De cette feuille est crée la feuille "planning rotation" qui sert au placement du personnel chaque semaine.
Mon souhait :
- Automatiser la feuille "planning rotation" qui est faite hebdomadairement.
Pour cela il faudrait que la feuille se trouve sous forme de base de donnée, comme la feuille "planning bdd" (toutes les informations en colonne : date, jour, nom, etc).
- Une fois fait, je pourrais faire un tableau croisé dynamique qui serait l'équivalent du "planning rotation" et permettrait une automatisation du fichier par un simple rafraichissement de celui-ci.
Mon attente :
- Une macro qui récupère les informations de la feuille "planning matricielle" pour les mettre tous en colonne dans la feuille "planning bdd" (c'est vraiment ce qui me bloque actuellement).
Lien fichier excel : http://www.cjoint.com/c/FEqtc5Aix1N
J'écris ce post afin de solliciter votre aide, je bloque sur la réalisation d'une macro pour exploiter des fichiers propre à mon boulot.
Je vous joint un fichier avec des extraits de feuilles pour présenter la situation et mieux exprimer mes attentes
Contexte :
La feuille "planning matricielle" est celle qui est utilisée pour définir l'emploi du temps du personnel sur l'année.
Je l'ai appelée matriciel par rapport à sa configuration: en ligne les dates et en colonne les noms du personnel. Les données dans la matrice correspondent au planning en 3*8 des 3 équipes (A, B, C).
De cette feuille est crée la feuille "planning rotation" qui sert au placement du personnel chaque semaine.
Mon souhait :
- Automatiser la feuille "planning rotation" qui est faite hebdomadairement.
Pour cela il faudrait que la feuille se trouve sous forme de base de donnée, comme la feuille "planning bdd" (toutes les informations en colonne : date, jour, nom, etc).
- Une fois fait, je pourrais faire un tableau croisé dynamique qui serait l'équivalent du "planning rotation" et permettrait une automatisation du fichier par un simple rafraichissement de celui-ci.
Mon attente :
- Une macro qui récupère les informations de la feuille "planning matricielle" pour les mettre tous en colonne dans la feuille "planning bdd" (c'est vraiment ce qui me bloque actuellement).
Lien fichier excel : http://www.cjoint.com/c/FEqtc5Aix1N
A voir également:
- Convertir un tableau en matrice en tableau de base de données
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
3 réponses
Bonsoir shadowspirit
A priori pas besoin de macro, la formule :
=INDEX('Planning matrice'!$E$6:$M$372;EQUIV(C16;'Planning matrice'!$D$6:$D$372;0);EQUIV(D16;'Planning matrice'!$E$5:$N$5;0)) en E16 de bdd puis étirée vers la bas doit retourner la lettre correspondant à l'équipe
Cdlmnt
Via
A priori pas besoin de macro, la formule :
=INDEX('Planning matrice'!$E$6:$M$372;EQUIV(C16;'Planning matrice'!$D$6:$D$372;0);EQUIV(D16;'Planning matrice'!$E$5:$N$5;0)) en E16 de bdd puis étirée vers la bas doit retourner la lettre correspondant à l'équipe
Cdlmnt
Via
Bonsoir,
Merci pour ta réponse Via55.
Effectivement ta formule me permet d'avoir les informations par rapport au placement en équipe du personnel.
Seulement la feuille "planning bdd" n'existe pas au départ et par la suite elle n'est pas figée (la feuille utilisé en interne est la feuille "planning matrice" et ce n'est pas près de changer pour l'instant. des personnes peuvent y être rajoutées ou enlevées).
C'est pour ça que j'ai besoin d'une macro, pour qu'à chaque fois que je travaille dessus, je mets à jour la feuille "planning bdd".
Ma maitrise étant limitée, je suis parti d'un enregistrement de macro pour connaitre le code des mouvements que je souhaitais faire. Ce qui me manque c'est la définition de boucle pour ne pas avoir à répéter le code pour chaque personne et chaque colonne dans la feuille "planning matrice".
Sub Planning_bdd()
'
' Planning_bdd Macro
'
'Copier_coller colonne
'Copier_coller 1ere colonne
Sheets("Planning matrice").Select
Range("E6:E393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").Select
ActiveSheet.Paste
'Copier_coller 2eme colonne
Sheets("Planning matrice").Select
Range("F6:F393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Copier_coller 3eme colonne
Sheets("Planning matrice").Select
Range("G6:G393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Copier_coller 4eme colonne
Sheets("Planning matrice").Select
Range("H6:H393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Ceci correspond à la formule que tu as fait, j'aimerais ne pas la réécrire pour chaque colonne mais y mettre une boucle.
En plus de cela, j'aurais aussi besoin du code pour créer la colonne D de la feuille "planning bdd" (le nom de la personne correspondante) avec une boucle pour ne pas avoir à le réécrire aussi.
J'espère t'avoir assez bien décrit mon besoin, dis le moi si il n'est pas clair et où...
Merci d'avance pour ta contribution
End Sub
Merci pour ta réponse Via55.
Effectivement ta formule me permet d'avoir les informations par rapport au placement en équipe du personnel.
Seulement la feuille "planning bdd" n'existe pas au départ et par la suite elle n'est pas figée (la feuille utilisé en interne est la feuille "planning matrice" et ce n'est pas près de changer pour l'instant. des personnes peuvent y être rajoutées ou enlevées).
C'est pour ça que j'ai besoin d'une macro, pour qu'à chaque fois que je travaille dessus, je mets à jour la feuille "planning bdd".
Ma maitrise étant limitée, je suis parti d'un enregistrement de macro pour connaitre le code des mouvements que je souhaitais faire. Ce qui me manque c'est la définition de boucle pour ne pas avoir à répéter le code pour chaque personne et chaque colonne dans la feuille "planning matrice".
Sub Planning_bdd()
'
' Planning_bdd Macro
'
'Copier_coller colonne
'Copier_coller 1ere colonne
Sheets("Planning matrice").Select
Range("E6:E393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").Select
ActiveSheet.Paste
'Copier_coller 2eme colonne
Sheets("Planning matrice").Select
Range("F6:F393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Copier_coller 3eme colonne
Sheets("Planning matrice").Select
Range("G6:G393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
'Copier_coller 4eme colonne
Sheets("Planning matrice").Select
Range("H6:H393").Select
Selection.Copy
Sheets("Planning bdd").Select
Range("F6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Ceci correspond à la formule que tu as fait, j'aimerais ne pas la réécrire pour chaque colonne mais y mettre une boucle.
En plus de cela, j'aurais aussi besoin du code pour créer la colonne D de la feuille "planning bdd" (le nom de la personne correspondante) avec une boucle pour ne pas avoir à le réécrire aussi.
J'espère t'avoir assez bien décrit mon besoin, dis le moi si il n'est pas clair et où...
Merci d'avance pour ta contribution
End Sub
Bonjour,
Essaie cette macro
Cdlmnt
Via
Essaie cette macro
Sub mise_a_jour()
Dim LigneM As Long, ligneB As Long, col As Integer
'1ere ligne vide de bdd
ligneB = Sheets("Planning bdd").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
'efface bbd
Sheets("Planning bdd").Range("A6:E" & ligneB).ClearContents
'dernière ligne de matrice
LigneM = Sheets("Planning matrice").Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
'nombre de lignes de matrice
nbl = LigneM - 5
'dernière colonne de matrice
col = Sheets("Planning matrice").Rows(5).Find("*", , , , xlByRows, xlPrevious).Column
'desactive rafraichissement ecran
Application.ScreenUpdating = False
'Boucle sur colonnes noms de matrice
For y = 5 To col
'nom personnel
nom = Sheets("Planning matrice").Cells(5, y)
Sheets("Planning matrice").Select
' premiere ligne vide bdd
ligneB = Sheets("Planning bdd").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
'copie les 3 colonnes de matrice correpondant à date
Range("B6:D" & LigneM).Select
Selection.Copy
Sheets("Planning bdd").Select
Range("A" & ligneB).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'copie le nom
Sheets("Planning bdd").Range("D" & ligneB & ":" & "D" & ligneB + nbl - 1) = nom
'copie la colonne équipe
Sheets("Planning matrice").Select
Range(Cells(6, y), Cells(LigneM, y)).Select
Selection.Copy
Sheets("Planning bdd").Select
Range("E" & ligneB).Select
ActiveSheet.Paste
Next y
'reactive rafraichissement ecran
Application.ScreenUpdating = True
End Sub
Cdlmnt
Via