remplir un tableau(array avec un autre array

  • Initiateur de la discussion Initiateur de la discussion chrixsl
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chrixsl

XLDnaute Nouveau
bonjour,

j'ai au départ un tableau vide à une dimension de 200 casepouvant contenir les valeurs des userform.

la première fois que click sur le bouton valider, je mets toutes les valeurs de mes userform dedans

la seconde fois que je reviens sur ce formulaire je veux remplir ce mêm tableau à partir de l'endroit ou je me suis arreté la dernière fois

je pense à le faire avec 2 tableau mais je ne vois pas du tout l'algo

voici mon code si quelqu'un(e) peut m'aider je la remerci d'avance.

Code:
Dim index As Integer
Dim V(40)
Dim tblservice(200) As Variant
For j = 1 To UBound(tblservice)
If tblservice(j) = "" Then
index = tblservice(j)
Next j

For i = 1 To UBound(tblservice)
MsgBox IIf(Join(tblservice, "") = "", tblservice(i) = Controls("ComboBox" + Trim(Str(i))).Value), "non vide"

Next i
 
Dernière édition:
Re : remplir un tableau(array avec un autre array

Bonjour, et bienvenu sur XLD

sans trop voir l'articulation du code:

en ne définissant pas d'emblée la taille du tableau à 200, mais en augmentant à chaque insertion ( redim Preserve) il n'y aurait pas de "cases" vides, la deuxième passe d'insertion pourrait se poursuivre à partir de Ubound(tableau).

Par contre il ne faut pas que le tableau soit déclaré dans la sub qui le met à jour sinon on repart à zéro. Donc déclaration public en tête de module .

A+
 
Re : remplir un tableau(array avec un autre array

Bonjour ,

en mettant mon tableau dans un autre module j'ai d'erreur erreur de compilation variable non définie
est ce qu'il faut déclarer autrement à part avec Dim ?
et quand je le met dans la sub j'ai un message d'erreur objet spécifié introuvable
Code:
Private Sub btvaliderservice_Click()
Dim casevide, Vide, i,j As Integer
Dim reservoir() As Variant

Dim V(40)

For i = 1 To 40
V(i) = Controls("ComboBox" + Trim(Str(i))).Value 'recup valeur de tous les combobox

If V(i) = "" Then
Vide = Vide + 1
End If

Next i
MsgBox (Vide)
total = 40 - Vide

ReDim Preserve reservoir(total)
For j = 0 To total
reservoir(j) = Controls("ComboBox" + Trim(Str(j))).Value
Next j

End Sub
l'idée du ubound est bonne(évite des lignes en plus) mais sa mise en application flou pour moi
 
Re : remplir un tableau(array avec un autre array

bonjour,

en regardant plus précisément le code, je ne vois pas de quel tableau il s'agit ni comment ni par quoi il devrait être rempli en deux fois ?

a priori on est dans un Userform; donc en tête de la feuille de code de la Userform :Dim MonTableau ou Public MonTableau

A+

edit:

la seconde fois que je reviens sur ce formulaire
est ce que cela signifie que vous avez fermé l'USF ?

Si oui, les données sont perdues en quittant .
 
Dernière édition:
Re : remplir un tableau(array avec un autre array

Bonjour à tous

Petit exemple qui fonctionne chez moi
Un userform avec 3 ComboBox et un CommandButton.
Les MsgBox affichent bien ce qu'elle sont censées afficher.
Code:
Private Sub CommandButton1_Click()
Dim t(2), i
For i = 0 To 2
t(i) = Controls("ComboBox" & i + 1).Value
Next
MsgBox t(0)
MsgBox t(1)
MsgBox t(2)
End Sub
Code:
Private Sub UserForm_Initialize()
ComboBox1.List = [{1,2,3}]
ComboBox2.List = [{4,5,6}]
ComboBox3.List = [{7,8,9}]
End Sub
 
Re : remplir un tableau(array avec un autre array

re, et bonjour Staple1600


en attendant des précisions (notamment si ce sont deux procédures différentes qui doivent compléter le tableau), j'ai simplifier le code du post #3 . Si je l'ai compris, il s'agit de remplir 2 tableaux avec les mêmes éléments(?):

en tête de feuille de code de l'USF
Code:
Option Base 1 'pour que l'indice mini des tableau soit 1 (et non 0 par défaut)

Code:
Private Sub CommandButton2_Click()

Dim V(), x as Byte, i as Byte, Total as integer, reservoir '
x = 0 'indice du tableau V
For i =1 To 40 'pour les 40 combobox
    If Controls("ComboBox" & i).Value <> "" Then 
        x = x + 1
        ReDim Preserve V(x) ' on augmente la taille du tableau
        V(x) = Controls("ComboBox" & i).Value
    End If
Next i
Total = UBound(V) ' contient le nombre d'éléments du tableau

reservoir = V ' copie du tableau V dans  le tableau reservoir

End Sub

Concernant les tableaux un site à visiter impérativement !!
Les tableaux

A+
 
Re : remplir un tableau(array avec un autre array

bonjour Paf,

désolé pour le manque de précision.
ok je recommence.
soit un formulaire (frm2) contenant 40 controls. le tableau v recupère les valeurs des controls à chaque clic sur le bouton.

frm2 peut être utilisé plusieurs fois tant que le formulaire principal (frm1) n'est pas fermé.

pour ne pas perdre les valeurs précédemment saisie, je stock chaque nouvelle saisie du formulaire frm1 dans un tableau(reservoir) que je redimensionne.

le remplissage du tableau reservoir se fait par l'intermédiaire du tableau v.

on peut faire plus simple c'est possible.

le code que j'avais proposé écrase les anciennes valeurs.
et celui que tu m'a proposé donne à l'éxecution incompatibilité de type sur la ligne ReDim Preserve V(x).
 
Re : remplir un tableau(array avec un autre array

Re

ci dessous le code pour ce que j'ai compris

en tête de la feuille de code de l'USF:
Code:
Option Explicit
Option Base 1
Dim reservoir()
Dim Flag As Boolean

code du bouton de lancement
Code:
Private Sub CommandButton1_Click()
Dim V(), x As Byte, i As Byte '

x = 0 'indice du tableau V
For i = 1 To 40 'pour les 40 combobox
    If Controls("ComboBox" & i).Value <> "" Then
        x = x + 1
        ReDim Preserve V(x) ' on augmente la taille du tableau
        V(x) = Controls("ComboBox" & i).Value
    End If
Next i

If Flag = False Then 'si reservoir est vide premier remplissage
    reservoir = V
    Flag = True
Else
    x = UBound(reservoir)
    For i = LBound(V) To UBound(V)
        x = x + 1
        ReDim Preserve reservoir(x) ' on augmente la taille du tableau
        reservoir(x) = V(i)
    Next
End If


MsgBox UBound(reservoir)
End Sub

bonne suite
 
Dernière édition:
Re : remplir un tableau(array avec un autre array

re,

en réfléchissant un peu plus, on peut se passer du tableau intermédiaire V:

Code:
Option Explicit
Option Base 1
Dim reservoir()
Dim Flag As Boolean

Code:
Private Sub CommandButton1_Click()
Dim  x As Byte, i As Byte '

If Flag = False Then
    x = 0 'indice du tableau V
    Flag = True
Else
    x = UBound(reservoir)
End If

For i = 1 To 40 'pour les 40 combobox
    If Controls("ComboBox" & i).Value <> "" Then
        x = x + 1
        ReDim Preserve reservoir(x) ' on augmente la taille du tableau
        reservoir(x) = Controls("ComboBox" & i).Value
    End If
Next i

MsgBox UBound(reservoir)
End Sub

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
396
Réponses
5
Affichages
529
Réponses
6
Affichages
95
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
374
Retour