Explications sur lignes de codes.

Jo

XLDnaute Nouveau
Bonsoir à tous,

J'aimerai s'il vous plait avoir votre aide pour comprendre certaines lignes de codes que je n'ai pas encore assimilé, dont je ne comprend pas le langage.

Pouvez-vous m'éclairer sur les lignes ci-dessous en rouge :

Private Sub UserForm_Initialize()

Sheets("Work").Activate
a = 0

x = 9
While Sheets("Work").Cells(x, 3).Value <> ""
UserForm3.liste_nom.AddItem (Sheets("Work").Cells(x, 3).Value)
UserForm3.liste_nom.List(a, 1) = Sheets("Work").Cells(x, 1).Value
a = a + 1

x = x + 1
Wend
End Sub

Les lignes en noir je comprend mais les lignes en rouge je n'arrive pas à percevoir l'action que cela engendre.

Merci d'avance de votre aide à tous.

Très bonne soirée.

A bientôt

Jo
 

Papou-net

XLDnaute Barbatruc
Re : Explications sur lignes de codes.

Bonsoir Jo,

"a" est une variable qui sert à définir le n° de d'index de la liste déroulante (ou ComboBox) qui est dans le formulaire UserForm3. Cette liste est balayée dans la boucle While...Wend pour y affecter la valeur de la cellule lue en ligne "x" et en colonne 1. "a" est mise à 0 avant la boucle, car l'indexage des listes déroulantes démarre à 0. Elle est ensuite incrémentée de 1 pour passer à l'index suivant : c'est exactement le même principe que pour la variable "x" qui lit les cellules.

Espérant avoir été suffisamment explicite.

Bonne nuit.

Cordialement.
 

Hulk

XLDnaute Barbatruc
Re : Explications sur lignes de codes.

Hello,
Code:
UserForm3.liste_nom.List(a, 1) = Sheets("Work").Cells(x, 1).Value
a = a + 1
Apparemment, "liste_nom" est une ListBox ou une ComboBox.

Disons que c'est une ListBox.

Cela veut dire que la ListBox "liste_nom" de l'UserForm3 prend comme valeurs la liste de la feuille "Work" des cellules x de la colonne A. x commençant à 9...

a = a + 1 veut dire qu'à chaque boucle, tant que While tourne, ça incrémente a de 1.

En général, on se sert de List() (liste_nom.List(a,1)) pour boucler sur les éléments d'une ListBox et on utilise plutôt AddItem pour les remplir, mais tu peux tout à fait utiliser les deux.

En revanche comme il y a ceci UserForm3.liste_nom.AddItem (Sheets("Work").Cells(x, 3).Value) juste avant, il va, sauf erreur, prendre le List en priorité.

Espérant t'avoir aidé.

EDIT : Slt Papou, tu me diras si j'ai dit des bêtises :)
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Explications sur lignes de codes.

En revanche comme il y a ceci UserForm3.liste_nom.AddItem (Sheets("Work").Cells(x, 3).Value) juste avant, il va, sauf erreur, prendre le List en priorité.

EDIT : Slt Papou, tu me diras si j'ai dit des bêtises :)

Bonjour Jo, Hulk,

RE Hulk :

Je ne pense pas que tu aies dit des bêtises, mais je crois savoir que les deux lignes suivantes :

Code:
UserForm3.liste_nom.AddItem (Sheets("Work").Cells(x, 3).Value)
UserForm3.liste_nom.List(a, 1) = Sheets("Work").Cells(x, 1).Value

fonctionnent ainsi :

La première crée un nouvel index dans la liste déroulante (cellule x,3), la deuxième ajoute la valeur de la cellule (x, 1) dans la deuxième colonne de la liste déroulante. Car je crois déceler que cette liste affiche deux colonnes, mais sans le fichier à l'écran, je ne saurais être affirmatif.

En vous souhaitant une bonne journée.

Cordialement.
 

Jo

XLDnaute Nouveau
Re : Explications sur lignes de codes.

Je pense que tu as raison Papou, il y a deux colonnes à mon avis. Merci pour ton aide en tout cas.

Pourrais-tu m'aider sur d'autres lignes de codes ?

Private Sub CommandButton6_Click()
Dim tableau_nom(10000, 1)
a = 0
For i = 0 To UserForm5.liste_nom.ListCount - 1
If UserForm5.liste_nom.Selected(i) = True Then
tableau_nom(a, 0) = UserForm5.liste_nom.List(i, 0)
tableau_nom(a, 1) = UserForm5.liste_nom.List(i, 1)
a = a + 1
End If
Next i

x = 8
For i = 0 To UBound(tableau_nom) - 1
If tableau_nom(i, 0) = "" Then Exit For
Do

If Sheets("CA").Cells(x, 3).Value = tableau_nom(i, 0) Then
Sheets("CA").Rows(x).Delete
x = x - 1
Exit Do
End If
x = x + 1
Loop Until Sheets("CA").Cells(x, 3).Value = ""

Next i

UserForm5.Hide
Unload Me
End Sub


Merci d'avance de ton aide.

Très bonne journée à toi.

Cordialement.

Jo
 

Papou-net

XLDnaute Barbatruc
Re : Explications sur lignes de codes.

RE Jo,

La première boucle lit toutes les lignes de la liste "list_nom" pour trouver quelle est la liste sélectionnée. Elle incrémente la variable "i" de 0 (index de la 1ère option de la liste) au dernier index de la liste (ListCount - 1) : -1 puisque la liste démarre à 0. Cette première boucle peut être remplacée avantageusement en utilisant directement l'index de l'option sélectionnée (ListIndex). Par exemple :

Code:
Private Sub CommandButton6_Click()
Dim tableau_nom(10000, 1)
' ---------- Remplace la première boucle ----------------
i = UserForm5.liste_nom.ListIndex
tableau_nom(i + 1, 0) = UserForm5.liste_nom.List(i, 0)
tableau_nom(i + 1, 1) = UserForm5.liste_nom.List(i, 1)
' -----------------------------------------------------------
x = 8 ' Affecte à x le n° de la 8ème ligne de la feuille "CA"
' Lecture des lignes du tableau "tableau_nom" de 0 (1ère ligne) à la dernière (UBound) - 1
puisque le tableau commence à 0
For i = 0 To UBound(tableau_nom) - 1
   ' Si la ligne du tableau est vide alors arrêt de la boucle de lecture
   If tableau_nom(i, 0) = "" Then Exit For
   Do ' Répéter les instructions entre Do...Loop jusqu'à ce que la cellule  "Cells(x, 3)" soit égale à 0
     ' Si la cellule "Cells(x, 3) " est égale à la valeur lue dans le tableau    
     If Sheets("CA").Cells(x, 3).Value = tableau_nom(i, 0) Then
       ' Efface la ligne "x"
       Sheets("CA").Rows(x).Delete
       x = x - 1 ' Remonte d'une ligne
       Exit Do ' Sortie  de la boucle
     End If
     x = x + 1 ' Descend 'une ligne
   Loop Until Sheets("CA").Cells(x, 3).Value = ""
Next i

UserForm5.Hide ' Ferme le formulaire
Unload Me
End Sub

Voilà, j'espère avoir été suffisamment limpide dans mes explications, car il n'est pas toujours facile d'interpréter des lignes de code sans fichier sous les yeux.

Restant à ta disposition.

Cordialement.
 

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander