à l'ouverture d'un fichier excel : VB

avrel38 -  
NicoDisso Messages postés 231 Statut Membre -
Bonjour,
je suis actuellement en stage et je travaille sur une base de données sous excel.
je souhaite faire un programme qui quand j'ouvre mon classeur excel il s'ouvre par défaut sur la feuille 3 apellée
menu.
ou est ce que je dois mettre mon programme dans thisworkbook workbook open? ou ailleur?
et qu'est ce que je dois mettre dans mon programme pour que ça fasse ce que je demande??
si quelcun peut m'éclairer merci d'avance!!
Configuration: Windows 2000 Internet Explorer 6.0

12 réponses

  1. NicoDisso Messages postés 231 Statut Membre 32
     
    Dans le code de ThisWorkbook

    Private Sub Workbook_Open()

    ActiveWorkbook.Worksheets("Menu").Activate

    End Sub
    0
  2. avrel38
     
    ok ça marche mais ya un petit problème:
    quand je l'ouvre ça ce met sur ma feuille de menu comme convenu et la j'ai un message d'erreur:
    erreur d'execution '438':
    propriété ou méthode non gérée par cet objet
    ensuite je click sur débogage et ActiveWorbook.worksheet("menu").active apparait en jaune surligné!
    je ne comprend pas ce que j'ai mal fait?!
    0
  3. avrel38
     
    ok ça marche mais ya un petit problème:
    quand je l'ouvre ça ce met sur ma feuille de menu comme convenu et la j'ai un message d'erreur:
    erreur d'execution '438':
    propriété ou méthode non gérée par cet objet
    ensuite je click sur débogage et ActiveWorbook.worksheet("menu").active apparait en jaune surligné!
    je ne comprend pas ce que j'ai mal fait?!
    0
  4. avrel38
     
    ok ça marche mais ya un petit problème:
    quand je l'ouvre ça ce met sur ma feuille de menu comme convenu et la j'ai un message d'erreur:
    erreur d'execution '438':
    propriété ou méthode non gérée par cet objet
    ensuite je click sur débogage et ActiveWorbook.worksheet("menu").active apparait en jaune surligné!
    je ne comprend pas ce que j'ai mal fait?!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. avrel38
     
    ok ça marche mais ya un petit problème:
    quand je l'ouvre ça ce met sur ma feuille de menu comme convenu et la j'ai un message d'erreur:
    erreur d'execution '438':
    propriété ou méthode non gérée par cet objet
    ensuite je click sur débogage et ActiveWorbook.worksheet("menu").active apparait en jaune surligné!
    je ne comprend pas ce que j'ai mal fait?!
    0
  7. NicoDisso Messages postés 231 Statut Membre 32
     
    tu as collé directement le code que je t'ai donné, par ce que dans ton dernier post, il y a des fautes donc ci c'est ecrit comme ca, c'est normal que ca ne fonctionne pas...
    0
    1. avrel38
       
      forcement si j'écri pas comme il faut... c'est bon ça marche merci beaucoup!!
      0
  8. NicoDisso Messages postés 231 Statut Membre 32
     
    De rien, et la prochiane fois pense au copier/coller , ca t'evitera des soucis ;-)
    0
    1. avrel38
       
      bon au risque d'abusé de ta générosité jte pose une autre question qui me pose problème car ta laire d'être bien calé en programmation.
      j'ai créé un programme en visual basic pour verrouiller des pages de saisie et en rendre d'autres automatiques (ex la date).
      j'ai mis mon programme sous worksheet change, il marche pas de problème mais dès que je tape quelque chose dans une celulle de la colonne 1 par exemple et que je tape entrée, il faut que j'attende un petit moment avant que le programme s'execute et que je puisse faire une nouvelle saisie.
      j'aimerais donc le rendre plus rapide.
      de plus j'ai crée un bouton a l'aide d'une macro qui kan on apui dessu nous inser une nouvelle ligne de saisie.
      ce bouton marche mais j'ai limpression que la nouvelle ligne qu'il génère est soumise au programme que j'ai taper et je ne pe pa y accéder immédiatement!! c également tro long.
      si ta une idée... (si ta besoin de plus d'info jten donnerai!!)
      merci beaucoup


      voici ma macro:

      Sub Nouvel_enregistrement()
      '
      ' Macro10 Macro
      ' Macro enregistrée le 27/05/2009
      '
      Rows("6:6").Select
      Selection.Insert Shift:=xlDown
      Rows("4:4").Select
      Selection.Copy
      Range("A6").Select
      ActiveSheet.Paste
      Application.CutCopyMode = False
      End Sub

      voici mon programme:

      Private Sub Worksheet_Change(ByVal Target As Range)

      Dim ILIG As Integer 'N° de la ligne
      Dim ICOL As Integer 'N° de la colonne
      Dim Myvar As String 'sous chaine1: partie numérique de la chaine XS
      Dim Mycheck As Boolean 'vérification que la sous chaine1 est bien numérique
      Dim Mycharacter As String 'sous chaine2: partie charactrere de la chaine XS
      Dim Mycheckc As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
      Dim C1 As String 'sous chaine2: partie charactrere de la chaine XS
      Dim PC1 As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
      Dim E As String 'charactere espace
      Dim XS1 As String 'chaine de characteres dans la cellule 1
      Dim XS As String 'chaine de characteres dans la cellule 1 en majuscule
      Dim XS2 As String 'chaine de caracteres dans la cellule 3
      Dim XS3 As String 'chaine de characteres dans la cellule 3 en majuscule
      Dim XP As Integer 'position du charactere
      Dim XL As Integer 'longueur à extraire


      ILIG = Target.Row
      nouvelE = 0
      If ILIG > 5 Then
      ICOL = Target.Column
      Select Case ICOL
      Case 1
      XS1 = Cells(ILIG, 1)
      XS = UCase(XS1)
      XP = 1
      Myvar = Mid(XS, XP, 4)
      Mycheck = IsNumeric(Myvar)
      Mycharacter = Mid(XS, 5, 2)
      Mycheckc = IsNumeric(Mycharacter)



      If (Len(XS) = 6 And (Mycheck = True And Mycheckc = False)) Then

      Cells(ILIG, 1) = XS

      If (Mycharacter = "BT" Or Mycharacter = "RB") Then
      Cells(ILIG, 2) = "C/C"
      End If

      If Cells(ILIG, 5) = "??" Or Cells(ILIG, 5) = "" Then
      Cells(ILIG, 5) = Now
      End If

      Else
      Cells(ILIG, 1) = "??"
      Cells(ILIG, 5) = "??"
      End If
      Case 3
      XS2 = Cells(ILIG, 3)
      XS3 = UCase(XS2)
      C1 = Mid(XS3, 1, 1)
      PC1 = IsNumeric(C1)
      E = Mid(XS3, 7, 1)

      If (Len(XS3) = 9 And E = " " And PC1 = False) Or XS2 = "divers" Then
      Cells(ILIG, 3) = XS3
      Else
      Cells(ILIG, 3) = "?"
      End If
      Case Else
      If Cells(ILIG, 24) <> "" Then
      Cells(ILIG, 4) = "Accident Qualité"
      End If
      If (Cells(ILIG, 19) <> "?" And Cells(ILIG, 19) <> "" And Cells(ILIG, 20) = "") Then
      Cells(ILIG, 20) = Now
      End If
      End Select
      End If

      End Sub
      0
  9. NicoDisso Messages postés 231 Statut Membre 32
     
    DOnc si je comprends bien ,tu ne veux pas que ta nouvelle ligne soit traitée par la feuille directement.

    Le plus simple, une variable que tu geres et que tu test pour traiter les lignes ou pas

    Dim Traitement_Autorise as Boolean

    sub insertion_ligne

    Traitement_Autorise = false

    tu ajoutes ta ligne

    Traitement_Autorise =true

    end sub

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Traitement_Autorise =true then

    ****ton code*****

    end if

    end sub
    0
    1. avrel38
       
      écoute g fait un essai autremen car ce que tu m'a donné enpeche mon programme de fonctionner par la suite il ne fai que copier collé!

      Dim NewRec As Boolean

      Private Sub NewRec1_Click()
      NewRec = True
      Rows("4:4").Select
      Selection.Copy
      Rows("6:6").Select
      Selection.Insert Shift:=xlDown
      Application.CutCopyMode = False
      End Sub

      Private Sub Worksheet_Change(ByVal Target As Range)
      If NewRec Then
      MsgBox ("Nouvel enregistrement")
      Else
      MsgBox ("Pas de nouvel enregistrement")
      End If

      NewRec = False
      End Sub

      A l'utilisation, si on change le contenu d'une quelconque cellule, on a bien le message "pas de nouvel enregistrement".
      Si on clique sur le bouton NewRec, on créé bien une nouvelle ligne, on a bien le message "Nouvel enregistrement" mais on a aussi le message "Pas de nouvel enregistrement" qui apparait...
      comme si il y avait une boucle kest ten pense?
      0
  10. xXPika74Xx Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   13
     
    Salut

    Je sais que ce post na pas trop sa place ici mais je me demandait au vu de ton premier post tu serait pas un stagiaire provenant du bts IG du lycée st michel des fois??
    0
  11. NicoDisso Messages postés 231 Statut Membre 32
     
    copie ca a la place

    Dim NewRec As Boolean

    Private Sub NewRec1_Click()
    NewRec = True
    Rows("4:4").Select
    Selection.Copy
    Rows("6:6").Select
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
    NewRec = False
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)

    If NewRec = True Then
    'ON NE FAIT RIEN
    Else
    MsgBox "LA, ON TRAVAILLE", vbInformation, "Information"
    End If

    End Sub
    0
    1. avrel38
       
      merci beaucoup ça marche!!!
      bon maintenant jte demande une derniere chose si ta du temps et après je te laisse (si je te solissite autan c par ce que mon stage arrive a son terme et je doit rendre quelque chose qui fonction!! et en se momen a chak foi que je réctifie quelque chose il y a un nouveau pb qui apparait!!)
      le pb est que le reste de mon programme est tro long à s'executer!! par exemple quand je suis ds la colonne 1 je ve vérifier si ce qui vien d'etre tapé est bien 4 chiffre et 2 lettre si c le cas on continue je doit attendre un momen avan ke le programme finisse de s'éxécuté et avan de pouvoir accéder a une autre case ou même modifier celle ci!! je pense que j'ai mal du écrir mon programme jte le montre di moi ce que tu en pences!!
      merci encore pour le temps que tu m'accorde!!

      Dim Traitement_Autorise As Boolean

      Private Sub CommandButton2_Click()
      Traitement_Autorise = True
      Rows("4:4").Select
      Selection.Copy
      Rows("6:6").Select
      Selection.Insert Shift:=xlDown
      Application.CutCopyMode = False
      Traitement_Autorise = False
      End Sub

      Private Sub Worksheet_Change(ByVal Target As Range)

      Dim ILIG As Integer 'N° de la ligne
      Dim ICOL As Integer 'N° de la colonne
      Dim Myvar As String 'sous chaine1: partie numérique de la chaine XS
      Dim Mycheck As Boolean 'vérification que la sous chaine1 est bien numérique
      Dim Mycharacter As String 'sous chaine2: partie charactrere de la chaine XS
      Dim Mycheckc As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
      Dim C1 As String 'sous chaine2: partie charactrere de la chaine XS
      Dim PC1 As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
      Dim E As String 'charactere espace
      Dim XS1 As String 'chaine de characteres dans la cellule 1
      Dim XS As String 'chaine de characteres dans la cellule 1 en majuscule
      Dim XS2 As String 'chaine de caracteres dans la cellule 3
      Dim XS3 As String 'chaine de characteres dans la cellule 3 en majuscule
      Dim XP As Integer 'position du charactere
      Dim XL As Integer 'longueur à extraire


      ILIG = Target.Row
      ICOL = Target.Column
      If Traitement_Autorise = True Then

      Else

      If ILIG > 5 Then
      If ICOL = 1 Then
      XS1 = Cells(ILIG, 1)
      XS = UCase(XS1)
      XP = 1
      Myvar = Mid(XS, XP, 4)
      Mycheck = IsNumeric(Myvar)
      Mycharacter = Mid(XS, 5, 2)
      Mycheckc = IsNumeric(Mycharacter)



      If (Len(XS) = 6 And (Mycheck = True And Mycheckc = False)) Then

      Cells(ILIG, 1) = XS
      If Cells(ILIG, 5) = "??" Or Cells(ILIG, 5) = "" Then
      Cells(ILIG, 5) = Now
      End If
      If (Mycharacter = "BT" Or Mycharacter = "RB") Then
      Cells(ILIG, 2) = "C/C"
      End If
      Else
      Cells(ILIG, 1) = "??"
      Cells(ILIG, 5) = "??"
      End If
      Else
      XS2 = Cells(ILIG, 3)
      XS3 = UCase(XS2)
      C1 = Mid(XS3, 1, 1)
      PC1 = IsNumeric(C1)
      E = Mid(XS3, 7, 1)
      If ICOL = 3 Then
      If (Len(XS3) = 9 And E = " " And PC1 = False) Or XS2 = "divers" Then
      Cells(ILIG, 3) = XS3
      Else
      Cells(ILIG, 3) = "?"
      End If
      Else
      If Cells(ILIG, 24) <> "" Then
      Cells(ILIG, 4) = "Accident Qualité"
      End If
      If Cells(ILIG, 24) <> "" Then
      Cells(ILIG, 4) = "Accident Qualité"
      End If
      End If
      End If
      End If
      End If

      End Sub
      0
  12. NicoDisso Messages postés 231 Statut Membre 32
     
    remplace tout ton code par ca.
    J'ai permute tes variables traitement_autorise afin que se soit plus logique
    ensuite, dans le meme esprit que sur ta premiere procedure, il faut que tu regardes i le programme est en train de changer des choses ou si c'est l'utilisateur, sinon tu boucles en permanence dans ta procedure...

    Un conseil pour déboguer mets toi sur la ligne de code qi t'intéresse et fait F9. un point d'arret s'insere dans la marge. ensuite pour faire du pas à pas tu appuies sur F8 et comme ca tu vois ton code fonctionner au ralenti ( ligne à ligne )...

    Dim Traitement_Autorise As Boolean

    Private Sub CommandButton2_Click()
    Traitement_Autorise = False
    Rows("4:4").Select
    Selection.Copy
    Rows("6:6").Select
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
    Traitement_Autorise = True
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim ILIG As Integer 'N° de la ligne
    Dim ICOL As Integer 'N° de la colonne
    Dim Myvar As String 'sous chaine1: partie numérique de la chaine XS
    Dim Mycheck As Boolean 'vérification que la sous chaine1 est bien numérique
    Dim Mycharacter As String 'sous chaine2: partie charactrere de la chaine XS
    Dim Mycheckc As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
    Dim C1 As String 'sous chaine2: partie charactrere de la chaine XS
    Dim PC1 As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
    Dim E As String 'charactere espace
    Dim XS1 As String 'chaine de characteres dans la cellule 1
    Dim XS As String 'chaine de characteres dans la cellule 1 en majuscule
    Dim XS2 As String 'chaine de caracteres dans la cellule 3
    Dim XS3 As String 'chaine de characteres dans la cellule 3 en majuscule
    Dim XP As Integer 'position du charactere
    Dim XL As Integer 'longueur à extraire

    ILIG = Target.Row
    ICOL = Target.Column
    If Traitement_Autorise = False Then

    Else

    Traitement_Autorise = False

    If ILIG > 5 Then
    If ICOL = 1 Then
    XS1 = Cells(ILIG, 1)
    XS = UCase(XS1)
    XP = 1
    Myvar = Mid(XS, XP, 4)
    Mycheck = IsNumeric(Myvar)
    Mycharacter = Mid(XS, 5, 2)
    Mycheckc = IsNumeric(Mycharacter)

    If (Len(XS) = 6 And (Mycheck = True And Mycheckc = False)) Then

    Cells(ILIG, 1) = XS
    If Cells(ILIG, 5) = "??" Or Cells(ILIG, 5) = "" Then
    Cells(ILIG, 5) = Now
    End If
    If (Mycharacter = "BT" Or Mycharacter = "RB") Then
    Cells(ILIG, 2) = "C/C"
    End If
    Else
    Cells(ILIG, 1) = "??"
    Cells(ILIG, 5) = "??"
    End If
    Else
    XS2 = Cells(ILIG, 3)
    XS3 = UCase(XS2)
    C1 = Mid(XS3, 1, 1)
    PC1 = IsNumeric(C1)
    E = Mid(XS3, 7, 1)
    If ICOL = 3 Then
    If (Len(XS3) = 9 And E = " " And PC1 = False) Or XS2 = "divers" Then
    Cells(ILIG, 3) = XS3
    Else
    Cells(ILIG, 3) = "?"
    End If
    Else
    If Cells(ILIG, 24) <> "" Then
    Cells(ILIG, 4) = "Accident Qualité"
    End If
    If Cells(ILIG, 24) <> "" Then
    Cells(ILIG, 4) = "Accident Qualité"
    End If
    End If
    End If
    End If
    Traitement_Autorise = True
    End If

    End Sub

    0
    1. avrel38
       
      merci beaucoup pour toute l'aide que tu m'a apporté ça faisiat 2 mois que je marachais les cheveux sur ce programme!! et je n'ai eu accès à internet que au bout de 7 semaines stage tu voix la galère...!
      Mais franchement jsuis très reconnaissante de tout le temps que ta passé pour m'aider!!
      encore une fois merci!!
      0
  13. NicoDisso Messages postés 231 Statut Membre 32
     
    de rien, la prochaine fois il faudra juste penser à l'endroit ou tu mets ton code, et verifier en faisant un debogage pas à pas les endroits ou tu passes.
    Du coup, tu te serais rendu compte qu'en mettant du code dans le changement de feuille, des que ton code ecris dedans tu repars dans le code et du coup c'est pour ca que c'est long.
    La technique de la variable à tester est tres simple et te facilite grandement la vie ;-)
    Je n'ai pas fais grand chose, c'est toi qui a tapé tout le code ;-)

    0