Résultats pour "redim"

9 résultats pour cette recherche

Bonjour,

J'ai de l'ordre de 60000 lignes à analyser (vouer à augmenter). Tout un code permet d'en faire l'analyse et complète un tableau à 3 dimensions:

Le tableau qui se rempli est le suivant : Analyse(beaucoup, 14, 6)

la dimension 2 et 3 sont maîtrisées, cependant pour la premiere dimension, ça dépend de le base qui est analysée, il est donc compliquer d'estimer le nombre de ligne à prévoir lors de la déclaration. Par défaut jusqu'à maintenant je mettais une très grande valeur.

le tableau Analyse est ensuite utilisé pour restituer des résultats, et c'est là où ça pêche. Faire tourner des boucle sur un nombre de ligne inutilement grand prend beaucoup de temps.

Le problème, c'est que je n'ai pas trouvé de façon de réduire ce nombre de ligne (supprimer les vides) je cherche donc :

  • à utiliser une fonction de type Redim Preserve (mais ne fonctionne que sur la dernière dimension d'après l'aide)
  • avoir une fonction permettant de trouver rapidement le taux de remplissage du tableau (équivalent d'un Ubound mais pour les valeurs non vides)
- Idéalement pour chaque cas des dimensions suivante .. Analyse( x, 1,1) , Analyse(y , 2, 1) ..

PS: pas possible de partager mon code, données confidentielles. Mais il ne devrait pas y en avoir besoin.

Merci ! J'ai pas mal cherché sur notre ami Google mais on tombe trop rapidement sur Redim Preserve ou application.max qui ne fonctionnent pas, ou je n'ai pas réussi à faire fonctionner.

Bonjour ,

J'ai créer un tableau et j'aimerai qu'à nouvelle ligne, mon nombre de colonne puisse augmenter ; j'ai donc utiliser un ReDim Preserve.

Cela ne fonctionne pas...

Ci dessous mon code: Le problème se situe au niveau de la ligne ReDim Preserve arrayRef(k,1 To l)

Sub variables()

'Déclaration des variables

Dim livraison As Variant

Dim Article As Variant

Dim myPage As Variant

Dim myArray As Variant

Dim arrayRef As Variant

Dim i As Long

Dim k As Long

Dim l As Long

Dim refMax As Long

'Valeurs des variables

With Worksheets("Portefeuille")

livraison = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, 1)).Value

Article = .Range(.Cells(2, 3), .Cells(.UsedRange.Rows.Count, 3)).Value

ReDim arrayRef(0, 0)

ReDim myArray(0)

myArray(0) = .Cells(2, 1).Value

arrayRef(0, 0) = .Cells(2, 3).Value

k = 0

l = 0

refMax = 1

arrayRef(k, l) = .Cells(1, 3)

For i = 2 To .UsedRange.Rows.Count

If .Cells(i, 1) = .Cells(i - 1, 1) Then

If l > refMax Then

ReDim Preserve arrayRef(k, l + 1)

End If

Else

k = k + 1

ReDim Preserve myArray(k)

myArray(k) = Cells(i, 1)

ReDim Preserve arrayRef(k,1 To l)

arrayRef(k, l) = Cells(i, 3)

End If

Next

End With

End Sub

vba redimpreserve vba redimpreserve

Bonjour à toutes et à tous,

J'ai eu beau chercher à travers toute la toile ma réponse et mêmes aux travers des différents cours du site je n'arrive pas à trouver la solution de mon problème.

Je cherche simplement à déclarer une plage en temps que tableau dynamique sachant que les données de cette plage sont variable. En gros, un jour ma plage pour être A1:C350 et demain être A1:C250 sachant que cette plage ne comptera toujours que trois colonnes.

La seule option que j'ai est de définir une plage fixe mais ça ne m'arrange pas car ça alourdi le fichier.

De plus, peut-être (surement) que je fais une erreur mais je passe par le code suivant pour passer ma plage en tableau dynamique :

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$1000"), , xlYes).Name = _
        "Tableau1"

Et même de façon générale, comme faire pour que VBA détermine et stock la valeur de la dernière cellule pour que je puisse sélectionner une Range variable ?

Ex : Range("A1": Dernièrelignevariable)

Ce que j'ai essayé ne fonctionne pas x_o.

Merci beaucoup pour votre aide.

Ybae

Bonjour,

Je viens vers vous car j'ai un problème concernant un code vba sous Excel:

