Inversion colonnes ligne vba

Fermé
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 - 23 août 2010 à 10:38
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 - 24 août 2010 à 10:13
Bonjour,

Je suis débutant en vba et j'ai besoin dans le cadre de mon ativité pro d'un code permettant l'inversion des colonnes d'une ligne à partir d'un sélection

Exemple

test forum internet

Résultat:

internet forum test

Merci de votre aide et surtout n'hésitez pas à me demander des précisions!

7 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
23 août 2010 à 12:01
petit exemple avant d'aller manger...

Sub test()
'
' inversion des mots dans une ligne


Dim maLigne As String
Dim Tablo() As String
Dim LigneSortie As String

maLigne = "test forum internet"

Tablo = Split(maLigne, " ")

For i = UBound(Tablo) To 0 Step -1
 LigneSortie = LigneSortie & Tablo(i) & " "
Next i
msgbox LigneSortie

End Sub
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
23 août 2010 à 12:57
En relisant, je me demande ...si tu parles de position de mot dans une phrase
ou de position de colonnes dans un tableau xl
le code que je mets ne fonctionne que pour le premier cas évidemment
0
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 1
23 août 2010 à 13:07
Merci pour ta réponse rapide je t'explique il s'agit à partir de la sélection d'une palge de A1 à W1 d'inverser le contenue des colonnes en ligne bien sur vers une autre feuille ou sur la même feuille.

Dis moi si je ne suis pas assez clair.
0
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 1
23 août 2010 à 13:10
J'ai un code permettant de permutter les lignes dans une colonne ,je cherche à faire l'inverse:

coloneSelectionne = ActiveWindow.RangeSelection.Address
temp = Split(coloneSelectionne, ":")
premiereCellule = temp(0)
derniereCellule = temp(UBound(temp))
'sert à recuperer l'indice de la ligne des cellules
numeroPremiereCellule = Split(premiereCellule, "$")
numeroDerniereCellule = Split(derniereCellule, "$")
'calcule le nombre de cellules de la colone
difference = (numeroDerniereCellule(2) - numeroPremiereCellule(2) + 1)
Range(premiereCellule, premiereCellule).Select
' Déclare un tableau dynamique.
Dim valeurColone() As Variant
ReDim valeurColone(difference) 'aloue une taille au tableau
i = 0
While i <> difference
valeurCellule = ActiveCell.Offset(i, 0).Value
' Initialise le tableau avec
'les valeur de chaque cellule de la selection
valeurColone(i) = valeurCellule
i = i + 1
Wend
Dim j As Integer
j = 0
'je place dans la colone selectionnée
'les valeurs du tableau valeurColone en partant de la fin.
For i = UBound(valeurColone) - 1 To 0 Step -1
ActiveCell.Offset(j, 0).Select
ActiveCell.Value = valeurColone(i)
j = 1
Next i
End Sub

Pourrais tu m'indiquer ce qu'il faudrait modifier. Merci d'avance ^^
0
cousinhub29 Messages postés 956 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 novembre 2024 344
23 août 2010 à 13:31
Bonjour,

essaie avec ce code :

Sub inverse()
Dim a, b
Dim I As Long, J As Byte
a = Application.Transpose(Application.Transpose(Range("A1:W1").Value))
ReDim b(UBound(a))
J = 0
For I = UBound(a) To LBound(a) Step -1
    b(J) = a(I): J = J + 1
Next I
Range("A2:W2").Value = b
End Sub


Bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 1
23 août 2010 à 14:10
Merci pour ton aide cousinhub29 !

Il m'inverse les valeurs ligne A1:W1 en WI:A1 exactement ce que je veux.
Permet moi d'abuser en te demandant encore une petit chose peut on l'appliquer une une plage de données du style A1:W2?

Bonne après midi
0
cousinhub29 Messages postés 956 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 novembre 2024 344
23 août 2010 à 14:30
Re-,

essaie ainsi :

Option Base 1
Sub inverse()
Dim a, b
Dim I As Long, J As Byte
a = Application.Transpose(Range("A1:W2").Value)
ReDim b(UBound(a), 2)
J = 1
For I = UBound(a) To LBound(a) Step -1
    b(J, 1) = a(I, 1)
    b(J, 2) = a(I, 2)
    J = J + 1
Next I
Range("A3:W4").Value = Application.Transpose(b)
End Sub


N'oublie pas l'Option Base 1 en tête de module

Bonne journée
0
pgillou Messages postés 49 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 14 octobre 2010 1
24 août 2010 à 10:13
Salut,

Mes tests ont été concluants ,je te remercie.

Bonne journée
0