2 votes

Inversion d'un tableau (pas de transposition)

Je travaille sur l'analyse d'images de microréseaux tissulaires (TMA) dans le cadre d'un projet de pathologie moléculaire. Les TMA sont des diapositives contenant de nombreuses petites images. Une fois la diapositive scannée, elle doit être mise en correspondance avec la carte des identifiants uniques.

Parfois, les diapositives sont tournées, donc ce dont j'ai besoin, c'est d'un moyen de retourner un tableau Excel, mais pas de le transposer, si cela a un sens.

Par exemple

De :

enter image description here

a:

enter image description here

Toute aide serait très appréciée

2voto

PeterH Points 7096

Vous pouvez le faire avec INDEX :

=INDEX($A$1:$C$3,((ROWS($A$1:$A$3))+1)-ROWS($G$1:$G1),((COLUMNS($A$1:$C$1))+1)-COLUMNS($G$1:G1))

Cela suppose que votre table se situe dans l'intervalle $A$1:$C$3 ,

Vous devrez aller dans ma formule et modifier les fourchettes en fonction de vos besoins.

Changer $A$1:$C$3 pour s'adapter à l'ensemble de votre table. Modifier $A$1:$A$3 pour s'adapter à la rangée supérieure de votre table. Changer $A$1:$C$1 pour correspondre à la première colonne de votre tableau.

Veillez à ce que les signes $ soient bien présents.

enter image description here

EDIT pour l'OP

En cellule M1 à l'aide de la formule ci-dessous :

=INDEX($A$1:$L$9,((ROWS($A$1:$A$9))+1)-ROWS($N$1:$N1),((COLUMNS($A$1:$L$1))+1)-COLUMNS($N$1:N1))

Faites-le glisser jusqu'à X1 et ensuite vers le bas jusqu'à X9 pour inverser directement votre tableau original.

2voto

Anwar Points 159

Vous pouvez créer une ligne d'aide avec un rapport de 9 à 1 à partir de la cellule N2 et une colonne d'aide avec un rapport de 12 à 1 à partir de la cellule O1.

Maintenant, mettez la formule suivante et faites-la glisser vers la droite et vers le bas :

=INDEX($A$1:$L$9,$N2,O$1)

Voir l'image suivante :

enter image description here

1voto

Máté Juhász Points 20291

Je préfère généralement résoudre les problèmes sans macros, mais je n'ai pas trouvé de solution facile sans elles.

La macro ci-dessous inverse la matrice sélectionnée et l'écrit à l'emplacement d'origine ou sur une nouvelle feuille de calcul.

Pour exécuter la macro :

  • Appuyez sur Alt+F11 pour ouvrir l'éditeur Visual Basic
  • coller le code dans un module (insert - module)
    • note : après avoir ajouté un code, vous devrez enregistrer votre classeur en tant que classeur activé par la macro si vous souhaitez conserver la macro (si vous n'en avez pas besoin à l'avenir, vous pouvez également le conserver en tant que .xlsx).
  • conserver l'option dont vous avez besoin (écraser les données d'origine ou créer une nouvelle feuille) et supprimer les autres options.
  • sélectionner l'ensemble du tableau à inverser
  • allez dans "view" - "macros" - "view macros" - sélectionnez la macro (InvertTable) et appuyez sur run

Option Explicit

Sub InvertTable()
    Dim originalData As Variant
    Dim nRows As Integer
    Dim nColumns As Integer
    Dim newData As Variant
    Dim x As Integer
    Dim y As Integer

    originalData = Selection
    nRows = UBound(originalData, 1)
    nColumns = UBound(originalData, 2)
    newData = originalData

    For x = 1 To CInt(nColumns / 2)
        For y = 1 To CInt(nRows / 2)
            newData(y, x) = originalData(nRows - y + 1, nColumns - x + 1)
            newData(nRows - y + 1, nColumns - x + 1) = originalData(y, x)
            newData(y, nColumns - x + 1) = originalData(nRows - y + 1, x)
            newData(nRows - y + 1, x) = originalData(y, nColumns - x + 1)
        Next y
    Next x

    ' --- option 1: overwrite data ---
    Selection = newData
    ' --- end of option 1 ---

    ' --- option 1: insert new sheet ---
    Dim newSheet As Worksheet

    Set newSheet = Selection.Parent.Parent.Worksheets.Add
    newSheet.Range(Cells(1, 1), Cells(nRows, nColumns)) = newData
    ' --- end of option 1 ---
End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X