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

Inverser que les lignes d'une matrice excel

  • Initiateur de la discussion Initiateur de la discussion stpab
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

stpab

XLDnaute Nouveau
Bonjour,

J'ai une matrice 50x50, qui est pour info le résultat de calcul de champ magnétique, ce champ étant symétrique par rapport à son axe radiale et axiale, cette matrice ne représente que 1/4 du domaine, je souhaiterai donc afficher tous le domaine en matrice 100x100.

Ainsi je souhaiterai dans un premier temps inverser toutes les lignes de ma matrice

Puis, inverser juste les colonnes de cette première matrice

Et enfin inverser lignes et colonnes de cette matrice

Tous en les copiant sur une feuil2 dans un ordre précise


Si vous avez des idées, je prend

En vous remerciant,
 
Re : Inverser que les lignes d'une matrice excel

Bonjour stpab
Sans exemple, pas certain que cela convienne....
A lancer par Alt + F8
VB:
Sub tableau()
Dim i&, j&, TReport(1 To 100, 1 To 100) As Variant, TTmp As Variant

With Sheets("Feuil1")
    TTmp = .Range(.Cells(1, 1), .Cells(50, 50))
End With

For i = 1 To 50
    For j = 1 To 50
        TReport(i, j) = TTmp(i, j)
        TReport(101 - i, j) = TTmp(i, j)
        TReport(i, 101 - j) = TTmp(i, j)
        TReport(101 - i, 101 - j) = TTmp(i, j)
    Next j
Next i

With Sheets("Feuil2")
    .Cells(1, 1).Resize(100, 100) = TReport
    .Columns.AutoFit
    .Activate
End With

End Sub
Cordialement
 

Pièces jointes

Re : Inverser que les lignes d'une matrice excel

Bonsour®

sans macro ,
exemple pour une matrice 10x10
 

Pièces jointes

  • Capture.JPG
    118.4 KB · Affichages: 293
  • stpab.xlsx
    stpab.xlsx
    13.3 KB · Affichages: 88
  • Capture.JPG
    118.4 KB · Affichages: 268
  • Capture.JPG
    118.4 KB · Affichages: 262
  • Capture2.JPG
    34.6 KB · Affichages: 159
  • Capture2.JPG
    34.6 KB · Affichages: 192
  • Capture2.JPG
    34.6 KB · Affichages: 183
Re : Inverser que les lignes d'une matrice excel

Salut Efgé, ton programme répondait parfaitement à ma demande, mais seulement je souhaiterai obtenir une autre matrice 100x100

où la matrice 50x50 qui est copier et inverser se colle en case cells(50,50) et non en (1,1), les lignes inversées en (1,50), les colonnes inversé en (50,1) et enfin les lignes et colonnes inversées en (1,1).

Je te mets un petite exemple d'une matrice 4x4 en pièce jointe et le résultat que je souhaite obtenir en feuil2.
En restant dans le même esprit de code si tu pouvais me dire où je dois interagir dans ton code afin de placer les matrices inverses dans l'ordre que je souhaite,



Et Modeste geedee, je suis désolé j'ai répondu un peu vite car ta réponse est très bien pour de petites matrices mais je rencontre des soucis lorsque je doit gérer une matrice 50x50.


Dans tous les cas je vous remercie de votre aide,

Cordialement,
 

Pièces jointes

Re : Inverser que les lignes d'une matrice excel

Bonsour®
je suis désolé j'ai répondu un peu vite car ta réponse est très bien pour de petites matrices mais je rencontre des soucis lorsque je doit gérer une matrice 50x50.

😕
la matrice d'origine ne change pas toutes les secondes quand même... ???
il y a 10000 formules à recalculer à chaque changement cela prends quelques petites secondes.
cela est tout à fait concurrentiel avec une procédure macro...

😎
quasi instantané en supprimant couleurs et MEFC

ensuite il suffit de faire 🙂rolleyes: par macro ) un copier/collage spécial Valeur dans les feuilles de d'exploitation


edit :
mais seulement je souhaiterai obtenir une autre matrice 100x100

supprimer la lignes(53) et la colonne(BA) séparatrices
 

Pièces jointes

  • stpab(2).xlsm
    stpab(2).xlsm
    104.6 KB · Affichages: 271
  • Capture.JPG
    92.1 KB · Affichages: 180
  • Capture.JPG
    92.1 KB · Affichages: 195
  • Capture.JPG
    92.1 KB · Affichages: 188
Dernière édition:
Re : Inverser que les lignes d'une matrice excel

Bonjour stpab, Salut Modeste geedee
Après avoir fait tourner des tables, des serviettes, une ou deux têtes ... faisons tourner les tableaux 😀
VB:
Sub tableau_2()
Dim i&, j&, TReport(1 To 100, 1 To 100) As Variant, TTmp As Variant

