cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007
-
6 août 2007 à 08:37
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007
-
6 août 2007 à 15:44
Bonjour a tous,
J'ai un problème qui m'embete. Je m'explique:
Je suis sous excel, en vba. J'ai crée une form qui quand on la lance, parcoure la premiere colonne, et liste les sujets dans une liste déroulante. Ceci fonctione. J'aimerais ensuite dans un label, afficher le numéro de la ligne, ou se trouve le sujet sélectioné. Et ensuite insérer une ligne a la fin du sujet sélectionné.
Voila, j'éspere que j'ai pu expliquer mon problème correctement. Si vous avez des questions ou des suggestions, n'hésitez pas ^^
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 6 août 2007 à 09:03
Salut,
"afficher le numéro de la ligne, ou se trouve le sujet sélectioné" si j'ai bien compris. Essaie (il y a sans doute plus simple);
Private Sub ComboBox1_Click()
Dim StrItem As String
Dim CelVal As String
Dim NumLigne As Long
StrItem = ComboBox1.Text
NumLigne = 1
CelVal = Range("A" & NumLigne).Value
While CelVal <> StrItem
NumLigne = NumLigne + 1
CelVal = Range("A" & NumLigne).Value
Wend
Label1.Caption = "L'élément selectionne est a la ligne " & NumLigne
End Sub , ----
[code.aspx?ID=41455 By Renfield]
Pour "Et ensuite insérer une ligne a la fin du sujet sélectionné." Je n'ai pas compris. est ce que tu souhaite insérer une ligne après la ligne trouver plus haut?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 6 août 2007 à 11:12
Re,
Ok effectivement c'est mieux expliqué ainsi.
ce que tu peux faire c'est
- Lorsque tu click sur le text box tu arrive à trouver la ligne de l'item sélectionner (Administratif) mais de la meme facon rien de t'empêche de trouver la ligne de l'item suivant du combo (Budget)
Soit un truc du style (pas testé mais c'est pour l'idée)
Private Sub ComboBox1_Click()
Dim NumLigne As Long
Dim ItemIndex As Integer
'index dans le combo de l'item selectionne
ItemIndex = ComboBox1.ListIndex
'NOTE: ComboBox1.List(ComboBox1.ListIndex) = ComboBox1.Text
NumLigne = GetLigneItem(ComboBox1.List(ComboBox1.ListIndex))
Label1.Caption = "L'élément selectionne est a la ligne " & NumLigne
'si ce n'est pas le dernier élément qui est sélectionner
If ItemIndex <> ComboBox1.LineCount Then
'on récupère la ligne de la catégorie suivante
NumLigne = GetLigneItem(ComboBox1.List(ItemIndex + 1))
Call Rows(NumLigne).Insert(xlDown)
End If
End Sub<hr />
Private Function GetLigneItem(StrItem As String) As Long
Dim CelVal As String
Dim NumLigne As Long
NumLigne = 1
CelVal = Range("A" & NumLigne).Value
While CelVal <> StrItem
NumLigne = NumLigne + 1
CelVal = Range("A" & NumLigne).Value
Wend
End Function , ----
[code.aspx?ID=41455 By Renfield]
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 09:22
Merci beaucoup jrivet!
Cela fonctionne parfaitement.
Enfait je souhaite insérer une ligne à la fin de la catégorie, donc, juste avant la prochaine.
Exemple:
une catégorie "Administartif" et une "Budget"
Si je choisis la première il devrait rajouter une ligne juste avant budget
Voila, et merci encore une fois, tu me sauve la vie
PS: Comme ça
Si oui essaie Call Rows((NumLigne - 1)).Insert(xlDown)???
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 6 août 2007 à 10:48
Salut,
Non non si tu veux ajouter juste apres "Administratif", C'est NumLIgne + 1
Soit
Private Sub ComboBox1_Click()
Dim StrItem As String
Dim CelVal As String
Dim NumLigne As Long
StrItem = ComboBox1.Text
NumLigne = 1
CelVal = Range( "A" & NumLigne).Value
While CelVal <> StrItem
NumLigne = NumLigne + 1
CelVal = Range( "A" & NumLigne).Value
Wend
Label1.Caption = "L'élément selectionne est a la ligne " & NumLigne
Call Rows((NumLigne + 1)).Insert(xlDown)
End Sub
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 10:59
Merci mais je me suis mal exprimé.
---
exemple:
administratif
x
y
budget
a
b
---
Ici, si je choissis administratif et que je clique sur ok, il doit ajouter une ligne juste avant budget.
Donc entre "y" et budget
Je pense qu'il devrait prendre le numero de ligne de budget-1 et ajouter une ligne non?
j'espere que j'ai reussi a mieux expliquer
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 13:34
Cela m'a l'air cohérent.
J'ai une erreur sur le: ItemIndex = cbo_choix.ListIndex
Voila le code:
Private Sub cbo_choix_Change()
Dim StrItem As String
Dim CelVal As String
Dim NumLigne As Long
StrItem = cbo_choix.Text
NumLigne = 1
CelVal = Range("A" & NumLigne).Value
While CelVal <> StrItem
NumLigne = NumLigne + 1
CelVal = Range("A" & NumLigne).Value
Wend
lbl_row.Caption = NumLigne
End Sub
Private Sub cmd_ok_Click()
Dim NumLigne As Long
Dim ItemIndex As Integer
'index dans le combo de l'item selectionne
ItemIndex = cbo_row.ListIndex
'NOTE: ComboBox1.List(ComboBox1.ListIndex) = ComboBox1.Text
NumLigne = GetLigneItem(cbo_row.List(cbo_row.ListIndex))
Label1.Caption = NumLigne
'si ce n'est pas le dernier élément qui est sélectionner
If ItemIndex <> cbo_row.LineCount Then
'on récupère la ligne de la catégorie suivante
NumLigne = GetLigneItem(cbo_row.List(ItemIndex + 1))
Call Rows(NumLigne).Insert(xlDown)
End If
End Sub
Private Function GetLigneItem(StrItem As String) As Long
Dim CelVal As String
Dim NumLigne As Long
NumLigne = 1
CelVal = Range("A" & NumLigne).Value
While CelVal <> StrItem
NumLigne = NumLigne + 1
CelVal = Range("A" & NumLigne).Value
Wend
End Function
Private Sub cmd_annuler_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
'Dim SelectedSheet As Integer
'Dim x As String
'Dim plage As Range
SelectedSheet = ActiveSheet.Name
For Each O In Worksheets(SelectedSheet).Range("A5:A300")
x = O.Value
If O.Value <> "" And O.Value <> 1 And O.Value <> 2 And O.Value <> 3 And O.Value <> 4 And O.Value <> 5 And O.Value <> 6 And O.Value <> 7 And O.Value <> 8 And O.Value <> 9 Then
frm_listechoix.cbo_choix.AddItem "" & x & ""
End If
Next O
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 14:05
xD xD
vraiment dsl, c'est moi... sa m'arrive de devenir con pour un instant... xD
enfait j'ai bien le combo qui s'appelle cbo_choix
et un LABEL qui s'appelle lbl_row dans lequel j'affiche la ligne ^^ (juste comme test)
cela devrait t'éclaircir un peu lol
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 14:12
Voili voilou ^^
Maintenant erreur sur le linecount:
impossible de lire la proprieté linecount. le controle doit avoir le focus. deplacer le focus sur le controle avant de referencer cette proprieté ou méthode, en utilisant la méthode setfocus.
Alors je dois utiliser setfocus d'apres ce que j'ai compris ^^
juste? ^^
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 6 août 2007 à 14:35
Salut,
C'est a quel moment cette erreur?
Si c'est au Chargement du Form, il me semble que cela foire. Pour contourner le problème teste si le UserForm est Visible dans le Click du Cbo si il est invisible, Sort de la Porcédure avex Exit Sub
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 14:46
Erreur
, Rajouter
cbo_choix.SetFocus
'si ce n'est pas le dernier élément qui est sélectionner
If ItemIndex <> cbo_choix.LineCount Then
'on récupère la ligne de la catégorie suivante
NumLigne = GetLigneItem(cbo_choix.List(ItemIndex + 1))
Call Rows(NumLigne).Insert(xlDown)
cs_makakdef
Messages postés50Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention31 août 2007 6 août 2007 à 15:13
Super ça marche! Yoohooooo! (sauf une petite chose... lol)
Si tu prends la deuxieme feuille, tu lances la macro, et tu essayes d'ajouter une ligne au premier "activites administratives" cela ne marche pas. mais au deuxieme oui :s