XL 2010 Mettre colonnes dans array

cathodique

XLDnaute Barbatruc
Bonjour:),

J'ai besoin de vos conseils et suggestions.
Je voudrais à partir d'une feuille bd ne récupérer que certaines colonnes dans un ordre différents.
La bd aura un nombre de lignes important, j'ai pensé utiliser un array. Pour ma rapidité d’exécution. Mais là, j'avoue être bloquer.

Sur les 12 colonnes je ne récupère que 8. La nouvelle disposition des colonnes est en feuille 'résultat'.

En vous remerciant. Toutes propositions sera la bienvenue.
 

Pièces jointes

  • Colonnes dans array.xlsm
    12.8 KB · Affichages: 38

vgendron

XLDnaute Barbatruc
Hello

en transformant ton tableau en Table Excel "TabBd" et ce code
VB:
Sub extract()
Dim TabResult()
With Sheets("resultat")
    NbColonnesResult = .Cells(1, .Columns.Count).End(xlToLeft).Column 'nb de colonnes à exporter
    Set ListeColonne = .Range("A2").Resize(, NbColonnesResult) 'récupère la liste des noms de colonnes
 '!! attention, les noms doivent être strictement identiques !! -->Détail à remplacer par Commentaires et Pointage par Banque"
End With

With Sheets("bd")
    NbLignesResult = .Range("A" & .Rows.Count).End(xlUp).Row 'nb de lignes à exporter
    ReDim TabResult(1 To NbColonnesResult, 1 To NbLignesResult) 'déclaration du tableau
   
    i = 1 'on alimente le tableau
    For Each NomCol In ListeColonne
        NumCol = .Range("TabBd[" & NomCol & "]").Column
        For j = 1 To NbLignesResult
            TabResult(i, j) = .Cells(j + 5, NumCol)
        Next j
        i = i + 1
    Next NomCol
End With

For i = 1 To NbColonnesResult 'on verse le tableau dans la feuille résultat
    For j = 1 To NbLignesResult
        Sheets("resultat").Cells(j + 2, i) = TabResult(i, j)
    Next j
Next i

End Sub
 

job75

XLDnaute Barbatruc
Bonjour cathodique, vgendron,

A placer dans le code de la feuille "resultat" :
Code:
Private Sub Worksheet_Activate()
Dim c As Range
Application.ScreenUpdating = False
With [A1].CurrentRegion
  .Offset(2).Delete xlUp 'RAZ
  For Each c In .Rows(1).Cells
    Feuil1.[A5].CurrentRegion.Offset(1).Columns(Mid(c, 4)).Copy c(3)
  Next
End With
End Sub
Pas besoin d'un Array puisqu'en ligne 1 sont indiquées les colonnes...

A+
 

Pièces jointes

  • Colonnes dans array(1).xlsm
    23.9 KB · Affichages: 29

cathodique

XLDnaute Barbatruc
Bonjour Vgendron:),

Merci beaucoup pour ton code. J'avais omis de préciser qu'initialement la feuille 'résultat' est vide.

J'y ai mis le résultat attendu. Je voulais vraiment savoir comment créer une variables tableau en ne récupérant que certaines colonnes.

J'ai exécuté ton code et il plante sur cette ligne NumCol = .Range("TabBd[" & NomCol & "]").Column

Merci quand même. ;)
 

cathodique

XLDnaute Barbatruc
Bonjour Job75:),

Merci, je suis preneur de toutes propositions. Bien que j'aimerais apprendre à mettre des colonnes suivant un ordre défini dans un tableau.

Ton code plante sue cette ligne Feuil1.[A5].CurrentRegion.Offset(1).Columns(Mid(c, 4)).Copy c(3)

erreur 13, incompatibilité de type.

Merci beaucoup.;)
 

job75

XLDnaute Barbatruc
Re,

Maintenant si l'on supprime la ligne 1 de la feuille "resultat" il faut bien sûr un Array :
Code:
Private Sub Worksheet_Activate()
Dim col, n%
col = Array(2, 1, 5, 9, 8, 6, 7, 12)
Application.ScreenUpdating = False
With [A1].CurrentRegion
  .Offset(1).Delete xlUp 'RAZ, les titres sont en ligne 1
  For n = 0 To UBound(col)
    Feuil1.[A5].CurrentRegion.Offset(1).Columns(col(n)).Copy .Cells(2, n + 1)
  Next
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Re,
J'avais omis de préciser qu'initialement la feuille 'résultat' est vide.
Bah c'est un oubli impardonnable o_O

Alors il faut redéfinir les en-têtes des colonnes :
Code:
Private Sub Worksheet_Activate()
Dim col, n%
col = [{2,"N°";1,"Date";5,"Initiateur";9,"Mt_Initial";8,"Détails";6,"Dépenses";7,"Recettes";12,"Pointage"}]
Application.ScreenUpdating = False
[A1].CurrentRegion.Delete xlUp 'RAZ, les largeurs des colonnes sont conservées
For n = 1 To UBound(col)
  Feuil1.[A5].CurrentRegion.Columns(col(n, 1)).Copy Cells(1, n)
  Cells(1, n) = col(n, 2)
Next
End Sub
Edit : au post #3 j'ai joint le fichier pour bien montrer que la macro ne plante pas !!!

A+
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Mon Cher Job75:),

Je connaissais tes compétences pour avoir lu plusieurs de tes interventions. Tu ne fais que confirmer mon avis.

C'est vraiment le top. En fait, c'est toujours l'expérience qui fait la différence.

Mon idée était d'utiliser une macro standard pour extraire les données et ensuite pour imprimer.

Je voulais pour les colonnes A, B, C et D fusionnées les cellules ayant la même données sur la ligne suivante.

Je l'ai déjà fait mais je dois fouiner dans mes archives.

Merci beaucoup pour ton aide et ton partage. C'est l'objectif de ma présente discussion. C'est pour donner un coup de main.
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400