Créer variable dans Userform

Fermé
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018 - Modifié le 6 avril 2018 à 09:36
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018 - 13 avril 2018 à 09:29
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) ...).



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:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
6 avril 2018 à 10:06
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 !
0
Pinzou76 Messages postés 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
6 avril 2018 à 10:15
Bonjour, désolé je m'incruste pour une rapide question:
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
Do While TypeName(.Cells(i, 2).Value) = "String"

?
Merci et bonne journée
0
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018 > Pinzou76 Messages postés 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019
6 avril 2018 à 10:21
@Pinzou76 oui c'est le but de With. @Patrice33740 n'a juste pas effacé
0
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018
6 avril 2018 à 10:18
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...
0
Pinzou76 Messages postés 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
6 avril 2018 à 10:24
A quoi correspond ton i dans ce cas ? Est-il toujours égal à 27 ?
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.
0
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018 > Pinzou76 Messages postés 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019
6 avril 2018 à 10:34
Non justement j'aimerais qu'il varie par pas de 1 dans la condition If et While
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 6 avril 2018 à 11:49
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 ?
0
loicen73 Messages postés 32 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 16 avril 2018
13 avril 2018 à 09:29
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
0