Macro Excel - Faire appel à une colonne spécifique

Bonjour, je viens vers vous pour 2 questions connes...

1) J'ai un fichier avec 4 colonnes ex : nom prénom adresse téléphone

Je souhaite intervertir les colonnes "prénom" et "nom"

A la base j'utilise le code suivant (qui fonctionne très bien )

Columns("A:A").Select

Selection.Insert Shift:=xlToRight

Il peut arriver que sur certains tableau, les colonnes sont dans le bon ordre et comme j'ai environ une dizaine de base à gérer de ce style, je voudrais trouver un code prenant non pas en compte colonne A colonne B etc etc mais un nom spécifique (ici "nom", "prénom"....) contenu sur la ligne A).

un truc de ce style :

Selectionne la colonne intitulé "nom"

L'insérer en colonne A

2) sur mes mêmes colonnes, je dois changer les titres afin de les communiquer à des clients (anglais)

ex : la colonne qui a comme titre "Nom" (peu importe ou elle se trouve sur la ligne A...) doit se renommer "Nom client"

Voila, je vous remercie par avance

Bonjour

Faute de support je l'ai interprété à ma manière

Option Explicit

Sub Deplace()
Dim Cel As Range

  Set Cel = Rows(1).Find(what:="Nom", LookIn:=xlValues, lookat:=xlWhole)
  If Not Cel Is Nothing Then
    If Cel.Column > 1 Then
      Columns(Cel.Column).Cut
      Columns(1).Insert
    End If
    Range("A1") = "Nouveau Nom"
  Else
    MsgBox "Colonne Nom : Non trouvée"
  End If
End Sub

Merci pour ton début de code mais dure à appliquer a mon code (je suis novice...)

Pour le moment, je prend des blocs a droite à gauche pour arriver a mes fins.

Ma console de départ est la PJ "pilotage rapport des ventes .jpg"

La macro mise en forme me sert à aller ouvrir un fichier dans un chemin spécifique, appliquer les formules a tous les fichiers et tous les onglets s'y trouvant (fichier MEF1, MEF2...). En vrai conditions, j'ai 6 ou 7 fichiers de 6 onglets a gérer.

Private Sub MEF_Click()

End Sub

j'en suis à la version expérimentale donc certaines lignes sont a retirer j'ai repiqué des bout de code...

Le travail ou je bloque se trouve en gras :

1) que la macro désélectionne bien tous les filtres

2) Que les déplacements de colonnes s'effectuent sur le nom des colonnes et non sur les colonnes A etc etc

3) Pas encore fait : Une fois le fichier mis en forme, renommer le nom d'une colonne par un autre nom

Merci pour os réponses

pilotage rapport des ventes

Bonjour

J'ai bien envisagé une nouvelle macro pour faire ce que tu veux

Mais je l'ai testé sur rien

Donc je te la livre telle quelle (sans garantie aucune)

Le mieux serait que tu joignes ton fichier principal et 1 ou 2 fichiers à traiter (tous anonymisés bien sur)

Option Explicit

