Se connecter avec
S'enregistrer | Connectez-vous

[VBA/EXCEL] Cellule et nom de Fichier.

Dernière réponse : dans Programmation

Tout d'abord bonjour à tous !

Je tiens à préciser que je débute entièrement sur VBA ! Pardonnez moi si le sujet à déja été abordé... J'ai trouvé deuxd trois solutions qui auraient pu correspondre à mon problème mais aucune ne convenait vraiment ! J'ai cherché par moi même, sur les forums etc... Mais bon :) 

J'aurai donc besoin de vos lumières pour m'éclairer un peu !


En gros...

J'ai un fichier que l'on va appeller "Formulaire" Dans lequel l'utilisateur peut changer le mois et l'année pour acceder/créer un fichier dans un répertoire !

Il y à deux choses que j'aimerai pouvoir faire !

- J'ai déja réussi à faire en sorte que quand l'utilisateur appuie sur le bouton ok du formulaire, il ouvre un classeur planning et qu'il l'enregistre sous un nom de fichier que j'ai précisé !

Maintenant je voudrai que, lors de l'enregistrement, le document planning s'enregistre sous un nom définit par les cellules D4 et D7 du classeur formulaire ! C'est possible ? Une idée de code ?

- Deuxième chose : J'aimerai également pouvoir vérifier avant l'enregistrement si le nom de fichier existe déja ou non ( toujours à partir des cellules D4 et D7 du classeur formulaire ) ! Ainsi si il existe, il ouvrira directement le document concernée et, si il n'existe pas, il enregistrera le document selon le principe énoncé plus haut !

Voili Voilou ! En esperant ne pas trop vous embeter ! Bonne journée à tous et en gros gros merci d'avance !

PS : N'hésitez pas à me dire si je n'ai pas été assez clair !

Autres pages sur : vba excel cellule nom fichier

Lassé par la pub ? Créez un compte
Expert Programmation

Pré Scriptum : C'est très clair. :D 

Voici comment lire le contenu de la cellule D7 :
Range("D7").Text
ou encore
Cells(7, 4).Text


Débrouille-toi pour la cellule D4 !

Voici comment lire le contenu de la cellule D7 de la feuille Feuil2 :
WorkSheet("Feuil2").Range("D7").Text
ou encore
WorkSheet("Feuil2").Cells(7, 4).Text
ou encore
WorkSheet(2).Range("D7").Text
ou encore
WorkSheet(2).Cells(7, 4).Text


Voici comment lire le contenu de la cellule D7 de la feuille Feuil2 du classeur Formulaire.xls :
WorkBook("Formulaire.xls").WorkSheet("Feuil2").Range("D7").Text
Là encore, on peut utiliser le numéro d'ouverture du classeur, mais c'est moins pertinant.

Pour savoir si un fichier existe ou pas, cherche mieux dans ce forum :o 

Merci beaucoup ! Ta réponse est très constructive puisqu'elle m'apporte la réponse tout en me faisant comprendre le fonctionnement du code !! J'irai me coucher moins bête cette nuit :)  ! Bon je sens qu'il va y avoir une histoire de concaténation à la mord-moi-le-noeud pour que je mette l'un à côté de l'autre les deux noms de cellules mais je devrai m'en sortir !

Pour la deuxième parti de ma question... Il est vrai que je n'avais pas encore effectué de recherche à ce sujet mais j'attendais d'avoir résolu la première parti... Et vu que je me suis enfin décidé à poster sur le forum je me suis dit : " autant faire d'une pierre, deux coups "

En tout cas merci beaucoup pour cette réponse et à tout bientot !
Expert Programmation

( J'espère que tu sais ce qu'est un spoiler sur ce forum :o  Sinon, clique dessus ;)  )

Pour la concaténation, je t'invite à étudier ce magnifique code :
  1. MsgBox "Killi" + "k5"
  2. MsgBox "Killi" & "k5"
  3. MsgBox "Killik" & 5
  4. MsgBox "Killik" + 5
  5. MsgBox "Killik" & 4 + 1


Oui, je sais, le VB est le langage le plus laid du monde [:vomi]


Citation :
Ta réponse est très constructive puisqu'elle m'apporte la réponse tout en me faisant comprendre le fonctionnement du code
A part ça, compte sur moi pour ne pas te donner de solution toute faite ;) 

Hmmm Je pense avoir saisi que pour la concaténation & et + sont utilisable :whistle:  ! Mais comment VBA, dans tes exemples est capable de faire la distinction entre l'addition et la concaténation ! Les guillemets ?

Je pense qu'il va falloir que je retravaille un peu les bases parceque je saisi pas tout là :)  C'est dur d'apprendre une nouvelle langue :??:  !

Ce que tu m'as donné au dessus, fonctionne effectivement pour sortir les infos d'une cellule... Mais en faisant un enregistrement de code lorsque je fais un enregistrer sous j'obtiens

  1. Workbooks.Open FileName:= _
  2. "\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls"
  3. ActiveWorkbook.SaveAs FileName:="Y:\305 PF\COMMERCE\Stage\Test\XXXXXX.xls", _
  4. FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
  5. ReadOnlyRecommended:=False, CreateBackup:=False


