[VBA/EXCEL] Cellule et nom de Fichier.

Killik5

Nouveau membre
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 !

 

zeb

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

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

Débrouille-toi pour la cellule D4 !

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

Voici comment lire le contenu de la cellule D7 de la feuille Feuil2 du classeur Formulaire.xls :[fixed]WorkBook("Formulaire.xls").WorkSheet("Feuil2").Range("D7").Text[/fixed]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
http://www.presence-pc.com/forum/ppc/Programmation/macro-excel-sujet-3077-1.htm#t19940
 

Killik5

Nouveau membre
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 !
 

zeb

Modérateur
( 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 :
Code:
MsgBox "Killi" + "k5"
MsgBox "Killi" & "k5"
MsgBox "Killik" & 5
MsgBox "Killik" + 5
MsgBox "Killik" & 4 + 1

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


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 ;)
 

Killik5

Nouveau membre
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

[cpp]

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

[/cpp]

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

[cpp]

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

[/cpp]

Bref ca me renvoit une erreur de syntaxe ^^ !

Encore merci pour tes réponses rapides !
 

zeb

Modérateur
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 !
Code:
Dim killik As String
' // n'affiche rien, puisqu'on a rien mis dedans !
MsgBox killik
killik = "5"
' // affiche le texte
MsgBox "killik"
' // affiche le contenu de la variable
MsgBox killik

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

Killik5

Nouveau membre
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 !

[cpp]Sub ChangeFeuille()
'
' CHangeFeuille Macro
' Macro enregistrée le 27/07/07 par Nico
'

' J'ouvre la page
Workbooks.Open FileName:= _
"\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls"

' Je change le nom

Dim nom As String
nom = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text
ActiveWorkbook.Name = nom

[/cpp]

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 :)
 

zeb

Modérateur
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 :
Code:
Dim classeur_vierge As Workbook
Dim nom_du_classeur As String

' // Ouverture du classeur vierge 
Set classeur_vierge = Workbooks.Open("\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls")

' // Concaténation
nom_du_classeur = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D4").Text & _
                  Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text

' // Sauvegarde
classeur_vierge.SaveAs FileName:="Y:\305 PF\COMMERCE\Stage\Test\" & nom_du_classeur & ".xls"

' // On ferme !
classeur_vierge.Close

' // Mr Proper.
Set classeur_vierge = Nothing

Le code, lignes 8 et 9 est bien lourd.
Regarde ça :
Code:
' // Concaténation
With Workbooks("Formulaire.xls").Worksheets("Feuil1")
    nom_du_classeur = .Range("D4").Text & .Range("D7").Text
End With
(Devant tant de bonne volonté, j'ai fait une petite entorse à mes sacro-saints principes ;) )
 

Killik5

Nouveau membre
Edit : Hourrrra j'ai fini par trouver ! Il y avait deux trois choses qui ne fonctionnait pas dans ton code ( cf plus bas ). [cpp]
!


Sub ChangeFeuille()
'
' ChangeFeuille Macro
' Macro enregistrée le 30/07/07 par AUCHAN
'

Dim classeur_vierge As Workbook
Dim nom_du_classeur As String

' // Ouverture du classeur vierge
Set classeur_vierge = Workbooks.Open("\\VMN03910031\COMMON\305 PF\COMMERCE\Stage\Test\Vierge.xls")


' // Concaténation

With Workbooks("Formulaire.xls").Worksheets("Feuil1")
nom_du_classeur = .Range("D4").Text & .Range("D7").Text
End With


' // Sauvegarde

classeur_vierge.SaveAs FileName:="Y:\305 PF\COMMERCE\Stage\Test\" & nom_du_classeur & ".xls"

Fin de l'edit



End Sub[/cpp]

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 :)

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

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 !

[cpp]nom_du_classeur = Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D4").Text & _
Workbooks("Formulaire.xls").Worksheet("Feuil1").Range("D7").Text
[/cpp]

ou [cpp]With Workbooks("Formulaire.xls" ).Worksheet("Feuil1" )
nom_du_classeur = .Range("D4" ).Text & .Range("D7" ).Text
End With
[/cpp]

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 ^^
 

zeb

Modérateur
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.

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

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

Voili.

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.
 

zeb

Modérateur
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 !
 

Killik5

Nouveau membre
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 !



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 !





 

zeb

Modérateur
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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 049
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut