UserForm [VBA]

  • Initiateur de la discussion ljoue
  • Date de début
L

ljoue

Guest
Bonjour tout l'monde...

Voici ma feuille Excel

.......A.............B......
------------------------
1...Libellé....Allocation
------------------------
2...fonds1.........3%
3...fonds2.........5.6%
4...fonds3.........8.2%
5...fonds4.........4.2%
6...fonds5.........5.1%
. . .

Voici Mon UserForm
__________________________________________
UserForm1
-----------------------------------------------------------

....._________________.........._____________
....|.........................|.............|..................|
....|TextBox1............|.............|Textbox2....|
....|______________|............|____________|
___________________________________________

Comment faire pour afficher :

- Dans TextBox1 : les libellé dont l'allocation est >=5%

- Dans TextBox2 : les allocations correspondant à leur Libellé

....c'est un peu de boulot je sais....mais là je n'y arrive vraiment pas :ermm:

Merci d'avance,
Cordialement
Laurent
 

JORDAN

XLDnaute Impliqué
Bonjour Laurent,

Voici une petite macro qui j'espère te conviendra

A+

Jordan [file name=test_20050610161212.zip size=10831]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20050610161212.zip[/file]
 

Pièces jointes

  • test_20050610161212.zip
    10.6 KB · Affichages: 19

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Laurent, Jordan, le Forum

Je me suis permis de regarder un peu ton UserForm Jordan,l'ensemble est très bien, mais au niveau des Variables c'est un peu Grrr Grrr.... ;)

Voici ton module corrigé :
Option Explicit
Private NbLignes As Long

Private Sub UserForm_Activate()
Dim I As Integer

NbLignes = Cells(Cells(65536, 1).End(xlUp).Row, 1).Row

   
For I = 2 To NbLignes
       
If Cells(I, 2) >= 5 Then
            ComboBox1.AddItem (Cells(I, 1))
       
End If
   
Next I

End Sub

Private Sub ComboBox1_Change()
Dim Libelle1 As String
Dim J As Long

Libelle1 = ComboBox1.Value

   
For J = 1 To NbLignes
       
If Cells(J, 1) = Libelle1 Then
            TextBox1 = Cells(J, 2)
       
End If
   
Next J

End Sub

Bien amicalement
Bon Après Midi
@+Thierry
 

JORDAN

XLDnaute Impliqué
Bonjour Thierry,

Merci pour tes conseils

Je débute en VBA et il est vrai que j'ai beaucoup de lacunes, dans les déclarations de variables j'ai parfois des soucis, ou alors ça marche mais ce n'est pas le code vraiement adapté.

j'essaye d'apprendre mais il y a tellement de fonctions due c'est très long.

Pendant que j'y suis, j'en profite :

Pourrais tu m'expliquer pourquoi met-on ' Option Explicit '

Et ensuite ' Private NbLignes As Long '

C'est un peu bizarre toutes ces façons de 'DIM'

Merci
Jordan
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Jordan, Laurent, le Forum

Pour Jordan, et aussi pour Laurent, car ça devrait aussi l'aider à mettre en place son UserForm...

Donc Option Explicit est tout simplement là en top de module, pour obliger définitivement le à déclarer toutes les variables qui seront utilisées dans le Module en Question.

On peut mettre ce paramètre automatiquement par les Options du Menu Outils de VBE (Visual Basic Editor) dans l'Onglet 'Editeur' cocher la CheckBox 'Déclaration des Variables Obligatoire'

Ceci fait, si on ne déclare pas une Variable VBA stoppera net dessus lors de la compilation du Projet.

Pourquoi déclarer les Variables... Et bien par défaut, si on n'a pas défini cette 'Option Explicit' tout est 'Variant' pour VBA, ce qui n'est pas toujours l'idéal, surtout pour les ressources mémoires, mais aussi pour permettre au développeur de contrôller ce qui se passe dans son application. (Variant 22 Octets + Longueur de la Chaine de caractère ou 16 Octets si numérique)

Pour le Dim, c'est tout simplement qu'il déclare les variables et leur attribue de l'espace de stockage dès le démarrage d'une routine.

Un Dim NbLignes As String comme tu avais fait, va préserver un espace de Stockage de 10 octets + longueur de la chaîne pour cette String de longueur variable... Alors qu'en fait pour définir un nombre de ligne les 3/4 du temps on a besoin que :

Byte (1 octet) de 1 à 255 lignes (Valeur Réelle 0 à 255)
Integer (2 octets) de 1 à 32 767 lignes (Valeur Réelle -32 768 à 32 767)
Long (4 octets) de 1 à 65536 lignes (Valeur Réelle -2 147 483 648 à 2 147 483 647)

Voilà, si cela peut t'éclairer un peu, n'hésite pas à user et abuser de l'aide de VBA (Touche [F1] quand tu as sélectionné une instruction dans le code)

Bon week End and Welcome to the VBA World !
@+Thierry

Message édité par: _Thierry, à: 11/06/2005 11:30
 

JORDAN

XLDnaute Impliqué
Bonjour Thierry Thierry, Laurent, le Forum

Merci pour toutes ces explications. si je peux me permettre, il y a quelques petites choses que je ne comprends pas :

Pourquoi : 'Private NbLignes As Long' et non tout simplement 'Dim NbLignes as integer'


Private Sub UserForm_Activate()

Puis aussi, pour la 1ère boucle : 'Dim I As Integer ' --> Ok
Mais pour la 2ème : 'Dim J As Long', je ne comprends pas la différence, alors que 'I' et 'J' on la même fonction !!!

Encore mille fois merci à Thierry d'avoir de son temps certainement compté.

A+ et bonne journée
Jordan
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
357

Statistiques des forums

Discussions
312 744
Messages
2 091 574
Membres
104 993
dernier inscrit
Agnès LAURENT