Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 sélection de colonne et ordonnancement des colonnes en déclarant en variable les entêtes

ftpo69

XLDnaute Nouveau
Bonjour à toutes et tous.
Je souhaite travailler en VBA sur des données que je reçois quotidiennement en tableau excel.
Malheureusement, les colonnes ne sont pas toujours au même endroit selon les jours.
Je souhaite donc sélectionner certaines colonnes et les ordonnancer selon un ordre bien précis.
Pour cela, je cherche à déclarer en variable les intitulés des colonnes, qui eux ne changent pas, afin d'en sélectionner certaines et de les ranger dans l'ordre que je souhaite.
J'ai illustré mon propos dans l'exemple joint, avec dans l'onglet "data" le tableau source et "résultat" le résultat souhaité.
Merci de votre aide, car les dim et integer sont pour moi du chinois☺
 

Pièces jointes

  • exemple.xlsx
    9.6 KB · Affichages: 6

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @ftpo69 ,

Une petite macro évènementielle à placer dans le module de code de la feuille "résultat".
Le tableau de la feuille "résultat" est automatiquement mis à jour quand on active la feuille "résultat".
Les colonnes sur la feuille résultat sont repérées par leur en-tête sur la ligne 1de la cette feuille résultat.

Le code :
VB:
Private Sub Worksheet_Activate()
Dim j&, entete$, n&
   Application.ScreenUpdating = False
   With Sheets("résultat")
      For j = 1 To Columns.Count
         entete = .Cells(1, j)
         If Trim(entete) = "" Then Exit For
         .Cells(2, j).Resize(Rows.Count - 1).Clear
         n = Application.IfError(Application.Match(entete, Sheets("data").Rows(1), 0), 0)
         If n Then Sheets("data").Columns(n).Copy .Columns(j)
      Next j
   End With
End Sub
 

Pièces jointes

  • ftpo69- copier colonnes selon en-tête- v1.xlsm
    17 KB · Affichages: 4

ftpo69

XLDnaute Nouveau
Bonjour mapomme.
Merci pour ce code. Il fonctionne très bien dans le cas où la feuille "Resultat" existe à l'avance.
Si je pars d'un classeur avec uniquement la feuille data et que je crai la feuille Résultat en mettant en A1 Colonne1, en B1 Colonne2, en C1 Colonne3, comment puis-je intégrer ton code évènementielle?

Sheets.Add After:=ActiveSheet
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "Resultat"
Sheets("Resultat").Select
ActiveCell.FormulaR1C1 = "Colonne1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Colonne2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Colonne3"
Sheets("data").Select
Range("A1").Select
ActiveWorkbook.Save
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…