FORUM Tom's Hardware » Programmation » VB / VBA / VBS » macro - initialize
 

macro - initialize

Il y a 369 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : macro - initialize
 
Plus d'informations

j'ai un petit probleme... cela ne s'initialise pas !!

j'ai cherché dans l'aide.. mais pas assé apparament... si vous aviez une piste

je cherche a remplir 2 cases lors de l'ouverture de ma userform "update"

Code :
  1. Private sub update_initialize()
  2. Dim machine As String
  3. machine = principal.ComboBox2.Text  ' principal est un userform où un nom est indiqué dans le combobox
  4. ' ================================= met un nom de  machine
  5. TextBox1.Text = machine
  6. ' ================================== implante la dernière date
  7. Dim dern_jour As Worksheets    ' pour choisir le bon onglet
  8. Dim srce_d As Range            ' Source date
  9. If machine = "MANDELLI 1500" Then dern_jour = Worksheets("mandelli" )
  10. Set srce_d = dern_jour.Range("B2" ).End(xlDown)  ' je vais choisir la dernière date enregistré
  11. jour.Value = srce_d.Value 
  12.     ' le top serais de mettre la date +1, mais je ne sais pas encore faire !
  13.     ' "jour" est un textbox
  14. End Sub


mon histoire plante des le début, ligne 3... mais je ne vois pas trop comment faire....

merci d'avance


---------------
akela

Un sourire ne coûte rien et produit beaucoup.

zeb
Profil : Modérateur libre

As-tu l'option explicit ? (interdit de demander ce que c'est. Interdit de dire non.... :D )

Citation :

[Ca] plante ligne 3

Numéro + Message d'erreur!

Ca va planter ligne 14 ton truc.
Si la réponse est bien MANDELLI 1500, ok. Et sinon ? ---> Bug :/

Si srce_d.Value est une date, srce_d.Value+1 est le jour suivant [:spamafote]


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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 :
  1. Set srce_d = dern_jour.Range("B2" ).End(xlDown).value



---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

Ok pour les lignes en moins.

Non, non pas de Value. En fait, c'est rapport au bug qui n'existe pas. :pt1cable:
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 :

dern_jour = Worksheets("mandelli" )



Voilà la bonne syntaxe

Set dern_jour = Worksheets("mandelli" )


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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 :
  1. Option Explicit
  2. Dim machine As String
  3. Sub update_activate()
  4. machine.text = principal.ComboBox2.Text
  5. ' ================================= met une valeur dans l'onglet machine
  6. TextBox2.Text = machine.Text
  7. ' ================================== implante la dernière date
  8. Dim dern_jour As Worksheets    ' pour choisir le bon onglet
  9. Dim srce_d As Range            ' Source date
  10. If machine = "MANDELLI 1500" Then Set dern_jour = Worksheets("mandelli" )
  11. Set srce_d = dern_jour.Range("B2" ).End(xlDown).Value
  12. jour.Value = srce_d.Value + 1
  13. End Sub


---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

Gné? :heink:

Ce n'est pas censé fonctionner ça !

Code :
  1. Dim machine As String
  2. machine.text = "toto"


On n'est pas en Java !

Code :
  1. Dim machine As String
  2. machine = "toto"



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

? machine

Alors ?


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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 :
  1. Set dern_jour = Worksheets("mandelli" )  'par defaut...
  2. If machine = "SELVA" Then dern_jour = Worksheets("selva" )
  3. 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

---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

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.

Avant la ligne 1, ajoute ce bout de code :

Code :
  1. Dim ws As Worksheet
  2. For each ws In Worksheets
  3.     If ws.Name = "SELVA" Then
  4.         Debug.Print ">>" & ws.Name & "<< - Trouvé SELVA"
  5.     ElseIf ws.Name = "ROBOLIX" Then
  6.         Debug.Print ">>" & ws.Name & "<< - Trouvé ROBOLIX"
  7.     Else
  8.         Debug.Print ">>" & ws.Name & "<< - Ni l'un ni l'autre"
  9.     End If
  10. Next
  11. Stop



