Pb avec VB et Excel

Résolu
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 - 29 avril 2006 à 19:13
 meriam13 - 2 mai 2006 à 18:44
Bonjour !!

J'utilise cette façon de procéder pour écrire dans des feuilles excel.

Set feuille = GetObject("c:\toto.xls")
Set classeur = feuille.Application.Workbooks("toto.xls")
classeur.worksheets("Feuil1").Cells(1, 1).Value = "toto"
classeur.save

Or, j'ai un problème.
Lorsque je fais une modificationet sauvegarde, la feuille passe automatiquement en "affichage masqué".

Sauriez-vous quelle ligne supplémentaire pourrais-je rajouter pour rendre cette feuille "affiché" par défaut ...

Merci de votre aide précieuse !!! 

26 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 23:26
Et non mon ami,



Item(x)

x doit obligatoirement etre un Numéro.  Item correspond à Sheet



Pour savoir quel numéro elles ont, ouvre le fichier excel en question,

puis insère un module,



Sub NumFeuille ()

   For i = 1 To Sheets.Count
      Msgbox  "La feuille " & i & " correspond à la feuille " & Sheets(i).Name
   Next i

End If

Prépare un stylo et une feuille et note au fur et a mesure.

Si le message te dis "La feuille 2 correspond à la feuille Stock",



Pour la sélectionner depuis VB,
Set FeuilleInfos = ClBook.Worsheets.Item(1)
Set FeuilleStock = ClBook.Worsheets.Item(2)
etc ...

Par contre tu dois déclarer autant de feuille par Set que tu souhaites en ouvrir










  Mortalino 
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 22:01
Salut,

moi je ne déclare pas comme ça, mais ainsi :




dim ExApp as object 
dim ClBook as object

Set ExApp = CreateObject("Excel.Application") )
Set ClBook = ExApp.Workbooks.Open("c:\tonfichier.xls")
ExApp.Visible = True     'pour rendre Excel visible

                   là tu mets ton code

ClBook.Close True
ExApp.Quit






Voilà !

@ ++






  Mortalino 
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
29 avril 2006 à 22:23
OKi, disons que j'utilise ta méthode pour déclarer les feuilles, peux-tu alors me dire comment

- on place une info dans la cellule A1

- placer une info dans un cellule située à "+ X" de A et à "+ Y" de 1 aussi ...

Lorsque tu me dis "là, tu mets ton code, cela veut dire que je peux utiliser ma méthode ?

Merci encore !
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 22:42
dim ExApp As Object 
dim ClBook As Object
dim Feuille As Object      'rajoute ça, c'est pour créer l'objet feuille (ou Onglet)

Set ExApp = CreateObject("Excel.Application") )
Set ClBook = ExApp.Workbooks.Open("c:\tonfichier.xls")
Set Feuille = ClBook.Worsheets.Item(1)   ' remplace 1 par le numéro de la feuille voulue

ExApp.Visible = True     

'pour rendre Excel visible









Feuille.

Cells(1, 1).Value = "toto"     c'est comme quand tu utilises excel, mis a part qu'au lieu de lui dire Sheets(1).Cells .....
                              Feuille.Cells ....






il faut utiliser les terme déclarés en Set





ClBook.Close True
ExApp.Quit









Donc quand je dis tu mets ton code, c'est pour que tu places les données où tu le souhaites dans la feuille (ici n°1)



  Mortalino 
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 22:44
et n'oublie pas, pour libérer la memoire :
Set ExApp = Nothing
Set ClBook = Nothing
Set Feuille = Nothing

(ps : dans mon 1er "Set", enlèves une parenthèse à la fin)

  Mortalino 
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
29 avril 2006 à 22:46
Merci beaucoup ...

Stef
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
29 avril 2006 à 23:11
Heuuu !!

finalement, petit souci :)

Mes feuilles sont nommées "Infos", "Stock" etc ... et pas par item ...

J'ai essayé
Set Feuille = ClBook.Worsheets("Infos")
et meme
Set Feuille = ClBook.Worsheets.Item("Infos")

mais erreur à chaque fois ...

tu ne sais pas comment je pourrais lui suggérer de prendre la feuille que je veux ?

Merci encore
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
29 avril 2006 à 23:27
C'est bon finalement !!

D'où le gros pb du copier coller !

En fait, dans ton code de départ, il manquait un "k" dans worksheet ...

Et donc, normal qu'il y ai une erreur ...

Avec le k, ca marche beaucoup mieux :)))
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 23:31
Autant pour moi, j'ai écrit trop vite..

je l'ai relu 2 fois en passant au travers.
Si ça marche bien maintenant c'est nickel.

  Mortalino 
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
29 avril 2006 à 23:32
Salut,
Bien des codes existes sur VBFrance
J'ai fait un petit prog qui pourais te mettre sur la voie
ça se passe ICI

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
29 avril 2006 à 23:39
Salut Jean Paul

