Menu

Créer variable dans Userform

loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention - 6 avril 2018 à 09:36 - Dernière réponse : loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Patrice33740 7121 Messages postés dimanche 13 juin 2010Date d'inscription 21 juillet 2018 Dernière intervention - 6 avril 2018 à 10:06
0
Merci
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 !
Pinzou76 621 Messages postés dimanche 17 septembre 2017Date d'inscription 20 juillet 2018 Dernière intervention - 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
loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention > Pinzou76 621 Messages postés dimanche 17 septembre 2017Date d'inscription 20 juillet 2018 Dernière intervention - 6 avril 2018 à 10:21
@Pinzou76 oui c'est le but de With. @Patrice33740 n'a juste pas effacé
loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention - 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...
Pinzou76 621 Messages postés dimanche 17 septembre 2017Date d'inscription 20 juillet 2018 Dernière intervention - 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.
loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention > Pinzou76 621 Messages postés dimanche 17 septembre 2017Date d'inscription 20 juillet 2018 Dernière intervention - 6 avril 2018 à 10:34
Non justement j'aimerais qu'il varie par pas de 1 dans la condition If et While
Commenter la réponse de Patrice33740
Patrice33740 7121 Messages postés dimanche 13 juin 2010Date d'inscription 21 juillet 2018 Dernière intervention - Modifié par Patrice33740 le 6/04/2018 à 11:49
0
Merci
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 ?
Cordialement
Patrice
loicen73 32 Messages postés mardi 27 mars 2018Date d'inscription 16 avril 2018 Dernière intervention - 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
Commenter la réponse de Patrice33740