meme si pour moi, il est interdis d'interdire, j'ai l'option explicit !! (Je pense l'avoir suffisament lu dans les différents sujets pour penser à le mettre...)
pour la ligne 3 : pas de message d'erreur, mais rien ne ce passe. C'est comme si je n'avais pas de programme.
Citation :
Si la réponse est bien MANDELLI 1500, ok. Et sinon ? ---> Bug
si la reponse n'est pas mandelli, j'ai rajouté les autres choix (style ligne 12), mais je ne les ai pas noté ici pour ne pas surcharger le prog.
et merci pour le "jour suivant", ok, c'est assez simple !!
pourquoi veux tu que mon prog plante ligne 14 ? Peut etre qu'en rajoutant un .Value..... mais je ne peut pas vérifier, mon programme ne fait rien !!
Code :
Set srce_d = dern_jour.Range("B2" ).End(xlDown).value
Non, non pas de Value. En fait, c'est rapport au bug qui n'existe pas. Je n'avais pas compris que tu as viré des lignes. Si dern_jour est vide, alors dern_jour.truc va planter
Mais en regardant mieux ton code, j'ai trouvé le problème. Ligne 12.
Ce code ne fonctionne pas :
ok merci.. mais je ne comprends toujour pas pourquoi cela ne marche pas... Je n'ai ni date ni machine !!
j'ai essayer en changeant la ligne 1... mais je n'obtient aucune différence...
j'ai changé la ligne 10... ComboBox2.AddItem "machine, mais le resultat est le meme !!
j'ai alors essayé en changeant le combobox, en mettant un TextBox, c'est peut etre mieux, surtout que je ne laisse pas le choix de la machine !! Mais aucune machine n'apparait à l'ouverture de la userform "update"
Code :
Option Explicit
Dim machine As String
Sub update_activate()
machine.text = principal.ComboBox2.Text
' ================================= met une valeur dans l'onglet machine
TextBox2.Text = machine.Text
' ================================== implante la dernière date
Dim dern_jour As Worksheets ' pour choisir le bon onglet
Dim srce_d As Range ' Source date
If machine = "MANDELLI 1500" Then Set dern_jour = Worksheets("mandelli" )
Set srce_d = dern_jour.Range("B2" ).End(xlDown).Value
Apprends à débugger ton code. Utilise les touches [F9] pour mettre un point d'arrêt, [F8] pour exécuter pas-à-pas, [F5] pour continuer jusqu'au prochain point d'arrêt. Utilise aussi la "fenêtre exécution" [Ctrl+G] et la "fenêtre espion".
Exemple:
Mets-toi sur la ligne 7. Bascules-y un point d'arrêt ([F9]). Lance ta macro. Le déboggeur s'arrête sur la ligne 7. Dans la fenêtre exécution, tape cette ligne :
? principal.ComboBox2.Text
Alors ?
Sélectionne le mot principal de la ligne 7. Fais le glisser dans la fenêtre espion. Un petit plus devrait apparaître à sa gauche. Ouvre l'arborescence et essaie de comprendre. Alors ?
A ce moment, la ligne 7 n'a pas encore été exécutée. Appuye sur [F8]. La ligne 7 s'exécute. Dans la fenêtre exécution, tape
bon, déjà, une première erreur que tu je n'ai pas vu :
la ligne 5 :sub userform_activate()
ligne 7 : machine = principal.ComboBox2.Text
je peut maintenant commencé a repondre a tes questions !!
Citation :
? principal.ComboBox2.Text
J'obtient le nom de la machine !!
Citation :
Sélectionne le mot principal de la ligne 7. Fais le glisser dans la fenêtre espion. Un petit plus devrait apparaître à sa gauche. Ouvre l'arborescence et essaie de comprendre. Alors ?
mon Dieu, tout ça ? j'essaye de comprendre.. pas gagner d'avance
Citation :
? machine
j'ai aussi le nom de la machine
La suite ...
Code :
Set dern_jour = Worksheets("mandelli" ) 'par defaut...
If machine = "SELVA" Then dern_jour = Worksheets("selva" )
If machine = "ROBOLIX" Then dern_jour = Worksheets("robolix" )
apparament j'utilise mal la "propriety"... je ne vois pas trop....
Message édité par loic_akela le 05-11-2007 à 12:15:04
Ligne 1. Bien : Set dern_jour = Worksheets("mandelli" )
Ligne 2. Mal : dern_jour = Worksheets("selva" )
Ne vois-tu pas une petite différence ?
Mets dern_jour dans la fenêtre espion. Pose un point d'arrêt sur la ligne Set dern_jour = WS("mandelli" ). Exécute le tout et choisis "SELVA".
Sur le point d'arrêt, espionne l'objet dern_jour. Il devrait être vide. Exécute la ligne 1. Il devrait pointer sur mandelli. Exécute la ligne 2. Tu as choisis SELVA, dern_jour devrait pointer sur la feuille SELVA.
Mais tel que ton code est écrit, tu devrais avoir ce msg d'erreur :
Citation :
Erreur d'exécution '91': Variable objet ou variable de bloc With non définie
Aux lignes 2 ou 3.
J'en conclus que machine n'est pas égale à SELVA ou à ROBOLIX.
Debug.Print ">>" & ws.Name & "<< - Ni l'un ni l'autre"
End If
Next
' Stop
Set dern_jour = Worksheets("mandelli" )
If machine = "SELVA" Then Set dern_jour = Worksheets("selva" )
If machine = "ROBOLIX" Then Set dern_jour = Worksheets("robolix" )
Set srce_d = dern_jour.Range("B2" ).End(xlDown).Value
jour.Value = srce_d.Value + 1 ' ajoute 1 jour
j'ai une erreur n°13 ligne 29....
je suis désolé mais j'ai encore pas mal de lacune en VBA... mais je pense que tu l'aavis déjà remarqué !! merci de m'aider en tout cas
Mais pourquoi me rajoutes-tu un .Value à la ligne 30 ? Une valeur, ce n'est pas une plage de cellules. !!! Or, tu as bien déclaré srce_d comme un Range (plage de cellules), NON ?
Ce n'est pas un problème de lacune en VB ça !!!!!
Bon, je relis le code et voilà ce que je te propose :
Code :
Option Explicit
Sub userform_activate()
Dim machine As String
Dim dern_jour As Worksheets
Dim srce_d As Range
Dim ws As Worksheet
machine = principal.ComboBox2.Text
Debug.Print "Machine : " & machine
TextBox2.Text = machine
Select Case machine
Case "SELVA": Set dern_jour = Worksheets("selva" )
Case "ROBOLIX": Set dern_jour = Worksheets("selva" )
Case Else: Set dern_jour = Worksheets("mandelli" )
End Select
Debug.Print "Feuille : " & dern_jour.Name
Set srce_d = dern_jour.Range("B2" ).End(xlDown)
Debug.Print "Jour : " & srce_d.Value + 1
Debug.Print "Dire à zeb@PPC ce qu'est jour !"
jour.Value = srce_d.Value + 1
End Sub
Nettoye la fenêtre Exécution ([Alt+A], [Del]). Exécute ce zoli code. Renvoie-moi le résultat dans la fenêtre Exécution.
ligne 10 : c bon, cela renvoie bien le nom de la machine
ligne 16 : il faut juste changer selva en robolix ligne 15 : erreur n°13 oin ligne 24 : escuse, je l'ai pas reprecisé : jour est un textbox