Microsoft 365 Variable tableau : coller uniquement une partie des colonnes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 !
 
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.
 
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
 
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.
 
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...)
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour