à l'ouverture d'un fichier excel : VB

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. Dans le code de ThisWorkbook

    Private Sub Workbook_Open()

    ActiveWorkbook.Worksheets("Menu").Activate

    End Sub
    0
    1. 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
      1. 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
        1. 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
          1. 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
            1. 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. forcement si j'écri pas comme il faut... c'est bon ça marche merci beaucoup!!
                0
            2. De rien, et la prochiane fois pense au copier/coller , ca t'evitera des soucis ;-)
              0
              1. 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
            3. 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. é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
            4. 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
              1. 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. 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
              2. 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. 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
              3. 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

                Discussions similaires

                question pix mot caché

                7 réponses