[VBA] Erreur transfert tableau() vers feuille

Fermé
Shaar - 30 mai 2018 à 17:15
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 31 mai 2018 à 12:36
Bonjour,
J'essaye de transférer le contenu d'une variable sur plage Excel.

Voici mon code :

Sub totot()
Dim tableau() As Variant
Set ws1= Worksheets("ws1")
Set ws2= Worksheets("ws2")
i = 1
dernligne = 100
Var = 1
j = 1


While ws1.Cells(i, 1) <> ""

ReDim Preserve tableau(i - 1) As Variant

' on parcours les données en gardant en mémoire ce qui a été parcouru
If ws1.Cells(i, 9) > ws2.Cells(Var, 4) Then
Var = Var + 1
Else
If ws1.Cells(i, 9) >= ws2.Cells(Var, 3) Then
tableau(i - 1) = ws2.Cells(Var, 1)
End If
End If
i = i + 1
Wend

Range(Cells(1, 12), Cells(i - 1, 12)).Select
Selection = tableau

End Sub


Mon tableau contient bien les valeurs que je souhaite mais lors que j'essaye de le mettre sur la feuille Excel, je n'obtient que la 1ère valeur de mon tableau. J'ai réduit la taille de la plage selectionné car sinon elle contenait une valeur en trop (le tableau initiant à 0). Néanmoins, cela ne me change rien.

Merci de votre aide

A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
30 mai 2018 à 17:36
Bonjour
Range(Cells(1, 12), Cells(i - 1, 12))=application.transpose(tableau)
ou
cells(i,12).resize(i-1,12)=application.transpose(tableau)

(mais tu pouvais te passer du passage en redim préserve)

A quoi sert "var" ?

les select-selection sont à eviter en VBA
0
Merci du retour,

Le problème de l'utilisation du transpose classique est que j'ai plus de 65 000 valeur.

Je ne suis pas fan du select / selection mais je fais ça quand je suis en mode debug.

Le vari était une recherche non pertinente que je n'ai pas supprimé dans mon code.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
Modifié le 31 mai 2018 à 13:34
Effectivement au dela de 65536, transpose ne fonctionne plus

ci dessous une étude-test d'utilisation de variable tableau avec 65537 lignes
le tableau doit ^tre à 2 dimensions 1 to lig, 1 to1

Sub tablo2()
Dim Lig As Long, T_prep2, Cptr As Long
Columns("A").Clear
Lig = 65537
ReDim T_prep2(1 To Lig, 1 To 1)
For Cptr = 1 To Lig
T_prep2(Cptr, 1) = "aze" & Cptr
Next
Range("A1").Resize(Lig, 1) = T_prep2
End Sub


tu n'as pas besoin d'utiliser un redim preserve car pour les lignes non admises par le if restitueront du vide ou alors tu fais ce redim preserve juste avant la restitution si il a des cellules occupées en dessous

mais utiliser un parcours de cellules ligne par ligne sur 66000 lig env. est chronophage: peut-etre passer par des variables tableaux...

0