J'ai un Array d'Array ( je ne sais pas si c'est très claire dit comme sa, donc regardez le code ), sauf que j'aimerais re-définir une valeur d'un Array contenu dans la principal.

Pour plus de clarté:

Dim n As Variant, uN1 As Variant, uN2 As Variant, uN3 As Variant
uN1 = Array(18)
uN2 = Array(75)
uN3 = Array(84)
' Je sais, les 3 Arrays précédentes sont inutiles sous cette formes, mais j ai en réalité plusieurs dizaines d entrées pour chaque Array '

n = Array(uN1, uN2, uN3)
' Ce que je voudrais maintenant faire, schématiquement puisque cela ne fonctionne pas:
ReDim Preserve n(0)(0) '
n(0)(0) = 5

Mon but est donc de re-définir la une valeur contenu dans un Array, lui-même contenu dans un Array.

J'ai essayer différentes manières, mais toujours sans succès...

Et je ne trouve pas ce qu'il me faut sur Google.

Merci de votre aide,

EyesGammer

bonjour tout le monde, dans mon code j'aurais besoin d'un vecteur colonne je l'ai alloué dans la mémoire par la commande

Redim vector(51), par contre quand je commence à remplir le vector(i,1) vba m'affiche l'erreur 9 l'indice n'appartient pas à la sélection, la solution que j'ai trouvé c'est de faire un Redim vector(51,1) comme ça . ma question pour pas ca marche pas quand je fais un

Redim vector(51).

Bonsoir,

J'essaie de modifier dynamiquement un tableau. Il se remplit au fur et à mesure si une condition est respectée à chaque tour de boucle. Ainsi j'utilisais ReDim, mais quand sa taille changeait, les données précédentes étaient perdues. Mais avec ReDim Preserve, le compilateur me parle d'indice hors sélection ! Juste avec un Preserveen plus...

Voici le code pour éclairer tout ça :

(dans un UserForm, je crée une listbox dans lequel apparaissent les noms des personnes du groupe choisi dans la combobox "premier")

Private Sub groupe_Change()
Dim listeNom() As String
Dim j As Integer
j = 0
'remplissage des noms des personnes de ce groupe
For i = 1 To nbNoms     'défini avant
    If Cells(i + 2, 1) = premier Then
        j = j + 1
        ReDim Preserve listeNom(j, 2)
        listeNom(j, 1) = Cells(i + 2, 2)
        listeNom(j, 2) = Cells(i + 2, 3)
    End If
Next i
nomGroupe.Visible = True     'ListBox nomGroupe
nomGroupe.list = listeNom
End sub

Merci pour votre aide !

Bonjour,

j’essaie de redimensionner un de mes tableaux et ça bloque tout mon code, le bout de code problématique est celui-la

 tableau_transpose = Application.Transpose(tableau_CC)

            a = UBound(tableau_transpose, 1)
            b = UBound(tableau_transpose, 2)

 ReDim Preserve tableau_transpose(a, b + 1)

je ne comprends pas car j'ai essayé avec des petits exemple sur d'autre fichier excel pour tester et ça marche parfaitement le redimensionnant de la derniere dimension.

Je vous envoi en pièce jointe mon fichier excel sur lequel ça bloque

Si quelqu'un pourrait me donner une idée du problème

merci beaucoup

Bonjour,

J'expérimente la fonction Redim Preserve sans succès. Pour comprendre le problème, j'ai créé une petite macro qui utilise cette fonction.

Le pricnipe est simple, je copie le tabelau de la sheet 1 dans un tableau VBA TAB_Data puis je le screen sur la meme sheet.

J'ai une erreur type Run-Time error '9': subscript out of range lorsque x = 2. Apparemment, la fonction redim preserve n'arrive pas à redimensionner le tableau en fonction de la variable x. Je ne comprends pas pourquoi.

Sub test()

Dim h As Single, i As Single, j As Single, x As Single

Dim TAB_Data() As Variant

For i = 1 To 15

j = 0

If Sheets("sheet1").Cells(i, 1) <> Empty Then

x = x + 1

ReDim Preserve TAB_Data(1 To x, 1 To 2)

For j = 1 To 2

TAB_Data(x, j) = Sheets("sheet1").Cells(i, j)

Next

End If

Next

For i = 1 To 13

For j = 1 To 2

Sheets("sheet1").Cells(i, j + 10) = TAB_Data(i, j)

Next

Next

End Sub

Cf. fichier excel en annexe

246test-v1.xlsm (15.47 Ko)

Bonsoir,

voila ce que je cherche à faire :

J'ai un vecteur colone de données ordonnées. Je veux à partir de ce vecteur en créer un second plus court qui ne contiendrait qu'une occurence par donnée individuelle dans le premier : c'est à dire pour être plus clair, un vecteur sans doublon.

Comme je ne connais pas le nombre d'éléments individuels dans le premier, je ne peux pas donner dès le début sa taille définitive à mon second vecteur.

Sauf que j'obtients systématiquement une erreur à la commande ReDim Preserve

Data : 1er vecteur avec doublons,

MatVect : résultat souhaité

L'erreur affichée est la 9, Subscript out of Range.

Je sais que je peux procéder différemment en comptant d'abord le nombre d'éléments individuels dans la première et en dimensionant la seconde à partir du résultat, ou en donnant une dimension énorme à la seconde puis en la redimensionant à la fin à partir d'un compteur du nombre de "cellules" non vides mais je suis curieux de connaitre pourquoi mon code actuel ne fonctionne pas.

Je pensais au début que cela venait du fait qu'au départ je défini MatVect comme une matrice (1,1) mais j'ai testé en partant à une dimension plus élevée : même problème.

ReDim MatVect(1 To 1, 1 To 1)
MatVect(1, 1) = Data(1, 1)
a = 1
For i = 2 To UBound(Data, 1)
    If Data(i, 1) <> MatVect(a, 1) Then
        ReDim Preserve MatVect(1 To a + 1, 1 To 1)
        MatVect(a + 1, 1) = Data(i, 1)
        a = a + 1
    End If
Next i

Merci d'avance,

Cordialement,

L.

Recherches récentes

copier derniers caracteres cellulrsouvrir tous fichiersextraire tableau structuresonedriveenregistrer donnees tableau vba boucle forrapportrecherche multicriteres userformvba remplacer textemacro ralentirprocedure trop longue vbarapprochementtaille liste deroulantecalculconsolidation fichiers power queryconsolidation fichiersliens word serveur424enregistrer imageauto clickervba copier coller ppt