J'en ai deduit que pour mon probleme ca devrait ressembler à quelquechose comme ca... ( Je sens que tu va te moquer de moi :kaola:  )

  1. ActiveWorkbook.SaveAs FileName:="WorkBook("Formulaire.xls")/Worksheet(1).Range("D4" & D7")" _
  2. FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
  3. ReadOnlyRecommended:=False, CreateBackup:=False


Bref ca me renvoit une erreur de syntaxe ^^ !

Encore merci pour tes réponses rapides !
Expert Programmation

Mais non !

Alors d'abord, je hais les ActiveTrucs [:cgsyanick] Cherche pas, c'est un toc. En plus tu le connais le classeur, il s'appelle Formulaire.

Ensuite, la cellule "D4D7", elle n'existe pas ! Tu as concaténé les noms de cellules au lieu de concaténer la valeur des cellules :pfff:  Je te passes le "/" au lieu du "." Vire aussi les paramètres par défaut. Ca alourdit le code sans rien amener d'utile.

C'est quoi ces guillemets autour de WorkBook("Formulaire.xls" )/Worksheet(1).Range("D4" & D7" ) ?

Les guillemets définissent du texte littéral !
  1. Dim killik As String
  2. ' // n'affiche rien, puisqu'on a rien mis dedans !
  3. MsgBox killik
  4. killik = "5"
  5. ' // affiche le texte
  6. MsgBox "killik"
  7. ' // affiche le contenu de la variable
  8. MsgBox killik


J'attends que tu t'auto-corriges un peu...

BOn je viens juste vous dire que j'y que... J'y arrive pas !

La commande Save.As me renvoie tout el temps des erreurs abracadabrantes ! Et malgrès les conseils de Zeb, je me sens aussi perdu que... euh... alice dans le jardin du château !

Mais euh... Alors je me suis dit... Je vais prendre le problème dans l'autre sens !

1. J'ouvre la page
2. Je change le nom
3. J'enregistre

Et là, ca devrait marcher !

Bon dans mon état de débutantisme vous vous doutez bien que ca me renvoie une erreur... 2 secondes j vais chercher mon code !

  1. Sub ChangeFeuille()
  2. '
  3. ' CHangeFeuille Macro
  4. ' Macro enregistrée le 27/07/07 par Nico
  5. '
  6.  
  7. ' J'ouvre la page
  8. Workbooks.Open FileName:= _
  9. "\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls"
  10.  
  11. ' Je change le nom
  12.  
  13. Dim nom As String
  14. nom = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text
  15. ActiveWorkbook.Name = nom


MMMMaaaaaiiiiisss euuuhh ! Il me dit : "erreur de compilation : Impossibilité d'affecter à une propriété en lecture seule :whistle:  !

QQu'est ce que je dois faire ?


J'attends que tu t'auto-corriges un peu...[/quotemsg]

Promis je fais de mon mieux :) 
Expert Programmation

Et non, c'est lors de l'enregistrement que le nom de fichier changera. Name (ou FullName) sont des propriétés en lecture seule.

Il faut revenir à ta première idée :
  1. Dim classeur_vierge As Workbook
  2. Dim nom_du_classeur As String
  3.  
  4. ' // Ouverture du classeur vierge
  5. Set classeur_vierge = Workbooks.Open("\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls")
  6.  
  7. ' // Concaténation
  8. nom_du_classeur = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D4").Text & _
  9. Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text
  10.  
  11. ' // Sauvegarde
  12. classeur_vierge.SaveAs FileName:="Y:\305 PF\COMMERCE\Stage\Test\" & nom_du_classeur & ".xls"
  13.  
  14. ' // On ferme !
  15. classeur_vierge.Close
  16.  
  17. ' // Mr Proper.
  18. Set classeur_vierge = Nothing


Le code, lignes 8 et 9 est bien lourd.
Regarde ça :
  1. ' // Concaténation
  2. With Workbooks("Formulaire.xls").Worksheets("Feuil1")
  3. nom_du_classeur = .Range("D4").Text & .Range("D7").Text
  4. End With

(Devant tant de bonne volonté, j'ai fait une petite entorse à mes sacro-saints principes ;)  )

Edit : Hourrrra j'ai fini par trouver ! Il y avait deux trois choses qui ne fonctionnait pas dans ton code ( cf plus bas ).
  1. !
  2.  
  3.  
  4. Sub ChangeFeuille()
  5. '
  6. ' ChangeFeuille Macro
  7. ' Macro enregistrée le 30/07/07 par AUCHAN
  8. '
  9.  
  10. Dim classeur_vierge As Workbook
  11. Dim nom_du_classeur As String
  12.  
  13. ' // Ouverture du classeur vierge
  14. Set classeur_vierge = Workbooks.Open("\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls")
  15.  
  16.  
  17. ' // Concaténation
  18.  
  19. With Workbooks("Formulaire.xls").Worksheets("Feuil1")
  20. nom_du_classeur = .Range("D4").Text & .Range("D7").Text
  21. End With
  22.  
  23.  
  24. ' // Sauvegarde
  25.  
  26. classeur_vierge.SaveAs FileName:="Y:\305 PF\COMMERCE\Stage\Test\" & nom_du_classeur & ".xls"
  27.  
  28. Fin de l'edit [/b]
  29.  
  30.  
  31. End Sub


VOili voilou ! Encore Merci

Ahhhhh, je comprends mieux beaucoup de chose !

C'est cool malheureusement ça ne fonctionne pas ( Ou alors je sais pas recopier un code en entier ni faire un copier coller :p  )

Je commence avec le code et après j'ai deux trois questions si t'as un peu le temps :) 

  1. ' // Ouverture du classeur vierge
  2. Set classeur_vierge = Workbooks.Open FileName:= "\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls"