Tu viens de découvrir Debug.Print et Stop \:)/


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

ok... il a trouvé les WS selva et robolix.... et alors ? j'ai pas encore compris ou tu voulais que j'aille ....


---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

:/ Ah mais non, il ne peut pas trouver les deux à la fois !!!!

 

Je voulais juste être sûr qu'il pouvait les trouver. Parfois, un ptit espace ou une lettre miniscule/majuscule et pof, ça ne marche plus :(

 

Donc il les trouve. Joie ! :)
Et pour la première question de mon message précédent, à propos de Set ?

 

Reposte ton code si tu veux bien.


Message édité par zeb le 05-11-2007 à 14:55:18

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

il y a bien le "set" de different..
euh.. il trouve les deux... mais c'est normal puisque il "regarde" tout les WS

Code :
  1. Option Explicit
  2. Dim machine As String
  3. Sub userform_activate()
  4. machine = principal.ComboBox2.Text
  5. ' ================================= met un nom de machine
  6. TextBox2.Text = machine
  7. ' ================================== implante la dernière date
  8. Dim dern_jour As Worksheets    ' pour choisir le bon onglet
  9. Dim srce_d As Range            ' Source date
  10. Dim ws As Worksheet
  11. For Each ws In Worksheets
  12.     If ws.Name = "selva" Then
  13.         Debug.Print ">>" & ws.Name & "<< - Trouvé SELVA"
  14.     ElseIf ws.Name = "robolix" Then
  15.         Debug.Print ">>" & ws.Name & "<< - Trouvé ROBOLIX"
  16.     Else
  17.         Debug.Print ">>" & ws.Name & "<< - Ni l'un ni l'autre"
  18.     End If
  19. Next
  20. ' Stop
  21. Set dern_jour = Worksheets("mandelli" )
  22. If machine = "SELVA" Then Set dern_jour = Worksheets("selva" )
  23. If machine = "ROBOLIX" Then Set dern_jour = Worksheets("robolix" )
  24. Set srce_d = dern_jour.Range("B2" ).End(xlDown).Value
  25. 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


---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

Pas de ligne 29 :/

 

:fou: 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 :
  1. Option Explicit
  2. Sub userform_activate()
  3.     Dim machine As String
  4.     Dim dern_jour As Worksheets
  5.     Dim srce_d As Range
  6.     Dim ws As Worksheet
  7.    
  8.     machine = principal.ComboBox2.Text
  9.     Debug.Print "Machine : " & machine
  10.    
  11.     TextBox2.Text = machine
  12.    
  13.     Select Case machine
  14.         Case "SELVA":  Set dern_jour = Worksheets("selva" )
  15.         Case "ROBOLIX": Set dern_jour = Worksheets("selva" )
  16.         Case Else:      Set dern_jour = Worksheets("mandelli" )
  17.     End Select
  18.     Debug.Print "Feuille : " & dern_jour.Name
  19.    
  20.     Set srce_d = dern_jour.Range("B2" ).End(xlDown)
  21.     Debug.Print "Jour : " & srce_d.Value + 1
  22.    
  23.     Debug.Print "Dire à zeb@PPC ce qu'est jour !"
  24.     jour.Value = srce_d.Value + 1
  25. 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.

 

Tu viens de découvrir Select Case \:)/


Message édité par zeb le 05-11-2007 à 15:34:10

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Merci Zeb... mais cela ne marche pas...

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


---------------
akela

Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre

Oh. Je viens de voir l'erreur !

ET TU N'AS PAS HONTE !

Qu'est ce que

  • Worksheet ?
  • Worksheets ?
  • Worksheets("Toto" ) ?


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

honte... euh... etourdis... peu etre :sweat:

bon, ok, cela marche !!

pour résumer :
dim der_jour comme UNE feuille de calcul (pas de s)
set dern_jour comme la feuille "machine" dans LES feuilles de calcul (donc un s)

merci !!!


---------------
akela

Un sourire ne coûte rien et produit beaucoup.