Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Incrémentation de 2 tableaux automatique à partir d'un seul

RobyL

XLDnaute Junior
Bonjour,

je souhaite incrémenter un tableau automatiquement si une cellule est non vide.
le but est qu'il copie une ligne d'une certaine colonne à une autre. et la colle dans la feuille où ce trouve le tableau.
tous est expliquer dans le fichier joint. c'est compliquer de bien expliquer par message.
je ne sait pas du tout comment m'y prendre : vba ou formule ou autre.

merci pour vos idées et votre aide.
 

Pièces jointes

  • SP.xlsx
    17.6 KB · Affichages: 11
Solution
Bonjour RobyL, Jacky67, le forum,

Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim P As Range, Q As Range, R As Range
Application.ScreenUpdating = False
With Sheets("BASE").[A1].CurrentRegion
    Set P = .Columns(1).Resize(, 3) '3 premières colonnes
    Set Q = .Rows(1).Find(Sh.Name, , xlValues, xlWhole) 'recherche de X ou Y
    If Q Is Nothing Then Exit Sub
    Set Q = Intersect(.Cells, Q.MergeArea.EntireColumn) 'colonnes X ou Y
    Set R = Q.Columns(1).SpecialCells(xlCellTypeConstants).EntireRow 'filtrage
    Sh.Cells.Delete 'EAZ
    Intersect(Union(P, Q), R).Copy Sh.[A1] 'copier-coller
    '---mises en forme---
    With Sh.UsedRange
        Set P =...

Jacky67

XLDnaute Barbatruc
Bonjour,
Un proposition par vba en pj
La mise à jour se fait à la sélection des feuilles X ou Y
 

Pièces jointes

  • SP.xlsm
    31.5 KB · Affichages: 10

RobyL

XLDnaute Junior
Bonjour et merci pour cette idée.
cela fonctionne.
j'ai 2 requettes si c'est possible.

je doit garder la feuille x et y sous forme de tableau.
puis dans la feuille X je ne doit remplir que les colonne D,E,F et H
et dans la feuille y seulement les colonnes K,L,M et O
 

job75

XLDnaute Barbatruc
Bonjour RobyL, Jacky67, le forum,

Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim P As Range, Q As Range, R As Range
Application.ScreenUpdating = False
With Sheets("BASE").[A1].CurrentRegion
    Set P = .Columns(1).Resize(, 3) '3 premières colonnes
    Set Q = .Rows(1).Find(Sh.Name, , xlValues, xlWhole) 'recherche de X ou Y
    If Q Is Nothing Then Exit Sub
    Set Q = Intersect(.Cells, Q.MergeArea.EntireColumn) 'colonnes X ou Y
    Set R = Q.Columns(1).SpecialCells(xlCellTypeConstants).EntireRow 'filtrage
    Sh.Cells.Delete 'EAZ
    Intersect(Union(P, Q), R).Copy Sh.[A1] 'copier-coller
    '---mises en forme---
    With Sh.UsedRange
        Set P = .Rows(2).Resize(Application.Max(.Rows.Count - 1, 2))
        Sh.ListObjects.Add(xlSrcRange, P, , xlYes).Name = "Tableau" & Sh.Name 'création du tableau structuré
        Set P = .Rows(3).Resize(.Rows.Count - 2)
        Union(P.Columns(7), P.Columns(9), P.Columns(10)) = "" 'RAZ comme demandé
        .Columns.AutoFit 'largeurs des colonnes
    End With
End With
End Sub
Elle s'exécute quand on active les feuilles X ou Y.

A+
 

Pièces jointes

  • SP(1).xlsm
    23.9 KB · Affichages: 9

job75

XLDnaute Barbatruc
Cela dit au lieu d'effacer les colonnes 7, 9, 10 il vaut peut-être mieux les supprimer, fichier (2) :
Code:
    '---mises en forme---
    With Sh.UsedRange
        Union(.Columns(7), .Columns(9), .Columns(10)).Delete xlToLeft 'colonnes inutiles
        Set P = .Rows(2).Resize(Application.Max(.Rows.Count - 1, 2))
        Sh.ListObjects.Add(xlSrcRange, P, , xlYes).Name = "Tableau" & Sh.Name 'création du tableau structuré
        .Columns.AutoFit 'largeurs des colonnes
    End With
 

Pièces jointes

  • SP(2).xlsm
    23.9 KB · Affichages: 7

RobyL

XLDnaute Junior
Bonjour job75,
on touche au but, bravo pour cette solution.

