Conseils basiques VBA

Bonjour à tous !

Je me permets de vous solliciter pour la première fois pour une petite question Excel VBA. Je n'ai que très (très) peu de connaissances du coup pour comprendre et répliquer les solutions que je trouve sur internet, j'ai du mal... J'utilise un Mac.

J'ai donc un projet Excel où une cellule en particulier collecte les mots que je veux utiliser en mots-clés dans les propriétés.

J'aimerais qu'en lançant une macro :

1. les doublons soient supprimés de la cellule (et uniquement de cette cellule)

J'ai trouvé des solutions mais que je n'arrive pas à les adapter à mon cas particulier.

Ce n'est cependant pas le plus important. Si la solution est difficile à implanter, je m'en passerai.

2. que cette cellule soit copiée en mots clés dans les propriétés (ça j'ai réussi)

--> ThisWorkbook.BuiltinDocumentProperties("keywords") = Range("M18").Text

3. que le fichier Excel soit enregistré dans un repertoire en particulier (possible dans un dossier Google Drive ? j'utilise l'application qui me permet de voir mes dossier dans le Finder) avec un nom qui reprend le contenu de F8 & F12 & Date.xlsm

Un grand merci d'avance !

Cordialement,

Arthur

Bonjour,

Je ne sais pas si je suis le seul à avoir du mal à comprendre mais un petit fichier exemple ne serait pas de refus.

A plus !

Bonjour Braters,

Désolé pour ma réponse tardive, je préférais avancer sur mon fichier Excel afin qu'il soit plus clair. Tu peux le trouver avec ce message.

J'ai donc un formulaire avec différents menus déroulants, la réponse à ces derniers s'ajoutant à une cellule "mots clés" à la fin de ma feuille. Lorsque je clique sur mon bouton "Ajouter les mots clés au fichier" les mots clés accumulés dans cette cellule se copient automatiquement dans la section mots clés que l'on trouve en faisant Fichier>Propriétés>Synthèse.

C'est une solution que j'ai trouvée pour gérer ma base de données assez simplement.

J'aimerais donc ajouter du VBA (même si je n'ai pas de compétence en la matière) pour que mon bouton assure d'autres fonctions :

1. Qu'il supprime, si possible, les mots en double en G68 (c'est pas le plus important du tout)

2. Qu'il renomme mon fichier en "L13 + L10 + Date.xlsm"

