Renvoyer et réorganiser des valeurs vers un nouvel onglet

Bonjour,

je fais appel à vous pour réorganiser un classeur excel. Je n'arrive pas à trouver une solution qui remplisse parfaitement mes critères. Je ne maîtrise pas du tout le codage, les macro etc. J'ai vu passer les fonctions "indirect" et "decaler" sur le forum mais je n'arrive pas à m'en servir correctement...

Voici ce que je voudrais faire :

Dans un fichier excel j'ai rapporté des résultats de tests effectués sur des vernis. Chaque onglet correspond à un groupe de vernis, les colonnes classent des références commerciales de vernis (ligne 1 : 66xxx) séchés à trois puissances différentes (ligne 6 : 300-600-900). Chaque référence commerciale gère donc trois colonnes.

Les lignes suivantes rapportent des résultats de tests effectués, ce sont des nombres.

Je voudrais présenter dans un dernier onglet les résultats de tous les onglets dans un ordre différents afin de pouvoir créer des graphiques de façon plus pratique et rapide.

L'onglet "récap" reprend les références commerciales de tous les onglets en colonne A. Cette fois dans les colonnes suivantes je classe les tests à différentes puissances de séchage.

Vous comprendrez mieux avec mon fichier. Il ne s'agit pas tout à fait de copier/transposer. J'ai rempli l'onglet récap en faisant des copies avec liaison mais c'est très fastidieux et source d'erreur. Je recherche une formule qui me permette d'éviter ces copier/coller et remplir rapidement mon tableau récap.

A l'avenir, je pourrais être amenée à rajouter des références commerciales dans les onglets et je voudrais pouvoir mettre à jour l'onglet récap sans trop de difficulté.

(Le graphique représente le résultat final que je souhaite obtenir. Avez vous une autre idée pour y parvenir ? peut être plus simple qu'avec cet onglet récap ?)

Merci beaucoup pour votre aide ! J'espère que je vais tout comprendre ;)

19exemple-excel.xlsx (133.37 Ko)

Bonsoir

Une proposition en VBA. Pour les tests et ne pas abîmer le fichier d'origine j'ai dupliqué la feuille "Recap". Si tout fonctionne comme attendu il suffit supprimer la feuille "Recap" et de renommer la feuille "Recap (2)"

21exemple-excel.xlsm (242.17 Ko)

Avec un bouton pour déclencher la macro ça sera plus pratique

7exemple-excel.xlsm (244.32 Ko)

Salut leaV,
Salut yal_excel,

Un double-clic sur n'importe quelle feuille démarre la macro.
Le code se trouve donc dans le module 'ThisWorkbook'.
J'ai replacé la feuille 'RECAP' en première position.

Le code repose sur la certitude que TOUTES tes feuilles-références auront et garderont la même structure générale.
Tu peux ajouter autant de feuilles-références et de tests supplémentaires que nécessaire : la macro calcule l'emplacement de ces tests à partir de la première feuille-références.
Il est dès lors impératif que le libellé des tests en 'RECAP' soit copié fidèlement dans chaque feuille-références, comme c'est le cas maintenant.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, tRec, tRow(), iNb%, iNbTest%, iIdx%
'
Cancel = True
Application.ScreenUpdating = False
'
'Calcul du nbre de tests et repérage lignes correspondantes dans les feuilles-références
With Worksheets("RECAP")
    iNbTest = WorksheetFunction.CountA(.Rows(1)) - 1        'nbre de tests
    ReDim tRow(1 To iNbTest)
    For x = 2 To iNbTest * 3 Step 3                         'recherche des lignes correspondantes
        iIdx = iIdx + 1
        tRow(iIdx) = Sheets(2).Columns(1).Find(what:=.Cells(1, x), lookat:=xlWhole, LookIn:=xlValues).Row
    Next
    .Range("A3").Resize(.Range("A" & Rows.Count).End(xlUp).Row, 1 + (iNbTest * 3)).Clear    'effacement valeurs actuelles dans 'RECAP'
    .Columns(1).HorizontalAlignment = xlHAlignRight
End With
'
'Relevé des valeurs, feuille par feuille (autant que nécessaire)
For x = 2 To Sheets.Count
    With Sheets(x)
        iIdx = 0
        iNb = WorksheetFunction.CountA(.Rows(6)) - 1
        tTab = .Range("B1").Resize(tRow(UBound(tRow)), iNb).Value
        ReDim tRec(iNb / 3, (iNbTest * 3) + 1)
        For y = 1 To UBound(tTab, 2) Step 3
            iIdx = iIdx + 1
            tRec(iIdx - 1, 0) = tTab(1, y + 1)
            For Z = 1 To iNbTest
                For k = 1 To 3
                    'MsgBox "tTab " & tRow(Z) & "  " & ((y - 1) * 3) + k
                    tRec(iIdx - 1, ((Z - 1) * 3) + k) = tTab(tRow(Z), ((iIdx - 1) * 3) + k)
                Next
            Next
        Next
    End With
    With Worksheets("RECAP")        'affichage et mise en couleur
        iNb = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & iNb).Resize(UBound(tRec, 1), UBound(tRec, 2)).Value = tRec
        For y = iNb To iNb + UBound(tRec, 1) Step 2
            .Range("A" & y).Interior.Color = Sheets(x).Tab.Color
        Next
        .Range("B" & iNb).Resize(UBound(tRec, 1), UBound(tRec, 2) - 1).NumberFormat = "###0.00"
    End With
Next
'
Application.ScreenUpdating = True
'
End Sub
15leav.xlsm (142.34 Ko)


A+

Bonjour yal_excel et Curulis57,

merci beaucoup pour votre rapidité, c'est super sympa !

yal_excel j'ai du mal avec ton fichier, les mises à jour ne sont pas prises en compte en totalité : si je modifie les cellules VF Protection B25, C25 D25 c'est pris en compte. Par contre si je rentre des données dans les autres onglets qui étaient vides jusqu'à présent, les modifs n'apparaissent pas dans récap (2).

Curulis57 ça marche du feu de dieu, c'est tout à fait ce que je recherchais !

Bonne journée !

Bonjour tout le monde

En effet grosse faute d'inattention je n'ai traité qu'une partie de la question. Je m'en suis aperçu à la lecture de la solution de Curulis57.

Rechercher des sujets similaires à "renvoyer reorganiser valeurs nouvel onglet"