les colonnes que je souaitais libre communique avec un autre tableau dans un autre classeur.
du coup le raz m'empeche de mettre cela en place.

en gros le tableau de la feuille base effectue un trie dans 2 autre tableaux feuille x et y. ces 2 tableaux me permettent de communiquer avec 2 autres tableau dans 2 classeurs differents. ces 2 classeurs remonte des infos dans les tableaux x et y qui eux même les font remonter dans la feuille base.

c'est dure à expliquer. j'espère qu'il y a assez d'info

merci pour votre aide précieuse
 

job75

XLDnaute Barbatruc
Vous avez pourtant dit que vous ne voulez remplir que les colonnes D E F H.

Donc il faut effacer les colonnes G I J, si ce n'est pas le cas à vous de voir car ce n'est pas clair.
 

job75

XLDnaute Barbatruc
S'il faut des formules de liaison dans les colonnes G I J dites-nous lesquelles, c'est facile de les mettre.

Et si la feuille "BASE" doit récupérer les valeurs il faudra la traiter en conséquence.
 

RobyL

XLDnaute Junior
pardon pour ce cafouillage.

je doit copier dans feuille x les colonnes ABCDEFH je dois garder de disponible les colonnes GIJ
je dois copier dans la feuille y les colonnes ABCKLMO je dois garder de disponible les colonnes NPQ

Pour recupérer les valeurs de la feuille base je sait le faire avec une formule

cordialement
 

RobyL

XLDnaute Junior
Oui c'est vrais.
Mais à chaque fois que je veut remplir ces cases sur la feuille x ou y elles s'efface automatiquement.
En faite il faut que j incrémente ces 3 colonnes avec des formules de recherche via un index. Je les recherche en fonction de la colone DT et la colonne Phase.
Malheureusement je ne suis pas devant mon ordinateur pour vous donner les formules. Je ne pourrai le faire que lundi.
 

RobyL

XLDnaute Junior
bonjour, me revoilà

bon mon projet est complexe du coup.
je m'explique :
je souhaite faire communiquer deux classeurs, un classeur x et un y avec le classeur principal SP.
le fichier SP extrait les donnée pour les dispatcher dans ces classeurs x et y puis ces classeur x et y me permettent de remonter des informations jusqu'au classeur SP.
je ne suis pas obliger de passer par des feuille (feuille X et Y) je peut directement passer par les calsseur si cela est plus simple.
les information descendante sont toutes les cases sauf les cellules GIJ et NPQ car ces cellules sont les info remontante

les classeurs peuvent communiquer avec ce genre de formule :

=SIERREUR(INDEX('GESTION USINAGE.xlsm'!Tableau1[TPS DE CYCLE PAR PIECES]*[QTE];EQUIV([DT]&[PHASE19];'GESTION USINAGE.xlsm'!Tableau1[N°DT]&'GESTION USINAGE.xlsm'!Tableau1[PHASE];0));0)

je ne sait pas si je suis sur le bon chemin
 

RobyL

XLDnaute Junior
formule en colonne G :
=SIERREUR(INDEX('GESTION USINAGE.xlsm'!Tableau14782[@[tps estimé19]];EQUIV([DT]&[PHASE19];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE19];0));"")

formule en colonne I :
=SIERREUR(INDEX('GESTION USINAGE.xlsm'!Tableau14782[@COMMENTAIRES19];EQUIV([DT]&[PHASE19];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE19];0));"")

formule en colonne J :
=SIERREUR(INDEX('[GESTION USINAGE.xlsm]ORDO USINAGE'!Tableau14782[@VALIDATION19];EQUIV([DT]&[PHASE19];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE19];0));"")

formule en colonne N :
=SIERREUR(INDEX('GESTION USINAGE.xlsm'!Tableau14782[@[tps estimé20]];EQUIV([DT]&[PHASE20];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE20];0));"")

formule en colonne P :
=SIERREUR(INDEX('GESTION USINAGE.xlsm'!Tableau14782[@COMMENTAIRES20];EQUIV([DT]&[PHASE20];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE20];0));"")

formule en colonne Q :
=SIERREUR(INDEX('[GESTION USINAGE.xlsm]ORDO USINAGE'!Tableau14782[@VALIDATION20];EQUIV([DT]&[PHASE20];'GESTION USINAGE.xlsm'!Tableau14782[@DT]&'GESTION USINAGE.xlsm'!Tableau14782[@PHASE20];0));"")
 

Discussions similaires

Réponses
3
Affichages
788
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…