VBA : nom d'une variable obtenu à l'aide d'une concaténation

CISCO

XLDnaute Barbatruc
Bonjour à tous

J'ai une série de variables ayant des noms semblables, du style lig4, lig5, lig6... Je les utilise dans une série de boucles FOR ligx = 0 to ...

Est-ce qu'il est possible en VBA de construire leur nom avec un code du style "lig" & i, un peu comme on le ferait avec INDIRECT("lig"& i) dans une formule ? Si on utilise directement
Code:
FOR i= 4 to 16
AAA(i)= 2* "lig" & i
Next i

cela ne fonctionne pas car Excel voit "lig" & i comme le texte "lig4", "lig5", "lig 6" et ainsi de suite et ne met pas les valeurs à la place de ces variables.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Bonsoir

Merci Paf d'avoir essayé...

Et merci Dranreb pour cette nouvelle proposition nettement plus efficace. OK pour la décomposition en plusieurs procédures, l'une appellant l'autre plusieurs fois. J'ai essayé de comprendre comment cela fonctionne, mais pour le moment, je n'y arrive pas, même en essayant en pas à pas détaillé. Je m'y remet...

@ plus
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Je ne suis pas sûr de m'en être occupé.
J'ai juste vu qu'il y avait au cœur du dispositif un tableau qui évoluait de façon à prendre toutes les combinaisons de parties de valeurs d'un tableau de départ dont les sommes sont égales à celles d'une ligne de tests. Et il m'a semblé que c'était le nœud de la difficulté. Alors je propose de quoi débarrasser le programme utilisant ce tableau de tous ces compteurs en lui permettant simplement de transformer l'état du tableau à un instant donné en son état suivant par appel d'une procédure.
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Bonsoir

C'est un peu plus compliqué que ça :
Il faut que toutes les valeurs du tableau proposé vérifient les 2 conditions suivantes :
* La somme de chaque colonne doit donner la valeur dans la ligne 10 (nbre de tests à réaliser)
* La somme des valeurs de chaque ligne, multipliées par le temps nécessaire pour chaque test (valeur de la ligne 9 / valeur de la ligne 10) doit être inférieure ou égale à 35 h.

Il y a donc un test (une égalité à vérifier) pour les colonnes, et un autre (une inégalité à vérifier) pour les lignes.

@ plus
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

* La somme de chaque colonne doit donner la valeur dans la ligne 10 (nbre de tests à réaliser)
Ce point est assumé
* La somme des valeurs de chaque ligne, multipliées par le temps nécessaire pour chaque test (valeur de la ligne 9 / valeur de la ligne 10) doit être inférieure à 35 h.
Je pense que c'est à réaliser par le programme appelant.
Je vais essayer de le faire faire par mon programme test2 …qui deviejndra test3
À+
 

Dranreb

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Voilà, si j'ai bien compris. Aucune ligne ne dépasse 35 heures.
VB:
Sub test3()
Dim TabInc(), TabDép(), TDurées(), TNbTest(), SomDur As Double, TSomDu(), Fin As Boolean, N As Long, L&, C&, ÀProduire As Boolean
TabDép = [I4:K7].Value
TDurées = [I9:K9].Value
TNbTest = [I10:K10].Value
ReDim TabInc(1 To UBound(TabDép, 1), 1 To UBound(TabDép, 2))
ReDim TSomDu(1 To UBound(TabDép, 1), 1 To 1)
N = -1
IncCol TabInc, TabDép, TNbTest, Fin
Do
   ÀProduire = True
   For L = 1 To UBound(TabDép, 1)
      SomDur = 0
      For C = 1 To UBound(TabDép, 2)
         SomDur = SomDur + TabInc(L, C) * TDurées(1, C) / TNbTest(1, C)
         Next C
      TSomDu(L, 1) = SomDur
      If SomDur > TimeSerial(35, 0, 0) Then ÀProduire = False
      Next L
   If ÀProduire Then
      N = N + 1
      Cells(13, "I").Resize(4, 3).Offset(5 * N).Value = TabInc
      Cells(13, "L").Resize(4).Offset(5 * N).Value = TSomDu: End If
   IncCol TabInc, TabDép, TNbTest, Fin
   Loop Until Fin
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Bonjour grisan29
Bien sûr. Il peut même y avoir plusieurs ComboBoxLiées dans un même UserForm à condition qu'ils ne prennent pas en charge les mêmes ComboBox au même moment.
 

grisan29

XLDnaute Accro
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Bonjour grisan29
Bien sûr. Il peut même y avoir plusieurs ComboBoxLiées dans un même UserForm à condition qu'ils ne prennent pas en charge les mêmes ComboBox au même moment.
bonjour dranreb

Merci de ta réponse , je suis en cours de réflexion sur l'utilisation de tes cbxliées, voir surtout leurs adaptations a des environnements de combobox associé a des listbox où listview et textbox a travers des exemples de fichiers que tu as donné sur le forum

qu'entends tu par plusieurs comboboxliées sur meme userform
 

Dranreb

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

On peut par exemple en utiliser un secondaire pour retrouver une combinaison de renseignements existant dans une autre tableau. Simplement il ne faut pas que les ComboBox dont il a la charge soient aussi pris en charge par le ComboBoxLiées principal qui se base sur le tableau dont l'UserForm assure la mise à jour par exemple. Ou alors il faut qu'à tout instant l'un des deux soit stoppé.
Un ComboBoxLiées est un objet. Il peut très bien en exister des exemplaires dans des variables différentes déclarées As ComboBoxLiées.
(remarque: tu aurais du ouvrir une autre discussion pour ça).
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : VBA : nom d'une variable obtenu à l'aide d'une concaténation

Bonjour à tous

Merci Dranreb pour cette nouvelle proposition. J'essaye de comprendre ça tout de suite.

@ plus

P.S : Il faut faire avec
Code:
 If  TNbTest(1,C) <> 0 Then SomDur = SomDur + TabInc(L, C) * TDurées(1, C) / TNbTest(1, C)
Sorti de ça, tout semble fonctionner nickel.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 958
Membres
103 990
dernier inscrit
lamiadebz