Private Sub MEF_Click()
Dim Ws As Worksheet
Dim Cel As Range
Dim AncienNomColonne
Dim NouveauNomColonne
Dim I As Integer
Dim K As Integer

  AncienNomColonne = Array("Fréquence de paiement", "UW", "IPT", "Totbill Inc Disc", _
                           "Cancel date", "date fin finale", "Date début finale", "Cover type reel", "Start Date")
  NouveauNomColonne = Array("Fréquence de paiement", "UW", "IPT", "Totbill Inc Disc", _
                           "Cancel date", "date fin finale", "Date début finale", "Cover type reel", "Start Date")

  ' répertoire où se trouve le fichier (en B3 sur notre fichier)
  ' Cells(3, 2).value : contient strRepertoire
  ' Cells(I, 3).Value : contient strFichier

  For I = 6 To Cells(4, 3).Value + 5
    Workbooks.Open Filename:=Cells(3, 2) & "\" & Cells(I, 3).Value
    For Each Ws In Worksheets
      If Left(Ws.Name, 1) <> "R" Then         ' On inverse la condition : On traite si le nom ne commence pas par R
        With Ws                               ' On travaille avec la feuille
          On Error Resume Next                ' Si pas de filtre il n'y aura pas de plantage
          ' Supprimer tous les filtres
          .ShowAllData
          On Error GoTo 0

          .Cells.Copy
          .Cells.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
                              Operation:=xlNone, SkipBlanks:=False, Transpose:=False

          ' Suppression des colonnes A et B
          .Columns("A:B").Delete

          ' En prenant la liste des colonnes à l'envers on cherche la colonne et on l'insère toujours en colonne B
          For K = 1 To UBound(AncienNomColonne)
            Set Cel = .Rows(1).Find(what:=AncienNomColonne(K), LookIn:=xlValues, lookat:=xlWhole)
            If Not Cel Is Nothing Then
              .Columns(Cel.Column).Cut
            End If
            ' Si la colonne est pas trouvée elle sera copiée sinon une colonne sera insérée
            .Columns(2).Insert
            .Range("B1") = NouveauNomColonne(K)             ' Si l'on veut changer
          Next K

          ' On efface le reste de la page
          .Columns("K:BB").Delete

'' ***********  Quelle utilité de ce code ? *************
'          ' la valeur 4 ici c'est à dire la colonne
'
'          n = ActiveSheet.Range("A1").End(xlDown).Row
'          If n = 65536 Then
'            GoTo suivant
'            ' il existe pas la valeur neg
'          End If
'' ********************************************************
        End With
      End If
suivant:
    Next Ws

    With ActiveWorkbook
      .Save
      .Close
    End With
  Next I

  MsgBox ("Travail effectué")
End Sub

Les codes que tu as encadré en vert ne servent à rien, cela fait partie des bouts de code que j'ai "adapté" et qui reste a enlever (pris par le temps et la requête tournant, j'ai laissé comme ca)

Tous les fichiers se trouvent en PJ

A la base, j’ai mes données brutes que j’ai traité (fichiers MEF1 et MEF2)

1) J’ouvre le fichier « Macro rapport des ventes » pour lancer la requête « mise en forme » (sub MEF)

En B3 : chemin ou sont stockées les fichiers à traiter

En C6, D6…. : nom des fichiers à traiter

Seul les colonnes en jaune me servent

La macro fait tourné environ 1 500 000 lignes dans 6/7 fichiers de 3/4 onglets chacun (d'ou l'automatisation des copier coller lol car il y en a pour 2/3 de taff)

2) Une fois la macro terminée, j’obtiens les fichiers MEF1 après macro et MEF2 après macro

(Pour le moment ma macro fonctionne)

3) Le traitement finale que je souhaite obtenir est dans MEF1 résultat final et MEF2 resultat final

A noter que , dans l’ordre :

Nom colonne devient

Policy Number devient Membership n°

Star Date devient Subscription date

Cover type réel devient Cover Type

date début finale devient Payment cover date from

date fin finale devient Payment cover date to

Cancel Date devient date of cancellation

Totbill Inc Disc devient Premium

IPT devient Taxes

Underwriting devient Net Premium

Fréquence paiement devient Time frame of payments

Voila, j’espère que c’est plus simple à comprendre lol

Merci de ton aide en tous cas

36base-pour-int.zip (46.77 Ko)

Bonjour

A voir

Attention le nom des colonnes est important

Je viens de regarder ce que tu as fait et ca fonctionne nickel

J'ai rajouté quelques bout de code pour la mise en forme etc etc

Il y a pas à dire, bien codé ca va beaucoup plus vite (surtout sur 2 millions de lignes)

Merci pour ton aide

Rechercher des sujets similaires à "macro appel colonne specifique"