Macro pour inverser les valeurs des lignes et des colonnes

[Résolu]
Signaler
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006
-
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006
-
Bonjour à tous,

je cherche une macro capable d'inverser les valeurs de ce qui se trouve dans les lignes et les colonnes.

J'arrive à le faire seulement pour une ligne et une colonne.

Merci d'avance.

13 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Ok,ok



Public

Sub
InverserValuers()

  
Const
ColStart
As

Integer
= 1

  
Const
ColEnd
As

Integer
= 7

  
Const
RowStart
As

Integer
= 1

  
Const
RowEnd
As

Integer
= 7

  
Dim
iCol
As

Integer
, iRow
As

Integer

  
For
iCol = ColStart
To
ColEnd

    
For
iRow = RowStart
To
RowEnd

      
If
iRow > iCol
Then

      
Dim
TempValue
As

String
: TempValue = Cells(iRow, iCol).Value

      Cells(iRow, iCol).Value = Cells(iCol, iRow).Value

      Cells(iCol, iRow).Value = TempValue

    
End

If

   
Next
iRow, iCol

End

Sub


Dis moi si ca te va ca.



Kenji
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut, si c'est juste pour transformer les lignes en colonnes, l'assistant Excel de création de macro te donne la solution :

    Sheets("Feuil1").Select
    Range("B2:K11").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

et tu exportes ta Feuil2.
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Salut,

Inverser les valeurs ? C'est à dire ?
La valeurs de droites passe à gauche et celle de gauche à droite ? Pareil pou haut et bas ?



Kenji
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006

Eh bien en fait pour prendre un exemple, ce qui se trouve dans la case "1B" doit se retrouver dans la case "2A" et vice versa.

Voila le code qui fonctionne mais seulement pour la première ligne et que je souhaiterais étendre à tout le tableau.

"Private Sub CommandButton1_Click()

Dim temp As String
Dim i As Integer


For i = 1 To 230
temp = Cells(1, i)
Cells(1, i) = Cells(i, 1)
Cells(i, 1) = temp
Next

End Sub"
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006

Eh bien en fait pour prendre un exemple, ce qui se trouve dans la case "1B" doit se retrouver dans la case "2A" et vice versa.
Voila le code qui fonctionne mais seulement pour la première ligne et que je souhaiterais étendre à tout le tableau.

"Private Sub CommandButton1_Click()

Dim temp As String
Dim i As Integer

For i = 1 To 230
temp = Cells(1, i)
Cells(1, i) = Cells(i, 1)
Cells(i, 1) = temp

Next

End Sub"
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Salut

1B? Késako? B1?

Tu veux transposer ou je n'ai pas compris
Range("A1").Select
 Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
       Selection.Copy
       Range("A1").End(xlDown).Offset(1, 0).Select
      Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, Transpose:=True
Rows("1:1").Select
       Selection.Delete Shift:=xlUp
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Par example.
Ca inverse le tableau B2:K11
B2 va en K11
B3 va en K10
C4 va en J10
...




Public

Sub
InverserValuers()

  
Const
ColStart
As

Integer
= 2

  
Const
ColEnd
As

Integer
= 11

  
Const
RowStart
As

Integer
= 2

  
Const
RowEnd
As

Integer
= 11

  
Dim
iCol
As

Integer
, iRow
As

Integer

  
For
iCol = ColStart
To
ColEnd -
CInt
((ColEnd - ColStart) / 2)

    
For
iRow = RowStart
To
RowEnd -
CInt
((RowEnd - RowStart) / 2)

      
Dim
TargetCol
As

Integer
: TargetCol = (ColEnd + ColStart) - iCol

      
Dim
TargetRow
As

Integer
: TargetRow = (RowEnd + RowStart) - iRow

      
Dim
TempValue
As

String
: TempValue = Cells(iRow, iCol).Value

      Cells(iRow, iCol).Value = Cells(TargetRow, TargetCol).Value

      Cells(TargetRow, TargetCol).Value = TempValue

  
Next
iRow, iCol

End

Sub





Kenji
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006

Je ne sais pas mais voici deux captures d'écran qui illustreront ce que je veux faire.

Le première quand j'ouvre mon fichier excel et la deuxième après que j'ai appuyé sur le bouton. Mais cela ne fonctionne que pour la première ligne.

http://www.image-dream.com/image.php?image=28fce0ec51efaea49fb8c9d48274e232.jpg&pseudo=anonym

http://www.image-dream.com/image.php?image=bda9192ac08835adaccd07bb0c133b03.jpg&pseudo=anonym
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Petite erreur dans mon code :
Il fallait bien boucler sur toutes les lignes



Public

Sub
InverserValuers()

  
Const
ColStart
As

Integer
= 2

  
Const
ColEnd
As

Integer
= 11

  
Const
RowStart
As

Integer
= 2

  
Const
RowEnd
As

Integer
= 11

  
Dim
iCol
As

Integer
, iRow
As

Integer

  
For
iCol = ColStart
To
ColEnd -
CInt
((ColEnd - ColStart) / 2)

    
For
iRow = RowStart
To
RowEnd

      
Dim
TargetCol
As

Integer
: TargetCol = (ColEnd + ColStart) - iCol

      
Dim
TargetRow
As

Integer
: TargetRow = (RowEnd + RowStart) - iRow

      
Dim
TempValue
As

String
: TempValue = Cells(iRow, iCol).Value

      Cells(iRow, iCol).Value = Cells(TargetRow, TargetCol).Value

      Cells(TargetRow, TargetCol).Value = TempValue

  
Next
iRow, iCol

End

Sub





Kenji
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Ha ok,
Et faut t-il changer les valeurs du contenu ?



Kenji
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006

Non les valeurs doivent juste changer de place. En fait j'ai un fichier excel qu'il m'est beaucoup plus pratique de construire en lignes mais que je veux exporter ensuite vers un autre logiciel qui n'accepte que les colonnes.
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Bonsoir


Ah, enfin quelqu'un qui pense comme moi. J'avais cru avoir rêvé. Pourquoi, un code aussi compliqué que Dim...?
Messages postés
6
Date d'inscription
mardi 19 septembre 2006
Statut
Membre
Dernière intervention
16 octobre 2006

Merci beaucoup à vous tous vos deux solutions fonctionnent, c'est super.