Créer variable dans Userform
loicen73
Messages postés
33
Statut
Membre
-
loicen73 Messages postés 33 Statut Membre -
loicen73 Messages postés 33 Statut Membre -
Bonjour,
Je souhaiterais, qu'en fonction du texte validé dans la liste déroulante de l'Userform, la cellule (i,3) prenne une certaine valeur (si condition validée, alors cells(i,3)=2. Sinon, cells(i,3)=1).
Ma variable doit commencer à la ligne 27 jusqu'à ce que la ligne contienne du texte.
J'ai déjà réalisé le code ci-dessous.
Le problème est que quand l'Userform s'affiche (ayant réalisé au préalable une macro qui l'affiche à chaque fois que cells(i,2) contient du texte), et que je choisis une donnée dans la liste déroulante ("sous sol", "gaine technique"), la valeur associée à la donnée (1 ou 2) va s'écrire dans toutes les cellules de la colonne 3 à partir de la ligne 27 tant que cells(i,2) contient du texte ( donc dans cells(27,3), cells(28,3), cells(29,3) ...).
Merci d'avance pour votre aide
Je souhaiterais, qu'en fonction du texte validé dans la liste déroulante de l'Userform, la cellule (i,3) prenne une certaine valeur (si condition validée, alors cells(i,3)=2. Sinon, cells(i,3)=1).
Ma variable doit commencer à la ligne 27 jusqu'à ce que la ligne contienne du texte.
J'ai déjà réalisé le code ci-dessous.
Le problème est que quand l'Userform s'affiche (ayant réalisé au préalable une macro qui l'affiche à chaque fois que cells(i,2) contient du texte), et que je choisis une donnée dans la liste déroulante ("sous sol", "gaine technique"), la valeur associée à la donnée (1 ou 2) va s'écrire dans toutes les cellules de la colonne 3 à partir de la ligne 27 tant que cells(i,2) contient du texte ( donc dans cells(27,3), cells(28,3), cells(29,3) ...).
Private Sub Userform_Initialize()
ComboBox1.List = Array("Sous sol", "Gaine technique")
End Sub
Private Sub CommandButton_valider_Click()
Dim i As Integer
i = 27
Workbooks("Test.xlsm").Sheets("Bouclage").Select
Do While TypeName(Workbooks("Test.xlsm").Sheets("Bouclage").Cells(i, 2).Value) = "String"
If ComboBox1.Value = "Sous sol" Then
Cells(i, 3) = 1
Else
Cells(i, 3) = 2
End If
i = i + 1
Loop
Unload Me
End Sub
Merci d'avance pour votre aide
2 réponses
-
Bonjour,
1) Ton code est mal écrit,
- d'une part il faut absolument éviter d'utiliser .Select en VBA,
- d'autre part, comme nous te l'avons déjà dit, même si ce n'est pas obligatoire, il est conseillé de préciser la propriété concernée, ici le .Value,
Il vaudrait mieux écrire :Private Sub CommandButton_valider_Click() Dim i As Integer i = 27 With Workbooks("Test.xlsm").Sheets("Bouclage") Do While TypeName(Workbooks("Test.xlsm").Sheets("Bouclage").Cells(i, 2).Value) = "String" If ComboBox1.Value = "Sous sol" Then .Cells(i, 3).Value = 1 Else .Cells(i, 3).Value = 2 End If i = i + 1 Loop End With Unload Me End Sub
2) Je ne comprends pas où est le problème : ton code fait exactement ce que tu demandes !-
Bonjour, désolé je m'incruste pour une rapide question:
Vu qu'il y a la ligneWith Workbooks("Test.xlsm").Sheets("Bouclage")
Peut-on simplifierDo While TypeName(Workbooks("Test.xlsm").Sheets("Bouclage").Cells(i, 2).Value) = "String"
ParDo While TypeName(.Cells(i, 2).Value) = "String"
?
Merci et bonne journée -
Bonjour, j'ai effectué les changements nécessaires.
Le problème est que lorsque l'on sélectionne une donnée ("sous sol", "gaine technique") dans la liste déroulante, la valeur liée (1 ou 2) s'affiche dans toutes les cellules. Je voudrais uniquement qu'elle s'affiche dans cells (i,3), et non dans cells(i+1,3) cells(i+2,3) cells(i+3,3) etc... -
-
-
Re,
Dans ce cas, je ne comprends pas à quoi sert le While avec = , si on doit s'arrêter à la première valeur trouvée, comme dit Pinzou76, ce sera toujours 27 !
Ne faudrait-t'il pas plutôt un Until ?
-
Bonjour Patrice,
Je voulais écrire une boucle While car je voulais créer un UserForm pour chaque cellule contenant du texte.
Etant donné la complexité du programme et mon niveau en VBA, j'ai préféré créer quelque chose de plus "manuel". J'ai créé une liste déroulante que j'ai copié sur une centaine de lignes et que j'ai ensuite caché.
Merci pour votre aide,
Loïc
-