VBA - Excel [Résolu]

Signaler
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007
-
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007
-
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 ^^

Lucien Begert alias makakdef

21 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
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?

Si oui essaie Call Rows((NumLigne + 1)).Insert(xlDown)
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
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]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Re,
OUps un erreur de ma part, j'ai oublier de faire retourner une valeur a GetLIgneItem... Risquait pas de marcher . (mais tu aurais pu le trouver )

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
      If NumLigne = 64 Then Stop
  Wend
 
  GetLigneItem = NumLigne
End Function , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
RE,
On va y arriver,
Enleve cette ligne dans la fonction elle sert a rien c'était pour mes tests.
If NumLigne = 64 Then Stop

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Salut,
Boin ben c'est encore une erreur de ma part.

Ce n'est pas

'si ce n'est pas le dernier élément qui est sélectionner
   If ItemIndex <> ComboBox1.LineCount Then

Mais plutot

'si ce n'est pas le dernier élément qui est sélectionner
   If ItemIndex <> ComboBox1.ListCount Then

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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)???
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
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

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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

Lucien
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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

End Sub
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Re,
C'est quoi l'erreur?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

l'erreur est, objet requis
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Salut,
Je dirais que ton combo ne s'appelle pas cbo_choix

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

effectivement mon combo s'appelle cbo_choix
mais l'erreur se trouve ici: ItemIndex = cbo_row.ListIndex
des que c'est en jaune, cela met: ItemIndex = 0

Voila dsl mais, je ne vos pas aie aie aie
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
SAlut,
Tu possède alors un combo qui s'appelle cbo_row pourquoi deux combos??? je ne comprends plus.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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? ^^
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
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

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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)

L'erreur survient quand je clique sur ok.

tiens les fichier: sey - nos dossiers 2007 test.xls - 0.52MB
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

Re,
pas grave cela montre que tu est bel et bien en chair et en os! un etre humain quoi!
cela arrive a tout le monde de faire des erreurs

Tu est le meilleur!

Lucien