Modification sur userform

Résolu
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017 - 15 déc. 2014 à 16:02
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 24 déc. 2014 à 22:50
Bonjour,
Je suis entain de developper un macro planning et j 'ai créé un userform pour modifier les données.
j'ai fait un test sur mini fichier pour etre sur de mon code

Private Sub enregistre_Click()

Dim Ligne As Long
Dim Cel As Range

Set Cel = Worksheets("feuil1").Columns("A").Find(what:=Me.ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Ligne = Cel.Row
If MsgBox("Voulez-vous modifier les informations du n° ID " & Me.ComboBox1 & " ?", _
vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
End If

Worksheets("feuil1").Range("B" & Ligne) = TextBox1
Worksheets("feuil1").Range("C" & Ligne) = TextBox2
Worksheets("feuil1").Range("D" & Ligne) = TextBox3
Worksheets("feuil1").Range("E" & Ligne) = TextBox4
Unload Me
End Sub

Private Sub UserForm_Initialize()
Set f = Sheets("feuil1")
For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
Me.ComboBox1.AddItem c
Next c
End Sub

Private Sub ComboBox1_Click()
Set f = Sheets("feuil1")
Ligne = Me.ComboBox1.ListIndex + 2
Me.TextBox1 = f.Cells(Ligne, 2)
Me.TextBox2 = f.Cells(Ligne, 3)
Me.TextBox3 = f.Cells(Ligne, 4)
Me.TextBox4 = f.Cells(Ligne, 5)
End Sub




et ce code fonctionne parfaitement...
lorsque je veux l'applquer a mon macro planning je m arrache les cheveux car il plante mais je ne vois pas ou se trouve mon erreur :(


Private Sub enregistrer2_Click()
Dim ligne As Long
Dim Cel As Range

Set Cel = Worksheets("gestionnaire de taches").Columns("B").Find(what:=Me.ComboBox5, LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
ligne = Cel.Row
If MsgBox("Voulez-vous modifier les informations du n° ID " & Me.ComboBox5 & " ?", _
vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
End If

Worksheets("gestionnaire de taches").Range("T" & ligne) = TextBox1
Unload Me

End Sub

Private Sub UserForm_Initialize()
Set f = Sheets("gestionnaire de taches")
For Each c In f.Range("b5:b" & f.[B65000].End(xlUp).Row)
Me.ComboBox5.AddItem c
Next c
End Sub

Private Sub ComboBox5_Click()
Set f = Sheets("gestionnaire de taches")
ligne = Me.ComboBox5.ListIndex + 5
Me.ComboBox1 = f.Cells(ligne, 7) 'zone
Me.ComboBox2 = f.Cells(ligne, 8) 'equipement
Me.titre = f.Cells(ligne, 9) 'titre
Me.description = f.Cells(ligne, 10) 'description
Me.ComboBox3 = f.Cells(ligne, 12) 'urgence
Me.impact = f.Cells(ligne, 13) 'impact
Me.besoin = f.Cells(ligne, 14) 'besoin
Me.prerequis = f.Cells(ligne, 15) 'prerequis
Me.postrequis = f.Cells(ligne, 16) 'postrequis
Me.datesou = f.Cells(ligne, 17) 'date souhaité
Me.daterep = f.Cells(ligne, 18) 'delais de reponse
Me.duree = f.Cells(ligne, 19) 'duree
Me.TextBox1 = f.Cells(ligne, 20) 'debut
Me.TextBox2 = f.Cells(ligne, 21) 'fin
Me.responsable = f.Cells(ligne, 24) 'responsable
Me.ressource = f.Cells(ligne, 25) 'ressource
Me.ComboBox4 = f.Cells(ligne, 3) 'statut


End Sub

Private Sub annuler_Click()
planificator.Hide
End Sub

Ca plante sur la partie surlignée....
merci de votre aide

6 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
15 déc. 2014 à 16:20
Bonjour,

Lorsque ça plante.. as tu regardé ce que valent tes variables ??
Et aussi .. quel est le message d'erreur ? (ça peut nous aider tu sais...)

A mon avis.. ça vient de ta variable "ligne" ...

    Set Cel = Worksheets("gestionnaire de taches").Columns("B").Find(what:=Me.ComboBox5, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      ligne = Cel.Row
      If MsgBox("Voulez-vous modifier les informations du n° ID " & Me.ComboBox5 & " ?", _
                      vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
End If

Worksheets("gestionnaire de taches").Range("T" & ligne) = TextBox1


Si ton find ne trouve rien.. Ligne ... est VIDE....


    Set Cel = Worksheets("gestionnaire de taches").Columns("B").Find(what:=Me.ComboBox5, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      ligne = Cel.Row
      If MsgBox("Voulez-vous modifier les informations du n° ID " & Me.ComboBox5 & " ?", _
                      vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
      Worksheets("gestionnaire de taches").Range("T" & ligne) = TextBox1
ELSE 
 MsgBox "Aucun résultat !"
End If







1
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
22 déc. 2014 à 16:12
En effet c est bien le probleme , mais pourtant mais donnée a retrouver en B6 ca ne peut pas etre vide!!!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 déc. 2014 à 17:28
Allez.
Je vais t'aider un peu plus...
Regarde maintenant ce que fait ceci :
Dim f As Worksheet, plage As Range

Private Sub ComboBox5_Click()
MsgBox f.Cells(ComboBox5.ListIndex + plage.Row, 7)
End Sub

Private Sub UserForm_Initialize()
Set f = Worksheets("gestionnaire_de_taches")
lg = f.Range("B" & Rows.Count).End(xlUp).Row
Set plage = f.Range("b5:b" & lg)
ComboBox5.RowSource = f.Name & "!" & plage.Address
End Sub

Tout est maintenant évident (du moins je l'espère pour toi), non ?
Je te laisse maintenant continuer.


1
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
22 déc. 2014 à 16:11
Salut Ucfoutu

Malheureusement je suis une veritable noob! Je dirais que tu as simplifier le code voir rationnaliser.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211 > mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
22 déc. 2014 à 18:06
Bon.
Pense alors à libérer ce sujet (un clic sur le tag RESOLU au niveau de ton tout premier message)
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
23 déc. 2014 à 13:42
apres test il n y a pas une erreur sur ta 1 er ligne de code?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211 > mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
23 déc. 2014 à 14:53
Non (testé) !
Montre ce que tu as écrit.
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
23 déc. 2014 à 15:41

Dim f As Worksheet, plage As Range

Private Sub ComboBox5_Click()
MsgBox f.Cells(ComboBox5.ListIndex + plage.Row, 7)
End Sub

Private Sub UserForm_Initialize()
Set f = Worksheets("gestionnaire_de_taches")
lg = f.Range("B" & Rows.Count).End(xlUp).Row
Set plage = f.Range("b5:b" & lg)
ComboBox5.RowSource = f.Name & "!" & plage.Address
End Sub
Private Sub annuler_Click()
planificator.Hide
End Sub
Private Sub enregistrer2_Click()

Dim ligne As Long
Dim Cel As Range

Set Cel = Worksheets("gestionnaire de taches").Columns("B").Find(what:=Me.ComboBox5, LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
ligne = Cel.Row
If MsgBox("Voulez-vous modifier les informations du n° ID " & Me.ComboBox5 & " ?", _
vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
End If

Worksheets("gestionnaire de taches").Range("T" & ligne) = TextBox1

Unload Me

End Sub


une pop up de VBA me dit "ERREUR d'execution '9':
L'indice n'appartient pas à la selection."
Pour moi lg n'est pas definis non?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 déc. 2014 à 17:14
Bonjour,
Voilà beaucoup d'acrobaties et lenteurs dûes à une mauvaise approche, notamment en ce qui concerne ce maladroit + 5
Je vais te mettre sur la voie, mais tu vas me faire le plaisir de continuer et de ne revenir que si encore en difficulté
1) Dans un cas comme celui-ci l'utilisation de la propriété RowSource est plus que souhaitable
2) évite de nommer (source d'erreurs) une feuille avec des espaces ===>> appelle ta feuille ainsi, plutôt : gestionnaire_de_taches

Premier pas, maintenant :
regarde ce que fait ceci :
Private Sub UserForm_Initialize()
Dim f As Worksheet, plage As Range
Set f = Worksheets("gestionnaire_de_taches")
lg = f.Range("B" & Rows.Count).End(xlUp).Row
Set plage = f.Range("b5:b" & lg)
ComboBox5.RowSource = f.Name & "!" & plage.Address
End Sub

Reviens après ce premier pas
0
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
16 déc. 2014 à 07:51
Merci je vais tester
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mikmak78 Messages postés 59 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 6 mars 2017
22 déc. 2014 à 16:14
Salut All

Je vais recentrer le debat :p
je mets en lien mon fichier

http://cjoint.com/?0LwqvOScrP2

bouton planificator :)
0
hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 12
15 déc. 2014 à 20:14
Bonjour,

Je pense que dans :
Worksheets("gestionnaire de taches").Range("T" & ligne) = TextBox1

ligne étant déclaré comme long :
On devrait avoir :

Worksheets("gestionnaire de taches").Range("T" & str(ligne)) = TextBox1

Bon courage !
-2
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 déc. 2014 à 07:50
Bonjour,
Si tu avais au moins testé ce que tu as écrit, tu ne l'aurais pas écrit !
Fais donc ce petit test :
Dim toto As Long
toto = 123
MsgBox "alors" & toto ' ===>> alors123 (correct)
MsgBox "alors" & Str(toto) ' ===>> alors 123 (incorrect)


Aucune fonction de conversion n'est ici nécessaire. Si tu voulais toutefois absolument en utiliser une, c'est alors Cstr, qui était celle à choisir.
Je vois que tu as "récolté" deux fois un -1. Je crois que cette sanction trouve plus son explication dans le fait que tu es intervenu sans tester que dans celui de ton erreur.
0
hbouia Messages postés 112 Date d'inscription mardi 30 juillet 2013 Statut Membre Dernière intervention 22 novembre 2022 12
Modifié par hbouia le 16/12/2014 à 15:09
Bonjour et merci pour le commentaire un peu "cassant".
Mais tu as raison, pour que je ne récolte pas un "-1" supplémentaire quoique je m'en tape copieusement, je cesserai dès aujourd'hui toute intervention sur ce site.
Cordialement PROFESSEUR ;)
P.S.: Bien des manières existent pour formuler sans mépris un commentaire.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 16/12/2014 à 16:40
Ne confonds pas "mépris" et reproche (c'est un reproche, que je t'ai fait).
Bref ...Faut-il, en plus, te remercier pour ton apport utile (?) à cette discussion ?
0
Rejoignez-nous