Microsoft 365 Variable tableau : coller uniquement une partie des colonnes

BenHarber

XLDnaute Occasionnel
Bonjour Le Forum,

N’étant pas très à l’aise avec les variables-tableau, je vous soumet mon petit pb.

Au terme d’une procédure, j’obtiens une variable tableau ‘monTab()’ qui s’étend environ sur 40 000 lignes et 10 colonnes.

J’aimerais coller dans une nouvelle feuille, à partir de la cellule A2, toutes les valeurs contenues dans 'monTab()' SAUF CELLES DE LA COLONNE N°1 : autrement dit, j’aimerais coller les colonnes 2 à 10 de monTab(40000,10) à partir de la cellule A2.

Pour l’instant, j’utilise la commande ci-dessous :
Sheets(1).[A2].Resize(UBound(monTab), UBound(monTab, 2)) = monTab
L’ennui, c’est qu’elle colle aussi en colonne ‘A’ de ma feuille, les valeurs de la 1ère col. de monTab(40000,10).

Est-ce que vous auriez une suggestion pour rédiger correctement la commande VBA à mettre en place ?

Merci d’avance pour vos idées !
 

BenHarber

XLDnaute Occasionnel
Bonjour Oneida,
Merci pour votre intérêt. Effectivement, votre remarque est empreinte de bon sens.
Mais j'ai impérativement besoin de cette 1ère colonne (qui recense ma clé d'enregistrement) pour réaliser le traitement de mise à jour des colonnes 2 à 10.
 

Oneida

XLDnaute Impliqué
Re,
Deux tableaux:
Quand vous recuperez les donnees, un tableau recupere les donnees de la premiere "colonne" et le deuxieme le reste
Un tableau:
Ou au plus simple un seul tableau et vous faites une boucle pour n'avoir que de 2 a 10 dans vos cellules
Par contre va etre un peu long en temps d'execution
Vu que je ne sais pas comment vous remplissez votre tableau monTab, peux pas vous en dire plus
 

BenHarber

XLDnaute Occasionnel
Re,
Deux tableaux:
Quand vous recuperez les donnees, un tableau recupere les donnees de la premiere "colonne" et le deuxieme le reste
Un tableau:
Ou au plus simple un seul tableau et vous faites une boucle pour n'avoir que de 2 a 10 dans vos cellules
Par contre va etre un peu long en temps d'execution
Vu que je ne sais pas comment vous remplissez votre tableau monTab, peux pas vous en dire plus
Ah...OK ! La 1ère proposition me semble effectivement plus efficace (même si, à mon goût, elle un peu plus complexe au niveau de la lisibilité du code) : je vais donc essayer de la mettre en œuvre. Merci Oneida 👌

Je pensais cependant qu'il existait une astuce -comme beaucoup d'XLDnautes aiment à les partager sur ce site !- pour basculer d'"un bloc" sur une feuille Excel une ou plusieurs colonnes d'une variable-tableau.
 

BenHarber

XLDnaute Occasionnel
Bonjour BenHarber, Oneida,

Pourquoi pas :
VB:
Application.ScreenUpdating = False
With Sheets(1).[A2].Resize(UBound(monTab), UBound(monTab, 2))
    .Value = monTab
    .Columns(1).Delete xlToLeft
End With
A+
Bonjour Job75,
Merci pour ta suggestion. Effectivement, si la feuille de destination était vierge, c'est une solution qui aurait fonctionnée sans pb.
Mais dans mon cas, le pg effectue une mise à jour d'une partie d'un tableau Excel existant dont la structure ne peut pas être modifiée (en plus, il y a des plages protégées sur certaines colonnes...)
 

BenHarber

XLDnaute Occasionnel
Re,

Bonjour job75, ca roule

BenHarber

Comment remplissez vous votre tableau monTab, c'est peut-etre a ce moment qu'il faut faire le transfert plutot que de remplir un tableau
Oneida, ça ressemble à ça :
With Sheets(1).Range("A2:BY40000")
monTab = Application.Index(.Value, Evaluate("ROW(1:" & .Rows.Count & ")"), [{1,16,17,18,19,20,21,22,23,24}])
End With

Pour résumer :
1) J'extrais les col. 1 + 16 à 24 de ma feuille dans monTab (avec la méthode ci-dessus)
2) Je fais un traitement des données dans monTab
3) Après ce traitement : ce sont les colonnes col. 2 à 10 de 'monTab' que j'aimerais recopier en bloc sur les col. 16 à 24 de la feuille Excel
 

BenHarber

XLDnaute Occasionnel
Oneida, Job75,
Je crois avoir trouvé la solution à mon pb, sans passer par un tableau structuré et en restant sur une seule variable-tableau.
A la toute fin de mon traitement, j'extrais les colonnes 2 à 9 de la variable tableau "monTab" pour les copier sur les colonnes 16 à 24 (P à X) de la feuille Excel avec cette unique ligne de commande :

Sheets(1).[A2].Resize(UBound(monTab), UBound(monTab, 2) - 1) = Application.Index(monTab, 0, [{2,3,4,5,6,7,8,9,10}])

Merci encore pour votre aide et vos suggestions toujours précieuses !
Excellent WE à vous,
BH
 

Discussions similaires

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD