Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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".
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…