Macro Excel swap de colonnes sous conditions
Stevenp
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
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 !
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 !
A voir également:
- Macro Excel swap de colonnes sous conditions
- Formule moyenne excel plusieurs colonnes - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Windows swap - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Déplacer colonne excel - Guide
2 réponses
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