[Excel VBA] Piloter un classeur

Piloter un classeur [Excel VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 30-05-2006 à 10:59:15    

Bonjour,  
Pour une application Excel, je voudrais piloter un classeur à partir d'un autre classeur.  
J'ai créé un userform qui se lance au démarrage. Ce userform ouvre un autre fichier Excel (classeur) et c'est sur ce nouveau classeur que je dois appliquer mon code codé dans mon userform. Le problème, est que je ne sais pas comment piloter le nouveau classeur.  
Pourriez-vous m'aider.  
D'avance merci.

Reply

Marsh Posté le 30-05-2006 à 10:59:15   

Reply

Marsh Posté le 30-05-2006 à 11:12:27    

bonjour,
par exemple :
Workbooks("MonBeauClasseur" ).Worksheets("blabla" ).Range("A1:B12" ).Copy Workbooks("pilote" ).Worksheets("destination" ).Range(cible)
 
(non vérifié et de mémoire...)
ou encore :
With Workbooks("MonBeauClasseur" ).Worksheets("blabla" )
.Range(truc).Value = MaVar1USF
.Range(autre).Value = MaVar2USF
End With

 
(Toujours codé avec le pied !)
 
Nota : cible, truc et autre sont censées être des cellules nommées...
A+


Message édité par galopin01 le 30-05-2006 à 11:29:24

---------------
roger
Reply

Marsh Posté le 30-05-2006 à 11:31:51    

OK galopin01,
J'essaie ça et je donne un retour dès que possible.
Merci.

Reply

Marsh Posté le 30-05-2006 à 12:09:19    

Le nom du nouveau classeur est dynamique.
Voilà mon code d'ouverture du fichier.

Code :
  1. Sub OuvrirFichier()
  2.     Application.Workbooks.Open (Application.GetOpenFilename())
  3. End Sub


Comment récupérer le nom de mon fichier?
Merci.

Reply

Marsh Posté le 30-05-2006 à 13:29:15    

Sub test()
z = Application.GetOpenFilename()
MsgBox z
Application.Workbooks.Open z
End Sub


---------------
roger
Reply

Marsh Posté le 30-05-2006 à 15:21:02    

scusi, encore un souci. Commen t accéder à la valeur d'une cellule.
Actuellement j'ai le code suivant

Code :
  1. Sub MiseAZero()
  2. Dim iDerniereLigne, iDernièreColonne, iLigne, iColonne As Integer
  3. iDerniereLigne = ActiveSheet.UsedRange.Rows.Count
  4. iDernièreColonne = ActiveSheet.UsedRange.Columns.Count
  5. iLigne = 2
  6. For iColonne = 3 To iDernièreColonne Step 1
  7.     If (Cells(iLigne, iColonne).Value <> 0) Then
  8.         Cells(iLigne, iColonne).Value = 0
  9.     End If
  10. Next
  11. End Sub


Mais j'ai une erreur d'exécution 13 Type incompatible. sur la ligne

Code :
  1. If (Cells(iLigne, iColonne).Value <> 0) Then

.
Peut-être faut-il préciser quelque chose avant "Cell"...Je rappelle que la cellule visée appartient à un classeur différent de celui d'où le code est exécuté.
Si vous avez besoin que je sois plus clair, n'hésitez pas.
Merci.


Message édité par Skarn le 30-05-2006 à 15:29:23
Reply

Marsh Posté le 30-05-2006 à 15:31:14    

perso je n'utiliserais pas ActiveSheet ou ActiveWorkbook avec plusieurs classeurs ouverts. Trop nébuleux...
Mais l'erreur  
Utilise la syntaxe complète Workbook(".." ).Worksheets(".." ).Cells(...)
 
Essaie d'intercaler un :
MsgBox iDerniereLigne
MsgBox iDernièreColonne  
à la ligne 7 pour vérifier le contenu de tes variables
 
J'ai l'impression que tu ne pointes pas sur "LaBonneFeuille"
A+


Message édité par galopin01 le 30-05-2006 à 15:49:10

---------------
roger
Reply

Marsh Posté le 30-05-2006 à 15:42:11    

Pas de problème. Je cherche aussi... J'ai récupéré le nom de mon fichier au cas où il faudrait l'indiquer dans une méthode particulière de récupération du contenu d'une cellule.
Ce qui m'étonne, c'est que la méthode ActiveSheet.UsedRange.Columns.Count fonctionne correctement donc  je travaille bien dans le bon classeur. Je ne vois donc pas pourquoi il ne trouve pas ma Cell. Le truc, c'est que la valeur de ma cellule est "0". Au moment de l'exécution, elle passe à "0.000"... J'ai essayé de voir si je pouvais récupérer cette valeur après modification dans une variable Double, mais la même erreur apparaît.

Reply

Marsh Posté le 30-05-2006 à 16:16:32    

le "." transformerait mon chiffre en string... J'essaie de recaster la valeur de chaque cellule mais j'obtiens une erreur '1004'. Je cherche encore...
Si vous avez des idées, elles seront les bienvenues.
Merci.

Reply

Marsh Posté le 30-05-2006 à 16:53:58    

Une 'tite question, comment convertir une chaîne "0,000" en double? J'ai remplacé le "." par "," afin de coller à la norme française des décimales, mais je dois maintenant obtnir la valeur numérique de ma chaine de caractère. J'ai essayé la fonction Val(), mais elle me tronque mes chiffres (-0.954 devient 0).
Merci.


Message édité par Skarn le 30-05-2006 à 16:56:31
Reply

Marsh Posté le 30-05-2006 à 16:53:58   

Reply

Marsh Posté le 30-05-2006 à 17:02:05    

Pour toi la fonction CDbl() devrait aller.

Reply

Marsh Posté le 30-05-2006 à 18:42:32    

J'ai du m'absenter un moment donc j'ai sauté une partie du fil.
J'ai essayé de reprendre. La difficulté est que avec cette instruction :
If (Cells(iLigne, iColonne).Value <> 0) Then
je n'arrive pas à produire une erreur 13
Donc j'ai un peu de mal à rembrayer dans ton histoire
Cette syntaxe est valable quel que soit le classeur cible.
 
Deplus si tu as une erreur d'exécution sur cete ligne je ne vois pas comment la valeur de cette cellule peut changer.
Quand aux valeurs des cellules c'est une autre histoire et ça n'a rien à voir.
 
Il faut que tu précises mieux, que tu donnes un code intégral et non un résumé.  
Et la ligne exacte ou le débogueur t'arrête si on veut avancer.
 
Une observation qui n'est peut-être pas bien loin de la source de tes problèmes : Je rappelle qu'en VBA dans cette ligne :
Dim iDerniereLigne, iDernièreColonne, iLigne, iColonne As Integer
...seul iColonne est integer les autres variables sont Variant
Il serait souhaitable que tes variables soient toutes typées.
 
Sinon pour l'instant je suis dans l'impasse.
A+


Message édité par galopin01 le 30-05-2006 à 18:43:49

---------------
roger
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed