Dialogue entre fichiers excel

Résolu
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006 - 11 mai 2006 à 14:22
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006 - 12 mai 2006 à 19:32
Bonjour, je suis tout nouveau ici et peu expérimenté en VBA. Or, je suis bloqué...

Je suis en train de faire une application Excel pour gérer des entrées et des sorties de personnel par code barre (chaque fois que quelqu"un entre, j'inscris le nom, le prénom, le numéro de badge, l'heure d'entrée, ... dans une feuille excel). Mais avant cela, je dois vérifier que la personne est inscrite dans les registres et y récupérer ces informations (une autre feuille excel).

J'ai donc le numéro de badge en entrée. Je souhaite l'utiliser pour récupérer les informations sur l'autre feuille excel grâce à une fonction Autorisation. Est-il possible que l'un des paramètres de cette fonction soit une feuille excel?

J'ai essayé ce code, mais j'ai une erreur 9...

Public appExcel As Excel.Application 'Application Excel
Public bookExcel As Excel.Workbook
Public listeAutoristations As Excel.Worksheet

Public Sub CommandButton1_Click()
'Chemin du fichier a modifier à chaque installation
repertoire = "C:\...\fichier.xls"
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Gestion du fichier et ouverture statique
Set bookExcel = appExcel.Workbooks.Open(repertoire)
Set ListeAutorisations = bookExcel.Worksheets(Sheet) 'ERREUR 9
'Visualisation en fond d'ecran la page excel
'appExcel.Visible = True
Autorisation(CLng(TextBox1.Value), (ListeAutorisations))
'On entre le matricule et on va chercher les données associées pour les récupérer dans une textbox

Merci de votre aide.

LF pour les nuls,
Bidouilleur fou.

12 réponses

Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006
11 mai 2006 à 15:02
Salut

tu peux faire:

Set ListeAutorisations = bookExcel.Worksheets("le_nom_de_ta_feuille")

public sub autorisation(num as long, feuille as object)

feuille.select
...

end sub

et quand tu l'appelles tu mets:

Autorisation CLng(TextBox1.Value), ListeAutorisations

Alboure
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 mai 2006 à 16:50
Non, pas besoin, c'est nécessaire depuis les autres appli Office ou VB.

A partir du classeur,
Workbooks.Open ("c:/chemin/nom classeur")
'ça t'ouvre le classeur est celui est actif.

celui ci étant ouvert et donc actif, tu peux travailler comme normalement
(range("A1").Value = sboub ; Printout ; bref tout quoi)

Par contre pour le fermer, ne fait pas ThisWorkBook.Close mais ActiveWorkBook.Close

Voilou


Pour te filer un exemple, j'ai un fichier qui calcul mon salaire, quand je l'ouvre, il ouvre mon planning pour récupérer mes heures effectuées, le ferme et place les données aux emplacements qui vont bien :
_________________________________________________________________________
Dim nbjourtrav, nbPrimeDispo, nbheurenuit, nbheurenuitsamedi, nbheurejourdimanche, nbheurenuitdimanche, nbheurejourferie As Byte

Private Sub Workbook_Open()
Workbooks.Open ("S:\PARTAGES\CI\Nico\Tour Nico CI 2006")

moisencours = Month(Date)

If moisencours = 2 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("janv").Select
Call nbheures
ElseIf moisencours = 1 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("déce").Select
Call nbheures
ElseIf moisencours = 3 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("févr").Select
Call nbheures
ElseIf moisencours = 4 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("mars").Select
Call nbheures
ElseIf moisencours = 5 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("avri").Select
Call nbheures
ElseIf moisencours = 6 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("mai").Select
Call nbheures
ElseIf moisencours = 7 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("juin").Select
Call nbheures
ElseIf moisencours = 8 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("juil").Select
Call nbheures
ElseIf moisencours = 9 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("août").Select
Call nbheures
ElseIf moisencours = 10 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("sept").Select
Call nbheures
ElseIf moisencours = 11 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("octo").Select
Call nbheures
ElseIf moisencours = 12 Then
Workbooks("Tour Nico CI 2006.xls").Worksheets("nove").Select
Call nbheures
End If

ActiveWorkbook.Saved = True
ActiveWorkbook.Close

Sheets("salaire").Select
Range("C18").Value = nbjourtrav
Range("C12").Value = nbheurenuit
Range("C13").Value = nbheurenuitsamedi
Range("C14").Value = nbheurejourdimanche
Range("C15").Value = nbheurenuitdimanche
Range("C16").Value = nbheurejourferie
Range("C17").Value = nbPrimeDispo
End Sub

Private Sub nbheures()
nbjourtrav = Range("D38").Value
nbheurenuit = Range("R34").Value
nbheurenuitsamedi = Range("R35").Value
nbheurejourdimanche = Range("R36").Value
nbheurenuitdimanche = Range("R37").Value
nbheurejourferie = Range("R38").Value
nbPrimeDispo = Range("R39").Value
End Sub
______________________________________________________________

j'espere t'avoir aidé

@ ++
mortalino
3
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
11 mai 2006 à 15:20
Merci beaucoup, mais j'ai encore une erreur :

Public Function Autorisation(Matricule As Long, Feuille As objet)

-> erreur de compilation : type défini par l'utilisateur non défini.

(Je n'aime pas que le message parle de l'utilisateur, je sens que j'ai fait mon boulet^^)

LF pour les nuls,
Bidouilleur fou.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 mai 2006 à 15:24
Salut,

Tu dis que tu es en VBA (je suppose Excel!).
Pourquoi déclares-tu
Public appExcel As Excel.Application 'Application Excel
Public bookExcel As Excel.Workbook
Public listeAutoristations As Excel.Worksheet

++
Mortalino
0

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

Posez votre question
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
11 mai 2006 à 15:32
Salut,

Parce que je travaille avec un fichier excel pour mon interface mais que j'ai besoin de faire appel à d'autres fichiers excel. Ne sachant pas comment faire, j'ai essayé un code trouvé sur le site. Il ne fallait pas?

LF pour les nuls,
Bidouilleur fou.
0
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
11 mai 2006 à 18:06
Et bien, voilà qui est clair! Super sympa. Je crois mieux comprendre. En fait, il suffit d'activer le classeur et les feuilles sur lesquels on veut travailler. Et lorsqu'on souhaite revenir sur le classeur de l'application, on les désactive. Du coup, mon erreur 9 viendrait de l'oubli du select. J'essaye tout ça ce soir ou demain, mais en tout cas grand merci (je n'oublierais pas de valider la réponse après essai^^).

LF pour les nuls,
Bidouilleur fou.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 mai 2006 à 06:00
Pas de problème,
Bidouille bien..

++
Mortalino
0
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
12 mai 2006 à 11:06
Super! ça marche! Excatement ce que je voulais. Je sens le pouvoir de VBA entrer en moi. Rien ne pourra m'arrêter. Je vais me mettre à programmer en dehors du boulot!!! lol. Prochaine étape, allumer mon pc pour qu'il me réveille en musique le matin^^


Merci encore.

LF pour les nuls,
Bidouilleur fou.
0
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
12 mai 2006 à 11:22
Par contre, tant que j'y suis... Je peux faire la même chose sans ouvrir le fichier excel? Car ça rame un peu à l'ouverture. Si je pouvais l'utiliser plus rapidement, ce serait génial.

LF pour les nuls,
Bidouilleur fou.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 mai 2006 à 13:18
Je pense que c'est faisable mais j'ai jamais essayé !
(Je vois que malgrès la puissace de VBA rentrer en toi,
tu galères qd même 'lol)

Essai ça (je sais pas si ça marche) :

Range("A1").Value = Workbooks("C:\...\fichier.xls").Sheets("NomFeuille").Range("A1").Value

Sinon, petite astuce pour ne pas trop solliciter les ressources d'Excel :
début de procédure : Application.ScreenUpdating = False
fin de procédure : Application.ScreenUpdating True
> c'est pour inhiber la mise à jour des données pendant le code

++
Mortalino

PS : Pour ton réveil le matin, voit avec "OnTime"
0
LF pour les nuls Messages postés 19 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 2 juin 2006
12 mai 2006 à 16:12
Je ne peux que progresser, en effet... Mais je ne pose qu'une question sur 100 pour l'instant donc ce n'est pas si mal^^

J'essaie ça dès que possible.

Encore merci grand maître VBA.

LF pour les nuls,
Bidouilleur fou.
0
Alboure Messages postés 42 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 21 juin 2006
12 mai 2006 à 19:32
Salut, pour travailler sur un fichier excel sans l'ouvrir,renseigne toi sur ADO, après je peux pas t'aider je ne sais pas m'en servir

Alboure
0
Rejoignez-nous