3. Qu'il l'enregistre directement dans un dossier particulier (ou dans le même dossier si c'est plus facile à faire) sachant que j'utilise l'appli Google Drive.

Voilà j'espère que c'est plus clair, merci beaucoup d'avance !

Arthur

EDIT : J'ai réussi à finalement avancer un peu :

J'ai donc toujours mon bouton "Ajouter les mots-clés" qui marche avec la VBA "ThisWorkbook.BuiltinDocumentProperties("keywords") = Range("M18").Text"

J'ai rajouté un bouton "Sauvegarder dans le drive" qui marche avec

"Sub sauvegarder()

Dim chemin As String, Fichier As String

chemin = "/Users/Arthur/Google Drive/Docs/10. Knowledge Managment/Fiches/"

Sheets("Fiche").Copy

Fichier = Sheets("Fiche").Range("G71")

ActiveWorkbook.SaveAs Filename:=chemin & Fichier

ThisWorkbook.BuiltinDocumentProperties("keywords") = Range("G68").Text

End Sub"

Le nom du fichier est défini par ma cellule G71 qui recense diverses infos.

Cela m'ouvre mon nouveau document au bon nom qui est dans le bon dossier.

Il me reste 2 problèmes :

  • Je voulais incorporer la date du jour à ma cellule G71 mais, je ne sais pourquoi le 08/02/2017 devient 42774.
  • Lorsque mon nouveau fichier s'ouvre, les mots clés sont supprimés, et lorsque je reclique sur "Ajouter les mots-clés", cela ouvre mon fichier d'origine. Le bouton est donc lié au fichier d'origine, je ne sais pas pourquoi.

Des éventuelles idées ?

merci beaucoup d'avance ...

Arthur

14test-excel.xlsm (66.14 Ko)

bonjour, ton fichier joint ne correspond pas à ta macro lol

Pour ton premier problème, as-tu essayé de mettre la cellule en format Date ? ou bien de rajouter la date comme ceci :

Fichier = Sheets("Fiche").Range("G71") & "_" & Date

Tu peux essayer de rajouter :

ActiveWorkbook.SaveAs chemin & Fichier, xlOpenXMLWorkbookMacroEnabled

Et enfin tu peux essayer de changer :

ThisWorkbook
'par
ActiveWorkbook

Bien sur ce sont des hypothèses

A plus !

Salut Braters,

Un grand merci pour ta réponse. Certains choses ont fonctionné, d'autres non.

Pour le filetype, j'ai du adapté ton idée à :

ActiveWorkbook.SaveAs Filename:=chemin & Fichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled

Au niveau de la date, j'ai bien mis la cellule concerné au format date, et la solution d'ajouter " & "_" & Date" ne fonctionne pas, Excel m'annonce un problème au niveau de la ligne cité juste au dessus, j'imagine à cause de la variable "Fichier".

J'ai même essayé de mettre uniquement la date en nom de fichier (remplacer G71 par P10 dans mon code), même résultat. Je ne comprends vraiment pas pourquoi il n'accepte pas cette donnée. Le message d'erreur est :

Impossible d'enregistrer les modifications sous le nom '2017'. Un document temporaire a été créé sous le nom '8B078B00'. Fermez le document existant, puis ouvrez le document temporaire et réenregistrez-le sous un nouveau nom.

Pour info la date dans ma cellule et ajoutée via la formule "=AUJOURDHUI()"

Pour ce qui est de :

ThisWorkbook

'par

ActiveWorkbook

Cela fonctionne parfaitement, merci !

Dernières petites choses :

  • La date, qui pour une raison inconnue, ne fonctionne pas correctement.
  • Le fichier créé, même s'il est bien enregistré au bon nom dans le bon dossier, ouvre un pop-up "enregistrer ; ne pas enregistrer" à chaque fermeture, que l'on enregistre auparavant ou nom.

Merci beaucoup en tout cas, si t'as d'autres idées, n'hésite pas !

Bonjour,

essaye de mettre ceci :

ActiveWorkbook.SaveAs Filename:=chemin & Fichier & Format(Date, "dd-mm-yyyy", vbMonday), FileFormat:=xlOpenXMLWorkbookMacroEnabled

Pour ajouter la date.

Pour le message, tu peux rajouter ceci dans le module "ThisWorkbook" :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = True 'ou False je ne sais plus
Me.Save

End Sub

A plus !

Bonjour Braters,

Pour la date ça marche enfin nickel, merci beaucoup !

Pour le message d'erreur, en reprenant ton code et en l'insérant dans le module ThisWorkBook, il n'y a pas de pop-up à la fermeture seulement pour le fichier d'origine, il y en a toujours pour le fichier créé (que ce soit True ou False d'ailleurs).

Aussi, (peut-être que je m'explique mal) je ne veux pas supprimer le pop-up d'enregistrement dans mon utilisation quotidienne d'Excel. Ni-même dans mes fichiers générés grâce à mon questionnaire. C'est juste que là, il est généré et enregistré dans un dossier, et le pop-up d'enregistrement apparait alors qu'il n'y a pas eu de modification depuis le dernier enregistrement.

Petite chose supplémentaire qui est du ressort de la curiosité : existe-t-il en VBA un moyen d'indiquer un chemin en disant d'utiliser le même que celui du fichier Excel d'origine ? Je m'explique : nous serons 4 à utiliser ce formulaire qui sera partagé via l'appli Google Drive. Si je ne trouve pas de solution, je devrai donc créer 4 fichiers d'origine différents avec pour chacun le chemin pour arriver au dossier concerné.

J'espère que je n'abuse pas trop, merci infiniment pour ton aide dans tous les cas.

Arthur

bonjour,

Pour ton problème il me faudrait ton fichier pour pouvoir tester chez moi, sinon je ne peux rien !

Pour le chemin,

tu as :

chemin = "/Users/Arthur/Google Drive/Docs/10. Knowledge Managment/Fiches/"

tu peux essayer de rajouter la variable "nom" :

nom = Application.UserName

puis de rajouter celle-ci dans ton chemin comme ceci :

chemin = "/Users/" & nom & "/Google Drive/Docs/10. Knowledge Managment/Fiches/"

Biensur, tous les utilisateurs doivent avoir la même suite de dossier, google,docs,10.KM,fiches ...

A plus !

Voici mon fichier Excel pour que ça soit plus pratique.

Pour ce qui est de l'idée de la variable "username" est-ce compatible PC/Mac ?

Ca peut paraître idiot comme remarque mais j'ai l'impression que les slashs sont dans le sens inverse sous Windows.

EDIT : en l'état, je n'arrive pas à intégrer la variable nom dans le chemin

11test-excel1.xlsm (68.41 Ko)

regarde comment est noté ton nom après "Users/" et compare le à

Msgbox Application.username

Avec cette différence, on pourrait adapter le nom entre "Users/" et "/google Drive/"

A plus

Je suis vraiment désolé Braters, mais j'ai pas trop compris cette étape ...

EDIT : si c'est simplement lancer une macro avec cette formule pour savoir comment Excel considère mon nom d'utilisateur, j'obtiens un pop-up avec seulement "Utilisateur de Microsoft Office"

Bonjour,

je ne sais pas si tu as trouvé ta solution. mais je t'en propose une.

Dans un nouveau fichier excel, tu lances la macro suivante :

Sub VariablesEnvironnement()
Dim i As Integer, sEnv As String
Dim Pos As Integer
    ActiveWorkbook.Worksheets.Add
    i = 1
    Do
        sEnv = Environ(i)
        If Len(sEnv) = 0 Then Exit Do
        Pos = InStr(Environ(i), "=")
        Cells(i, 1) = Left(sEnv, Pos - 1)
        Cells(i, 2) = Right(sEnv, Len(sEnv) - Pos)
        i = i + 1
    Loop
End Sub

Une liste de commande va apparaître avec ce que cette commande renvoie.

Ensuite dans une seconde macro, tu peux tester ces commandes à l'aide de cette macro :

Sub Tst()
    MsgBox Environ("USERNAME")
End Sub

En changeant le "USERNAME" par la commande de la colonne A que tu veux.

Tout ceci te permettra d'incrémenter une variable dans ton chemin afin que celui-ci s'adapte à l'utilisateur du fichier en question.

Je reste dispo si tu as des questions !

A plus !

Bonjour Braters,

J'ai bien réussi à récupérer mon nom d'utilisateur via le code que tu m'as fourni et la commande USER. Le nom affiché est le même que ce qu'il devrait être dans le chemin.

En revanche toujours impossible d'implémenter la variable.

J'ai vraiment très peu de compétences en VBA mais j'ai essayé de poser la variable nom = Application.UserName ; nom = UserName ; nom = USER, et de poser mon chemin en

chemin = "/Users/" & nom & "/Google Drive/Docs Team/10. Knowledge Managment/Fiches/"

Ca ne fonctionne pas.

J'ai du mal à comprendre comment adapter mon chemin et de faire quelque chose de différent de ce que tu m'as proposé comme code à la base.

En tout cas la macro n'accepte pas le chemin posé comme tel.

As-tu une idée ?

Avec quelle commande obtiens-tu le nom utilisé dans ton chemin ?

Dans tous les cas, pour le mettre dans une variable, tu fais comme suit :

nom = Environ("USERNAME")

En changeant le "USERNAME" par la commande voulue.

Ainsi ton chemin doit fonctionner et ce peu importe l'utilisateur !

A plus !

Nickel !! Ça marche parfaitement ! À voir simplement la compatibilité avec Windows. Merci infiniment Braters pour tes conseils et ta patience ! J'ai une dernière étape à réussir pour finaliser mon projet mais je vais ouvrir un autre topic car cela n'a pas de lien avec celui-ci.

Merci encore,

Arthur

Rechercher des sujets similaires à "conseils basiques vba"