Modification sur userform [Résolu]

Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
- - Dernière réponse : ucfoutu
Messages postés
18039
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
24064
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2019
2140
1
Merci
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







Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 118 internautes nous ont dit merci ce mois-ci

mikmak78
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
-
En effet c est bien le probleme , mais pourtant mais donnée a retrouver en B6 ca ne peut pas etre vide!!!
Commenter la réponse de jordane45
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259
1
Merci
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.


Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 118 internautes nous ont dit merci ce mois-ci

ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259 -
De quelles autres textboxes s'agit-il, maintenant ?
Il faut deviner ?
mikmak78
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
-
bref tu resolu mon probleme c est juste mais je nais je n'ai plus les données pre rempli apres avoir selectionner la combobox5
mikmak78
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
-
EXCUSE MOI!!!!!!!!! J AI REUSSI A VOIR MON ERREUR!!!!
YOUHOUUUU!
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
mikmak78
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
-
merci tu es efficace et pedagogue
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259 -
Je suis heureux que tu aies compris l'essentiel (savoir extraire la moelle).
C'est pour moi un cadeau (de Noël ou autre, peu importe).
Tache de continuer ainsi, sans nécessité de te presser... fais-le très calmement ...garde confiance en toi ...
Bonne chance.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
0
Merci
Merci je vais tester
++
Commenter la réponse de mikmak78
Messages postés
59
Date d'inscription
vendredi 5 octobre 2012
Dernière intervention
6 mars 2017
0
Merci
Salut All

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

http://cjoint.com/?0LwqvOScrP2

bouton planificator :)
Commenter la réponse de mikmak78
Messages postés
90
Date d'inscription
mardi 30 juillet 2013
Dernière intervention
22 novembre 2018
1
-2
Merci
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 !
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259 -
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.
hbouia
Messages postés
90
Date d'inscription
mardi 30 juillet 2013
Dernière intervention
22 novembre 2018
1 -
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.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
259 -
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 ?
Commenter la réponse de hbouia

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.