[Catégorie modifiée .Net -> VBA] pb ouverture classeur apres execution macro [Résolu]

Signaler
Messages postés
39
Date d'inscription
samedi 30 avril 2011
Statut
Membre
Dernière intervention
26 juin 2012
-
Messages postés
39
Date d'inscription
samedi 30 avril 2011
Statut
Membre
Dernière intervention
26 juin 2012
-
Bonjour,
voilà, je suis novice en vba, ma question va peut etre paraitre simple.
j'ai fait une macro qui me permet de recherche une valeur stock sur un autre classeur, si cette valeur est inferieur à 100 alors msgbox " à commander" sinon addition du stock + nouvelle valeur.
macro exemple:
Sub test()
Dim cl As Workbook
Dim rest As Integer
Set cl = GetObject("C:....\ test.xls")
rest = cl.Sheets("feuil1").Range("A1").Value
If rest < 100 Then
MsgBox ("à commander")
Range("B2").Value = rest
Else
MsgBox ("ne pas commander")
Range("B3").Value = rest
cl.Sheets("feuil1").Range("A1").Value = rest +10
End If
cl.Save
Set cl = Nothing
Workbooks(" test.xls").Close
End Sub
le probleme est que, je souhaite apres la fermeture de tous les classeurs, retourner via le bureau voir si les modifs ont bien été enregistrées et là j'ouvre un classeur vide nommé classeur 1
impossible de lire le classeur test.xls mais en revanche je peux toujours faire les modifs par l'intermediaire du classeur contenant la macro!!!
si quelqu'un pouvait m'expliquer d'ou peut venir mon erreur??
Merci

3 réponses

Messages postés
39
Date d'inscription
samedi 30 avril 2011
Statut
Membre
Dernière intervention
26 juin 2012

salut,
Je viens de trouver la solution à mon probleme!!
En fait le code : GetObject fonctionne bien pour manipuler les données du classeur sans l'ouvrir.
Cependant, quand on réouvre le classeur modifié, il masque la fenetre, du coup le classeur s'ouvre vierge et il faut juste aller dans l'option Fenêtre/Afficher et le classeur est bien là!
Je ne sais pas pourquoi, cette application masque le classeur????
En tout cas merci Jack pour les conseils, mes messages n'en seront que meilleurs!!
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut

Dans quel langage de programmation travailles-tu ?
Prends soin de bien choisir la catégorie de ta question la prochaine fois. Merci

Curieux ce code; GetObject pour ouvrir un classeur ...
Si c'est du VBA, enregistre une macro pendant que tu ouvres un classeur et tu auras le code correct à utiliser. Idem pour la sauvegarde et la fermeture d'un classeur.

Code :
Quand tu montres du code, merci d'utiliser la coloration syntaxique (3ème icone à droite) = plus facile à relire + conserve les indentations (décalage) en tête de ligne

Bizarre :
Ton fichier de test s'appelle " test.xls", avec un espace en tête du nom ?

Pas clair :
" je souhaite apres la fermeture (), retourner () voir si les modifs "
Les modifs faites dans ton classeur " test.xls", donc
"et là j'ouvre un classeur vide nommé classeur 1"
Pourquoi ? Moi, j'aurais ouvert " test.xls", pas un classeur vide.
Je ne comprends pas trop ta logique.

"impossible de lire le classeur test.xls"
Pour quelle raison ?

Pas logique :
cl.Save
Set cl  = Nothing
Workbooks(" test.xls").Close 
devrait être
cl.Save
cl.Close 
Set cl = Nothing


Précaution :
Tu as dimensionné "rest" comme un Integer.
Les Integer n'acceptent des valeurs maxi de 32767. Méfie toi si tes quantités dépassent un jour ce seuil.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
39
Date d'inscription
samedi 30 avril 2011
Statut
Membre
Dernière intervention
26 juin 2012

salut,

merci pour tes réponses,
Effectivement mon message était maladroit, désolé c'est tout nouveau pour moi!!!!

Pour GetObject, il me permet d'interroger un tableau Excel sans que celui ci soit ouvert et également de faire des modifications dessus.
macro réécrite avec tes corrections:
Sub test()
Dim cl As Workbook
Dim rest As Integer
Set cl = GetObject("C:\....\test.xls")
rest = cl.Sheets("feuil1").Range("A1").Value
     If rest < 10 Then
       MsgBox ("à commander")
       Range("B2").Value = rest
     Else
       MsgBox ("ne pas commander")
       Range("B3").Value = rest
      cl.Sheets("feuil1").Range("A1").Value = rest + 10
End If
cl.Save
cl.Close
Set cl = Nothing
End Sub


Je vais essayer d'être un peu plus clair car effectivement ce n'est pas simple à expliquer;
Alors après execution de cette macro dans mon classeur nommé "recherche" se trouvant dans un fichier sur le bureau (il a bien effectué la macro que je voulait, elle me dit "ne pas commander" ce qui est exact), je ferme ce classeur et maintenant je retourne dans un fichier de mon bureau ou se trouve l'autre fichier nommé "test", et là je ne peux l'ouvrir (clic deux fois dessus, il m'ouvre donc un classeur vierge) !!
je n'ai pas mon tableau correspondant aux données que j'avais inscrit
et donc c'est pour cela que moi non plus je ne comprends pas pour j'ouvre pas mon classeur "test".

C'est peut être lié au GetObject mais je ne comprends pas pourquoi?
je continue de chercher
Merci encore