Ecrire une variable tableau sur une feuille avec colonne masquéees

Ecrire une variable tableau sur une feuille avec colonne masquéees - VB/VBA/VBS - Programmation

Marsh Posté le 23-11-2018 à 14:58:30    

Bonjour,  
 
Je dispose d'un tableau à 2 dimensions, constitué de ~ 60 colonnes, et d'une feuille avec ~60 colonnes. Pour faciliter la naviguation, certaines colonnes doivent être masquées.  
 
Lorsque je souhaite écrire le tableau dans ma feuille, à l'aide de la méthode Range("..." ) = Montableau
ou Cells(Row,1).resize(Lbound(montb),Ubound(montb)) = montb
 
Les colonnes masquées crééent un bug : Après chaque colonne masquée le tableau est "réécrit" à partir de sa première colonne.  
 
 
Pour pallier à ceci, pour écrire le tableau dans la feuille :  
 

  • Je stocke quelle colonnes est masquée
  • Je démasque toutes les colonnes
  • J'écris mon tableau
  • Je masque les colonnes initialement masquées.


Cela ralenti considérablement ma macro. Est-il possible d'écrire mon tableau directement, avec la même méthode que Range("..." ) = montableau, malgré les colonnes masquées ?  
 
 
 
 
Voici ce que j'ai codé temporairement pour contourner le problème :

Code :
  1. 'Stock wich column is hided or not, Hidden = True
  2.     ReDim tbvisiblecolumn(lastcolmb)
  3.     For i = 1 To lastcolmb
  4.         If Columns(i).EntireColumn.Hidden = True Then
  5.             tbvisiblecolumn(i) = True
  6.         Else
  7.             tbvisiblecolumn(i) = False
  8.         End If
  9.     Next
  10.     'Unhide all columns
  11.     On Error Resume Next
  12.         For i = 1 To lastcolmb
  13.             If tbvisiblecolumn(i) = True Then
  14.                 Columns(i).EntireColumn.Hidden = False
  15.             End If
  16.         Next
  17.     On Error GoTo 0
  18.     'Write tbwrite()in sheet mb
  19.     If CBOptions = False Or ActiveCell.Value = "" Then
  20.         If nbrow > 1 Then mb.Rows(Arow + 1).Resize(nbrow - 1).EntireRow.Insert Shift:=xlDown
  21.         Range(mb.Cells(Arow, 1), mb.Cells(Arow + nbrow - 1, lastcolmb)) = tbwrite
  22.     Else
  23.         mb.Rows(Arow + 1).Resize(nbrow).EntireRow.Insert Shift:=xlDown
  24.         mb.Cells(Arow, 1).Resize(nbrow + 1, lastcolmbt) = tbwrite
  25.     End If
  26.     'Hide columns wich where hided
  27.     For i = 1 To lastcolmb
  28.         If tbvisiblecolumn(i) = True Then
  29.             Columns(i).EntireColumn.Hidden = True
  30.         End If
  31.     Next
  32.     OptimizeCode_End


 
Merci d'avance !


Message édité par framboize1 le 23-11-2018 à 15:01:53
Reply

Marsh Posté le 23-11-2018 à 14:58:30   

Reply

Marsh Posté le 29-11-2018 à 16:12:28    

Si tu n'as pas désactivé le rafraîchissement de l'affichage en cours de macro, c'est peut être la solution simple.
(Application.ScreenUpdating)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed