à l'ouverture d'un fichier excel : VB

Fermé
avrel38 - 2 juin 2009 à 09:26
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 - 3 juin 2009 à 17:39
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!!
A voir également:

12 réponses

NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
2 juin 2009 à 09:44
Dans le code de ThisWorkbook

Private Sub Workbook_Open()

ActiveWorkbook.Worksheets("Menu").Activate

End Sub
0
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
2 juin 2009 à 10:13
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
forcement si j'écri pas comme il faut... c'est bon ça marche merci beaucoup!!
0
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
2 juin 2009 à 10:26
De rien, et la prochiane fois pense au copier/coller , ca t'evitera des soucis ;-)
0
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
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
2 juin 2009 à 11:13
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
é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
xXPika74Xx Messages postés 115 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 25 mai 2011 13
2 juin 2009 à 11:19
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
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
2 juin 2009 à 18:11
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
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
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
3 juin 2009 à 10:24
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
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
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
3 juin 2009 à 17:39
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