Indice n'appartient pas à la sélection avec RedimPreserve

Bonjour le Forum,

Voilà j'essaye de transférer des données sur une feuille type, a cette fin, je tente de mettre mes données dans un tableau... là j'ai une erreur d'indice... sur cette ligne

tabloR(a, 5) = tablo(1, 8)
5avis.xlsm (33.56 Ko)

Dans ma base de données exemple, j'ai 22 lignes, sachant que je peux en mettre 10 par feuille(voir feuille Avis pour la disposition) comme ceci :

A23 : Nom & Prénom

A24 : Adresse complète

D23 : Date de Naissance

E23 : Montant

Donc 3 feuilles sont nécessaires pour pouvoir accueillir toutes les données...

Je vous remercie pour votre aide...

OLi

Bonsoir,

le ReDim préserve ne peut redimensionner que la dernière taille d'un tableau à plusieurs dimensions.
Donc ReDim Preserve tabloR(1 To a + 1, 1 To 4) n'est pas bon il faut faire :
ReDim Preserve tabloR(1 to 4,1 To a + 1)

Alors oui votre tableau "passe" de vertical à horizontal, mais ce n'est pas grave, il suffit de savoir comment sont les données afin d'en faire ce que l'on veut.
Par contre votre erreur intervient sur cette ligne lors du premier tour de la boucle : tabloR(a, 5) = tablo(1, 8), comme tabloR est dimensionné de 1 à 4 dans votre code, il ne trouve pas l'index 5 ! Si vous "commentez" la ligne le code continue jusqu'au redimensionnement du tableau et là l'erreur intervient sur le ReDim pour les raisons évoqués ci dessus.

@ bientôt

LouReeD

bonsoir,

Sub Transfert()     'tranfert de données pour avis

     Dim Compteur As Integer, a As Integer
     Dim tabloR(), tablo
     Dim FDep  As Worksheet: Set FDep = Worksheets("Données")
     Dim Farr  As Worksheet: Set Farr = Worksheets("Avis")

     tablo = FDep.Range("A1").ListObject.DataBodyRange.Value 'un tableau !!!

     For a = 1 To UBound(tablo) Step 10 '10 noms par fois
          ReDim tabloR(29, 1 To 5) 'vider tabloR
          For Compteur = 0 To 9
               If a + Compteur > UBound(tablo) Then Exit For
               r = Compteur * 3
               tabloR(r, 1) = tablo(a + Compteur, 1) & " " & tablo(a + Compteur, 2)
               tabloR(r + 1, 1) = tablo(a + Compteur, 4) & " " & tablo(a + Compteur, 5) & " " & tablo(a + Compteur, 6)
               tabloR(r, 4) = tablo(a + Compteur, 3)
               tabloR(r, 5) = tablo(a + Compteur, 8)
          Next

          Farr.Range("A23").Resize(UBound(tabloR) + 1, UBound(tabloR, 2)) = tabloR
          Sheets("avis").PrintPreview

     Next

End Sub

Bonsoir LouReed, BsAlv

@LouReed

Merci pour tes explications, c'est plus clair maintenant...(je découvre seulement cette possibilité)

@BsAlv

Bonsoir Bart, grand merci pour ton aide, cela fonctionne très bien, c'est hyper rapide (c'était mon but...)

Est-il possible de sauvegarder, ici pour l'exemple, les 3 feuilles dans un seul onglet ?

Merci d'avance Bart

OLi

Ps: j'ai pas encore répondu à ton dernier mail, j'ai été opéré au genou (une double intervention)...

re,

5avis.xlsm (46.39 Ko)

Bonjour le Forum, Bart

@BsAlv

Merci pour ta proposition en pdf...

De mon coté, j'ai essayé de copier les feuilles dans un onglet, le problème que je rencontre, c'est qu'il ne copie pas l'entièreté de la feuille...

Peux-tu m'aider ou se trouve le problème ?

Merci d'avance Bart

2avis-copie.xlsm (46.59 Ko)

re,

je n comprend pas pourquoi on ajuste l'hauteur et la largeur des lignes et colonnes.

Essayez aussi de vous documenter et comprendre cette "With ... End With" construction, parce que cela facilite le reste

3avis-copie.xlsm (52.73 Ko)
Rechercher des sujets similaires à "indice appartient pas selection redimpreserve"