Me concernant je ne peux télécharger ta source aujourd'hui mais j'ai regardé le code et ça a vraiment l'air sympa ce que tu as fait et dans la semaine je te le récupèrerai pour voir mieux.

Effectivement c'est bon d'avoir ces codes sous la main.





(je te mettrai un commentaire)




Bon Week End du 1er mai





  Mortalino 
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
30 avril 2006 à 15:07
Encore moi :)

Voici ce que je déclare dans un module.bas.

sub feuille_load()
Dim ExApp As Object
Dim ClBook As Object

Set ExApp = CreateObject("Excel.Application")
Set ClBook = ExApp.Workbooks.Open("c:\toto.xls")
Set feuille = ClBook.Worksheets.Item("aaa")
Set feuille1 = ClBook.Worksheets.Item("bbb")
Set feuille2 = ClBook.Worksheets.Item("ccc")

En faite, j'utilise souvent le meme chier excel, mais des onglets souvent différents .

Donc, plutot que d'ecrire pour chaque bouton à chaque fois la declaration ci dessous, dans chaque bouton, le pensais pouvoir y accéder
par un module.bas

Je pense que cela doit marcher, par contre, la valeur de feuille, feuille1 et feuille2 ne sont pas reconnues lorsque le programme reprend son fil
apres avoir lu le module.bas

De quelle façon dois-je déclarer (dim feuille As ?????? ) la formule feuille, feuille1 etc ... pour que la form du programme reconnaisse correctement cette valeur ??

dans le form
If feuille1.Cells(1, 1).Value "" Then GoTo 100> Erreur, un objet est requis ...!!

Merci de votre aide toujours précieuse pour avancer !!!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 avril 2006 à 21:18
Salut,





Tes feuilles doivent être déclarées comme l'appli et le classeur, de type Object.
Dim ExApp As Object
Dim ClBook As Object
Dim Feuille As Object
Dim Feuille1 As Object
Dim Feuille2 As Object

Ensuite il sera reconnu dans ton code


" If feuille1









@ ++




  Mortalino 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 avril 2006 à 21:49
Et pour économiser la place, tu peux faire ça :
Dim ExApp As Object, ClBook As Object, Feuille As Object, Feuille1 As Object, _
Feuille2 As Object




  Mortalino 
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
30 avril 2006 à 21:54
Merci encore de ton aide.
 
J'espère ne pas etre trop "prenant" mais j'ai encore un souci, psuique dès que je sors du module, il y a la ligne

If Feuille1.Cells(1, c).Value = "" Then GoTo 100

et là : Erreur d'exécution 91
Variable Objet ou variable bloc With non définie

Encore une incompréhension de ma part ...

Merci de ton aide
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
30 avril 2006 à 22:45
Pour information, en déplaçant les "Dim" et les "Set" sur la form, tout marche nickel ..
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 avril 2006 à 23:32
dans ta ligne If Feuille1.Cells(1, c).Value = "" Then GoTo 100
tu as mis la valeur "c" en colonne, as tu bien fait la boucle For c = x To x... Next ?
(x étant un nombre)
Par contre je ne vois pas à quoi correspond ton GoTo 100
100 c'est la ligne où tu souhaites que ton prog saute ou tu as placé quelque part un
"100:" puis code ?

  Mortalino 
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
30 avril 2006 à 23:38
Le goto 100 est bien bon, et comme je te dis, tout marche nickel si je remplace "Feuille_load" par les lignes qu'il y a dans mon module.

Mais des feuille_load, dans tout le projet, y'en a au moins 40, ce qui alourdirait serieusement le code !!

En fait, il est clair apparement que le soft ne reconnait pas la valeur "feuille1" ou du moins, ne la garde pas en mémoire apres son passage dans le module.

Pourtant à ce que tu me dit, la valeur "feuille1" devrait être reconnu dans le form arpes etre passé par le module ..

Or nan ...

je crise dingue :))
0
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
30 avril 2006 à 23:40
Voila une partie du code exact :

feuille_load


For c = 2 To 1000
If Feuille1.Cells(1, c).Value = "" Then GoTo 100 <==== Erreur
Combo3.AddItem Feuille1.Cells(1, c).Value
Next c
100
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
30 avril 2006 à 23:45
Alors pour que tes objets soient reconnus tout le temps, enlève
Dim ExApp As Object, ClBook As Object, Feuille As Object, Feuille1 As Object, _
Feuille2 As Object
de la procédure et met
Public ExApp As Object, ClBook As Object, Feuille As Object, Feuille1 As Object, _
Feuille2 As Object
dans les déclarations (à placer tout en haut du module)










  Mortalino 
0
Rejoignez-nous