Inversion colonnes ligne vba

pgillou Messages postés 53 Statut Membre -  
pgillou Messages postés 53 Statut Membre -
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

  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
    1. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      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
  2. pgillou Messages postés 53 Statut Membre 1
     
    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
  3. pgillou Messages postés 53 Statut Membre 1
     
    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
  4. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pgillou Messages postés 53 Statut Membre 1
     
    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
  7. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383
     
    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
  8. pgillou Messages postés 53 Statut Membre 1
     
    Salut,

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

    Bonne journée
    0