With Sheets("Feuil1")
    TTmp = .Range(.Cells(1, 1), .Cells(50, 50))
End With

For i = 1 To 50
    For j = 1 To 50
        TReport(50 + i, 50 + j) = TTmp(i, j)
        TReport(51 - i, 50 + j) = TTmp(i, j)
        TReport(51 - i, 51 - j) = TTmp(i, j)
        TReport(50 + i, 51 - j) = TTmp(i, j)
    Next j
Next i

With Sheets("Feuil2")
    .Cells.ClearContents
    .Cells(1, 1).Resize(100, 100) = TReport
    .Columns.AutoFit
    .Activate
End With

End Sub

Cordialement
 
Re : Inverser que les lignes d'une matrice excel

Salut efgé, modeste geedee

J'aimerais maintenant rendre cette macro dynamique c'est à dire que la macro s'effectue suivant la taille de matrice définie par les valeurs en "E1" et "F1".

c'est à dire que maintenant que la taille de la matrice serait (range("E1").value)X(range("F1").value) et que en fonction de la taille de la matrice il m’exécute encore le code.

Je suis désolé mais je suis vraiment pas très doué, j'aimerais en gros pouvoir écrire, le code suivant:

ZZmax=(2*range("E1").value+2)
RRmax=(2*range("F1").value+2)
Zmax=range("E1").value
Rmax=range("F1").value

Dim i&, j&, TReport(1 To ZZmax, 1 To RRmax) As Variant, TTmp As Variant

With Sheets("Feuil1")
TTmp = .Range(.Cells(4, 3), .Cells(Zmax+4, Rmax+3))
End With

For i = 1 To (Zmax+1)
For j = 1 To (Rmax+1)

TReport(i, j) = TTmp(i, j)
TReport(ZZmax+1 - i, j) = TTmp(i, j)
TReport(i, RRmax+1 - j) = TTmp(i, j)
TReport(ZZmax+1 - i, RRmax - j) = TTmp(i, j)
Next j
Next i

With Sheets("Feuil2")
.Cells(1, 1).Resize(ZZmax, RRmax) = TReport
.Columns.AutoFit
.Activate
End With

Je sais que ceci est faux, je te met le code initiale que j'ai légèrement changé pour l'adapter à ma matrice



Dim i&, j&, TReport(1 To 102, 1 To 102) As Variant, TTmp As Variant

With Sheets("Feuil1")
TTmp = .Range(.Cells(4, 3), .Cells(54, 53))
End With

For i = 1 To 51
For j = 1 To 51
TReport(i, j) = TTmp(i, j)
TReport(103 - i, j) = TTmp(i, j)
TReport(i, 103 - j) = TTmp(i, j)
TReport(103 - i, 103 - j) = TTmp(i, j)
Next j
Next i

With Sheets("Feuil2")
.Cells(1, 1).Resize(102, 102) = TReport
.Columns.AutoFit
.Activate
End With



Si ta une petite idée, je pense que ce sont des problèmes d'appels des constantes

Encore merci pour votre patience et votre aide précieuse,

Cordialement,
 
Re : Inverser que les lignes d'une matrice excel

Bonjour stpab, Salut Modeste geedee

Merci d'utiliser la balise code (#) , c'est plus façile à déchiffrer 😀

Nous sommes donc revenu à la première proposition....
Le code adapté à un nombre de lignes et de colonnes définies en E1:F1
La matrice d'origine ne doit pas forcément être carrée .

VB:
Sub test4()
Dim i&, j&, Rw&, Col&
Dim TReport As Variant, TTmp As Variant, Deb As Range
Rw = Range("E1") 'Nombre de Lignes de la matrice d'origine
Col = Range("F1") 'Nombre de Colonnes de la matrice d'origine
ReDim TReport(1 To Rw * 2, 1 To Col * 2)

With Sheets("Feuil1")
    Set Deb = .Cells(4, 3) 'Cellule de départ de la matrice d'origine
    TTmp = .Range(Deb, .Cells(Rw + Deb.Row, Col + Deb.Column))
End With

For i = 1 To Rw
    For j = 1 To Col
        TReport(i, j) = TTmp(i, j)
        TReport(((2 * Rw) + 1) - i, j) = TTmp(i, j)
         TReport(i, ((2 * Col) + 1) - j) = TTmp(i, j)
        TReport(((2 * Rw) + 1) - i, ((2 * Col) + 1) - j) = TTmp(i, j)
    Next j
Next i

With Sheets("Feuil2")
    .Cells(1, 1).Resize(UBound(TReport, 1), UBound(TReport, 2)) = TReport
    .Columns.AutoFit
    .Activate
End With
End Sub
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

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