Couper Coller VBA

Bonjour,

Je suis bloqué actuellement sur mon programme, j'ai commencé Excel il y a 3 jours.

J'essaye de ranger des colonnes en fonction de la valeur qu'elles ont en première ligne.

capture d ecran 2020 12 03 110524

Mon code a pour but d'être automatisé pour différents fichiers, le nombre de colonnes, leur positions ... diffèrent pour chaque fichier.

J'ai donc réalisé le code suivant:

Public Sub test()

Dim UneColonne As Single
Dim MaPremiereColonne As Single
Dim MaDerniereColonne As Single
Dim Valtest As Single

MaPremiereColonne = 1
MaDerniereColonne = Feuil2.Cells(1, Columns.Count).End(xlToLeft).Column
Valtest = 1

While Valtest <> MaDerniereColonne
For UneColonne = MaPremiereColonne To MaDerniereColonne Step 1
If Feuil2.Cells(1, UneColonne).Value = Valtest Then
Range(Feuil2.Cells(1, UneColonne), Feuil2.Cells(19, UneColonne)).Cut
Range(Feuil2.Cells(20, Valtest)).Paste
Valtest = Valtest + 1
End If
Next UneColonne
Wend
End Sub

En le réalisant pas à pas, j'ai vu que l'algorithme en lui même fonctionne bien à première vue, néanmoins mon erreur vient du couper coller. Je sélectionne les 19 premières lignes de la colonne qui réalise la condition et les coupent vers une nouvelle colonne qui a pour paramètre Valtest (qui les rangera dans l'ordre croissant) à partir de la 20eme ligne.

Merci de votre aide

Ce n'est pas moi qui est écrit ce post, même si il y a quelques jours j'ai eu un problème similaire que j'ai posté sur le forum: https://forum.excel-pratique.com/excel/conversion-exploitation-149567

J'y ai répondu en disant que la fonction substitute de vba et la fonction convertir de excel étaient la solution.

bonjour Florian,

2 propositions, une avec la méthode sort (tri sur place) et une adaptation de ton code (qui suppose que la ligne d'entête contienne les nombres de 1 au nombre de colonnes sans doublons)

Sub aargh()
    With feuil2
        .UsedRange.Sort key1:=.Cells(1, 1), order1:=xlascending, Orientation:=xlByColumns, Header:=xlNo
    End With
End Sub

Public Sub test()

    Dim UneColonne As Single
    Dim MaPremiereColonne As Single
    Dim MaDerniereColonne As Single
    Dim Valtest As Single
    MaPremiereColonne = 1
    MaDerniereColonne = feuil2.Cells(1, Columns.Count).End(xlToLeft).Column
    Valtest = 1
    While Valtest <> MaDerniereColonne + 1
    For UneColonne = MaPremiereColonne To MaDerniereColonne Step 1
        If feuil2.Cells(1, UneColonne).Value = Valtest Then
            Range(feuil2.Cells(1, UneColonne), feuil2.Cells(19, UneColonne)).Cut feuil2.Cells(20, Valtest)
            Valtest = Valtest + 1
        End If
    Next UneColonne
Wend
End Sub

Parfait Merci beaucoup c'est exactement ce qu'il me fallait

Toutes mes confuses pour la méprise alors

Rechercher des sujets similaires à "couper coller vba"