Déplacement de colonnes sous condition macro Excel 2003

Fabien_B

XLDnaute Nouveau
Bonsoir à tous,

Je rencontre actuellement des problèmes avec une macro Excel que je cherche depuis un petit moment.
J'ai le principe algorithmique dans la tête mais je ne connais pas le langage VBA spécifique à Excel ayant programmé sous Access au lycée.

En fait, je souhaiterais faire une macro qui déplace une colonne en fonction du titre de la colonne, par exemple : en premier colonne j'ai "ad1", et deuxième colonne "nom1", en troisième colonne "codeville" pour une gestion d'adresses.
Je souhaiterais établir l'ordre "nom1", "ad1" et "codeville", je suis à la recherche d'une macro qui me déplacerait la colonne entière afin de remettre de l'ordre dans les fichiers Excel.

J'ai trouvé des codes qui je pense s'y rapprochaient mais sans succès, alors j'ai voulu repartir de zéro.
J'ai pensé à passer en revu toutes les cellules avec une boucle Pour i allant de 1 à 10000 puis une comparaison avec un Si : Si A1 <> "nom1" alors chercher la colonne ayant pour titre "nom1" puis la placer dans la première colonne (avec sûrement une variable pour ne pas perdre mes valeurs dans les colonnes) mais voilà, je ne sais pas du tout comment écrire ça en VB pour Excel.

Si vous avez une meilleure astuce avec un peu d'aide sur le VBA d'Excel, je suis preneur !
N'hésitez pas à me demander des précisions si ce n'est pas clair.

Merci
 

ROGER2327

XLDnaute Barbatruc
Re : Déplacement de colonnes sous condition macro Excel 2003

Bonsoir Fabien_B
Le code :
Code:
[COLOR="DarkSlateGray"]Sub EchangeAB()
    Columns("A:A").Insert Shift:=xlToRight
    Columns("C:C").Cut Destination:=Columns("A:A")
    Columns("C:C").Delete Shift:=xlToLeft
End Sub[/COLOR]
échange les colonnes A et B.​
ROGER2327
 

Excel-lent

XLDnaute Barbatruc
Re : Déplacement de colonnes sous condition macro Excel 2003

Bonsoir et bienvenu sur le forum Fabien B,
Bonsoir ROGER2327,

Voici ci-dessous une macro faisant la même chose que celle proposé par ROGER2327 :

Code:
Sub EchangeABversion2()

    Columns("B").Cut
    Columns("A").Insert

End Sub

Bonne soirée à tous