Ca me renvoit une erreur de syntaxe ! moi pas bien comprendre !
-------------------------------------------------------------------------------------------------------

Si je suprime set classeur_vierge, je peux essayer de vérifier la deuxième partie du code !

  1. nom_du_classeur = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D4").Text & _
  2. Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text


ou
  1. With Workbooks("Formulaire.xls" ).Worksheet("Feuil1" )
  2. nom_du_classeur = .Range("D4" ).Text & .Range("D7" ).Text
  3. End With


Ca me renvoit une erreur 438... Propriété ou méthode non gérée par cet objet...

Bref ca fonctionne pas top. C'est VBA qui craque ? Ou encore une malicieuse astuce de ta part pour me triturer la cervelle :)  !

Autrement, je pense avoir bien compris le fonctionnement du code with ! Et ca me sera très utile pour la suite de mon projet. J'en ai pris note !

Sinon il existe une liste des propriétés de VBA ? ( Ne réponds pas à ma question si tu penses que je n'ai pas suffisament chercher ! La question vient de me traverser l'esprit donc voilà ! :)  )

Je me sers assez régulièrement de l'explorateur d'objet pour trouver certaines propriétés et classes mais il n'y à quasi aucune explication... De plus Au boulot, le fichier d'aide VBA à été supprimer ! Impossible de s'en servir !

En tout cas Merci beaucoup !

Edit : La deuxième partie du code fonctionne si je rajoute un "s" à worksheet. Cependant je ne comprends toujours pas pourquoi l'ouverture du fichier pose problème ^^
Expert Programmation

Regarde mieux :o  .... maintenant que j'ai corrigé mon code :whistle: 

Pour le s à Worksheets, désolé, c'est moi qui ai copié ton code sans vérifier.

Workbook.Open Truc
est une procédure, il n'y a ni résultat, ni parenthèses.

Set Machin = Workbook.Open(Truc)
est une fonction, il y a un résultat (qui va aller dans Machin), et il faut des parenthèses.

Voili.

Citation :
De plus Au boulot, le fichier d'aide VBA à été supprimer ! Impossible de s'en servir !

C'est inadmissible. Donne l'impression que tu te sers de PPC comme d'un manuel de référence et je clos tous tes sujets. [:zeb] (Je fais le méchant modo là).

Exige auprès de tes responsables la mise à disposition des outils nécessaires à ton travail.
Expert Programmation

A 6 secondes près, je considère que tu as trouvé tout seul sans te servir de mes corrections. Félicitations.


Ce n'est pas une raison pour ne pas faire installer l'aide en ligne de Excel/VBA !

Citation :
A 6 secondes près, je considère que tu as trouvé tout seul sans te servir de mes corrections. Félicitations.


VOui voui ! J'ai fini par trouver comme quoi je fais pas semblant de chercher :D  !


Ce n'est pas une raison pour ne pas faire installer l'aide en ligne de Excel/VBA ! a dit :

Ce n'est pas une raison pour ne pas faire installer l'aide en ligne de Excel/VBA !


Nan je me sers pas de PPC comme d'un manuel de référence. Avant de poster un message je passe du temps à fouiner sur Internet voire si je trouve pas la solution par moi même ! C'est comme ca que j'ai toujours appris à me servir de l'outil informatique : démerde toi et si vraiment ca ne va pas, demande de l'aide. Désolé si tu l'as pris comme ça !

Concernant l'aide en ligne... Je suis stagiaire actuellement dans une boite... Je pense être le seul à me servir de VBA et je ne pense pas que mon maitre de stage en ai déja entendu parler ! Je vais voir ce que je peux faire cela dit !

Genre essayer de rapporter le fichier manquant par clé USB à partir de chez moi. Vu que les versions d'Excel diffèrent... Ca risque d'être compliqué ! M'enfin je verrai bien !

En tout cas merci beaucoup. Les choses deviennent plus clair dans ma petite tête et j'éspère passer la prochaine étape sans encombre.

Bonne journée et à bientôt !





Expert Programmation

Désolé, j'ai plusieurs casquettes. Et celle de modérateur m'impose un certain discours. Ta bonne volonté a déjà été prouvée ;)  Courage mon gars.

Le fichier VBAXLxx.CHM est ce qui te manque.
Lassé par la pub ? Créez un compte