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
A voir également:
- Créer variable dans Userform
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Creer un fichier .bat - Guide
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 :
2) Je ne comprends pas où est le problème : ton code fait exactement ce que tu demandes !
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 !
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 ?
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
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
Vu qu'il y a la ligne
With Workbooks("Test.xlsm").Sheets("Bouclage")Peut-on simplifier
Do While TypeName(Workbooks("Test.xlsm").Sheets("Bouclage").Cells(i, 2).Value) = "String"Par
?
Merci et bonne journée
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...
SI c'est le cas, et que tu veux seulement toucher à la cellule(27,3), alors le while est inutile et le i aussi, tu peux le remplacer directement par 27.