Edition : bonsoir Bhbh!!! Tu as été le plus rapide!!! :( Je m'incline! Mais mon code est plus court que le tiens :)
 

Fabien_B

XLDnaute Nouveau
Re : Déplacement de colonnes sous condition macro Excel 2003

Est-ce possible d'effectuer cette permutation ou non à l'aide d'un test du titre de la colonne ?

En tout cas merci pour vos réponses, ça me débloque


Edit : Merci pour le message de bienvenue Excel-lent
 

Excel-lent

XLDnaute Barbatruc
Re : Déplacement de colonnes sous condition macro Excel 2003

Bonsoir à tous,

Oui c'est possible, il te suffit de rajouter une condition If ... Then .... End If

Ce qui peut par exemple te donner cela :
Code:
Sub EchangeABversion2()

  [COLOR="Blue"]If[/COLOR] [A1] = "Toto" [COLOR="Blue"]Then[/COLOR]
       Columns("B").Cut
       Columns("A").Insert
  [COLOR="Blue"]End If[/COLOR]
End Sub

Ce qui signifie, si la cellule A1 contient le mot "toto", alors la macro permute la colonne B et A, sinon la macro s'arrête sans rien faire.

Bonne soirée à toi

Edition : Bhbh, Ah oui! C'est vrai qu'en utilisant le numéro de la colonne on économise les guillemets! J'avais zapé cette astuce! Chapeau bas

Edition 2 : La fonction "If... Then... End If" fonctionne comme la fonction excel SI()

If condition Then faire ceci si la condition est vrai End If

Mais sinon tu as également ceci :
If condition Then si condition vrai faire ceci Else si condition fausse faire cela End If
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Re : Déplacement de colonnes sous condition macro Excel 2003

Re-,

et plus sérieusement.... :p

un tri de la base, mais de gauche à droite, et non par lignes...

Code:
Range("A1:C" & [A65000].End(xlUp).Row).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
         Orientation:=xlLeftToRight

Maintenant, on peut trier selon un choix personnel....

Choix personnel qu'il faudra créer dans la liste personnelle de l'option :

Outils/Options, onglet "Liste Personnelle"....

Envoie un tout petit exemple de ta base, dans l'onglet 1, et dans l'onglet 2, ce que tu désires....
 

Fabien_B

XLDnaute Nouveau
Re : Déplacement de colonnes sous condition macro Excel 2003

D'accord merci, cela prend en compte que le mot ou le titre ?
Enfin de toute façon vu que ce sont des adresses, j'suppose qu'y en a aucun qui s'appelle Nom1, Nom2 et qui a pour adresse Ad1, Ad2, Ad3 et Codeville mais bon xD

Merci pour la synthèse et le code, j'étais parti sur une idée similaire pour le Si Alors FinSi mais je ne pensais pas que ça marcherait "brut" comme ça.

Merci à tous, je note puis je teste ça demain sur mes fichiers.
Bonne soirée à vous !
 

Fabien_B

XLDnaute Nouveau
Re : Déplacement de colonnes sous condition macro Excel 2003

Ce lien n'existe plus

Voilà un exemple, les colonnes sont volontairement dans le mauvais ordre, l'ordre correct est :

Ref, Nom1, Nom2, Ad1, Ad2, Ad3, Codeville.

Edit : désolé j'ai oublié de faire l'onglet 2 qui est ce que j'ai cité juste au-dessus.
 

Excel-lent

XLDnaute Barbatruc
Re : Déplacement de colonnes sous condition macro Excel 2003

Excel-lent à dit:
If [A1] = "Toto" Then...

Fabien_B à dit:
D'accord merci, cela prend en compte que le mot ou le titre ?

Dans l'exemple, le contenu de la cellule doit être "Toto" pour que la macro s'exécute! Par contre, si dans la cellule A1 tu as "Toto et Tata", la macro ne s'exécutera pas!

Car "Toto" est différent de "Toto et Tata".
Comme par exemple "Toto" est différent de "Toto " (car il y a un espace en plus - or l'espace est un caractère)

Donc pour résumer, le code ci-dessus prend en compte la totalité du contenue de la cellule!

Fabien_B à dit:
qui s'appelle Nom1, Nom2 et qui a pour adresse Ad1, Ad2, Ad3

Tu veux parler de variables? Ou de noms que tu aurais donné à tes cellules ("Insertion"/"Nom"/"Définir...") ?

A te lire
 

Fabien_B

XLDnaute Nouveau
Re : Déplacement de colonnes sous condition macro Excel 2003

Dans l'exemple, le contenu de la cellule doit être "Toto" pour que la macro s'exécute! Par contre, si dans la cellule A1 tu as "Toto et Tata", la macro ne s'exécutera pas!

Car "Toto" est différent de "Toto et Tata".
Comme par exemple "Toto" est différent de "Toto " (car il y a un espace en plus - or l'espace est un caractère)

Donc pour résumer, le code ci-dessus prend en compte la totalité du contenue de la cellule!

Ha ! Moi il faudrait que je prenne en compte que le titre pour déplacer la colonne entière en fait. Donc si en dessous de "Nom1" j'ai "Dupond" ça sera "Nom1"+"Dupond" qui seront pris en compte et pas juste "Nom1" si j'ai bien compris.


Sinon je voulais dire que personne ne s'appelle Nom1 Nom2 et aucune rue ne s'appelle Ad1 Ad2 ou Ad3 etc par contre c'est les titres de mes colonnes.
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Re : Déplacement de colonnes sous condition macro Excel 2003

Re-,

en fonction de ton fichier exemple...

A adapter, of course....

(Mef, tu as un espace après Adr2..... dans ton fichier exemple...)

fichier :
 

Pièces jointes

  • tri horizontal_puis_vertical.xls
    27.5 KB · Affichages: 102

Fabien_B

XLDnaute Nouveau
Re : Déplacement de colonnes sous condition macro Excel 2003

Re,

C'est parfaitement ce que je recherchais
Merci beaucoup pour votre aide à tous, j'adapterai en fonction, j'ai compris le code et l'espace après Ad2 n'était pas volontaire.
Sur ce, je vous souhaite une bonne soirée et encore merci pour votre patience !
Je posterai demain pour vous tenir au courant du résultat mais en tout cas la macro fait exactement ce que je voulais.
 

Discussions similaires

Statistiques des forums

Discussions
314 073
Messages
2 105 361
Membres
109 339
dernier inscrit
Nature Sereine