Déclarer correctement un tableau en VBA

cabsen

XLDnaute Junior
Bonsoir le forum,

Je rencontre des difficultés pour intégrer cette macro dans un environnement "Option Explicit"

Code:
Private Sub TransfertAccueil()
'pour le transfert dans 1 page

    Dim bcopier() As Variant
    Dim n As Integer
    

    Application.ScreenUpdating = False
    
    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With
    
    bcopier = Array("B27", "C27", "C102", "C128", "E27", "F22", "O35", "O37", "W35", "W37")
   
   For n = 0 To UBound(bcopier) - 1
     Workbooks("source.xls").Sheets("accueil").Range(bcopier(n)).Copy Destination:=Workbooks("version_new.xls").Sheets("accueil").Range(bcopier(n))
   Next n
   
    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With
    
    Application.ScreenUpdating = True
    
End Sub

J'ai eu des erreurs type :

• indices hors de la plage
• impossible d'affecter au tableau

J'ai tenté de donner une dimension à bcopier dans le code :

• bcopier(107,22) et autres tentatives mais pas plus de résultat…

C'est le morceau bcopier = qui est mis en surbrillance lors du debug.

Si quelqu'un voit où se trouve le problème, je lui serai mille fois reconnaissant.

D'avance merci.
 

bqtr

XLDnaute Accro
Re : Déclarer correctement un tableau en VBA

Bonsoir cabsen,

Tu décalres bcopier comme un tableau alors que c'est une variable associée à la fonction Array.

Si tu mets Dim bcopier as variant tu n'as plus de problème.

Regarde ce liens qui traite des tableaux ICI



Bonne soirée

Edit: Il y a une petite erreur, ton tableau a 10 éléments, l'indexation commence à 0.
Lbound(bcopier) renvoie 0 et Ubound(bcopier) renvoie 9, donc si tu mets :
UBound(bcopier) - 1 il te manquera la dernière valeur : W37, il faut enlever le -1
 
Dernière édition:

cabsen

XLDnaute Junior
Re : Déclarer correctement un tableau en VBA

Merci bqtr,

Cette macro fonctionne maintenant ! :)

En revanche, j'ai appliqué les mêmes modifications à celle qui suit, j'ai aussi lu les conseils techniques issus de ton lien mais rien n'y fait : j'obtiens toujours une erreur de type '9' avec "indices hors de la plage".

Code:
Option Explicit
Option Base 0

Private Sub TransfertSem()
'pour le transfert dans 52 pages

    Dim acopier As Variant
    Dim vers As Variant
    Dim i As Integer
    Dim n As Integer

    Application.ScreenUpdating = False
    
        With Application
            .Calculation = xlManual
            .MaxChange = 0.001
        End With
        
  acopier = Array("C8:F12", "C18:F22", "J18", "J26", "K8:O26", "K32:O39", "R11:R13", "R16:R17", "R30:R36", "R43:R47", "S8:W17", "S23:W47")
  vers = Array("C8", "C18", "J18", "J26", "K8", "K32", "R11", "R16", "R30", "R43", "S8", "S23")
  
        For i = 1 To 52
        If i < 10 Then i = "0" & i
            For n = 0 To UBound(acopier)
            Workbooks("source.xls").Sheets("sem" & i).Range(acopier(n)).Copy Destination:=Workbooks("version_new.xls").Sheets("sem" & i).Range(vers(n))
            Next n
        Next i
        
    Application.ScreenUpdating = True
    
        With Application
            .Calculation = xlAutomatic
            .MaxChange = 0.001
        End With
        
End Sub

Quelque chose m'échappe… :(
 

bqtr

XLDnaute Accro
Re : Déclarer correctement un tableau en VBA

Re,

Je pense que l'erreur vient du nom des feuilles.
Essaye en modifiant comme ceci:


Code:
 For i = 1 To 52
      For n = 0 To UBound(acopier)
            Workbooks("source.xls").Sheets("sem" & Format(i, "00")).Range(acopier(n)).Copy Destination:=Workbooks("version_new.xls").Sheets("sem" & Format(i, "00")).Range(vers(n))
      Next n
 Next i

Attention: si tu as un espace entre "sem" et le N° de la semaine, il faut aussi le rajouter comme ceci ---> Sheets("sem " & Format(i, "00")........


A+
 
Dernière édition:

cabsen

XLDnaute Junior
Re : Déclarer correctement un tableau en VBA

Re,

Chapeau bas bqtr !

Tout fonctionne à présent. Je focalisais sur le tableau et j'en ai oublié que une des choses qui changeaient entre mes deux cas était l'apparition des mes feuilles en "i". :)
 

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils