Macro Excel swap de colonnes sous conditions

Stevenp -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je dois créer une macro excel (mais étant débutant dans le domaine) permettant de swaper 2 colonnes dans une liste de données.

En gros j'ai une liste (de longueur variable) contenant 11 Colonnes.

Je dois tester si
- La valeur (texte) de la colonne 4 est égal à "X" ou "Y"
- et si la colonne 11 n'est pas vide.

=> Dans ce cas, inverser la colonne 4 et 11 ; sinon rien faire.

Mais je suis bloqué..

Merci d'avance de votre aide !

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    ok, un peu de patience...
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Option Explicit
    Const Deb As Byte = 3 'ligne de départ
    
    Sub intervertir_D_K_si()
    Dim Fin As Integer, cptr As Integer
    Dim T_4, T_11
    Dim vers_11
    'initialisations
    With Application
         .ScreenUpdating = False
         Fin = Columns(4).Find("*", , , , , xlPrevious).Row
         T_4 = .Transpose(Range(Cells(Deb, 4), Cells(Fin, 4)).Value)
         T_11 = .Transpose(Range(Cells(Deb, 11), Cells(Fin, 11)).Value)
    End With
    
    'swap
    For cptr = 1 To UBound(T_4)
         If Not IsEmpty(T_11(cptr)) And (T_4(cptr) = "X" Or T_4(cptr) = "Y") Then
              vers_11 = T_4(cptr)
              T_4(cptr) = T_11(cptr)
              T_11(cptr) = vers_11
         End If
    Next
    
    'tableaux aménagés
    Cells(Deb, 4).Resize(UBound(T_4), 1) = Application.Transpose(T_4)
    Cells(Deb, 11).Resize(UBound(T_11), 1) = Application.Transpose(T_11)
    
    
    End Sub

    0