Créer variable dans Userform
loicen73
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
loicen73 Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
loicen73 Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
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
- Créer un compte instagram sur google - 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
Peut-on simplifier
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.