Incorporer un bouton à l'ouverture d'un classeur
Bonjour,
J'ai un répertoire à l'intérieur duquel se trouve des dossiers clients devis.
Je souhaiterais à l'ouverture d'un de ses classeurs, que vienne s'incorporer un bouton qui correspond au logo de l'entreprise pour REimprimer le devis que ce client à égarer.
Le chemin pour ouvrir ce classeur:
C:\Users\Acer\Desktop\SEBASTIEN\SEBASTIEN\DEVIS\AOÛT
Celui-ci peut changer en fonction de la création du devis.
Un devis établit en JANVIER le chemin sera:
C:\Users\Acer\Desktop\SEBASTIEN\SEBASTIEN\DEVIS\JANVIER
Le chemin pour accéder au bouton:
C:\Users\Acer\Desktop\SEBASTIEN\SEBASTIEN puis ouvrir le classeur MENU et sélectionner l'onglet BOUTON
Le bouton du logo est sélectionné par:
ActiveSheet.Shapes.Range(Array("Bevel 9")).Select
Si quelqu'un connait la fonction pour réaliser cette opération!!!!!
En vous remerciant.
Bonne réception.
Cordialement.
Bonjour,
Je ne suis pas sûr de bien comprendre. Mais au lieu de chercher le logo dans un fichier excel, vous devriez plutôt ajouter le logo à partir de l'image originale via la méthode .addpicture.
Et surtout, vous devriez avoir un fichier pour imprimer tous vos devis en pdf au lieu de dupliquer le fichier excel, ce serait plus simple.
Cdlt,
Bonjour 3GB,
En vous remerciant pour vous être pencher sur ma demande.
Oui, vous avez raison, je n'ai pas pensé à le transformer en PDF.
J'ai essayé de convertir mon fichier excel en PDF, mais n'y arrive pas.
A l'heure actuelle ma fonction pour convertir en excel est:
ChDir "C:\Users\acer\Desktop\SEBASTIEN\SEBASTIEN\facture\" & Mois
MonFichier = Application.GetSaveAsFilename(NxNom, fileFilter:="excel Files (*.xlsx), *.xslx")
NxNom = Cells(4, "O").Value & " F " & Cells(10, "d").Value
J'ai essayé la fonction suivante sans succès:
'MonFichier = Application.GetSaveAsFilename(NxNom, fileFilter:="ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF")
Pouvez vous me dire quelle est la bonne instruction.
En vous remerciant.
Cordialement.
Bonjour bejouette,
N'hésitez pas à utiliser les balises </> du ruban d'icônes pour poster du code.
Il faudrait plutôt ceci :
dossier = "C:\Users\acer\Desktop\SEBASTIEN\SEBASTIEN\facture\" & Mois
with activesheet 'ou with sheets("DEVIS") avec votre feuille de devis nommée "DEVIS"
NxNom = .Cells(4, "O").Value & " F " & .Cells(10, "d").Value & ".pdf"
sfilename = dossier & "\" & NxNom
.exportasfixedformat type:=xltypepdf, filename:=sfilename, ignoreprintareas:=false
end with
'NB : rien ne sert d'avoir des dossiers mensuels !
'Cependant, vous pouvez prévoir d'inclure le mois dans le nom du fichier pour une recherche rapide
Cdlt,
Re bonjour
OK pour </> Dan me l'a expliqué et déjà dit
Essayera de faire mieux la prochaine fois
'NB : rien ne sert d'avoir des dossiers mensuels !
'Cependant, vous pouvez prévoir d'inclure le mois dans le nom du fichier pour une recherche rapide
Oui tout à fait. Autrement sur le même dossier, cela me ferait trop de dossiers. Cela me procure une sélection quantitative et c'est beaucoup plus simple pour moi.
Quant à votre développement, ce n'est que du bonheur.
Il fonctionne à merveille.
J'ai mis du temps à vous répondre (avec toutes mes excuses, mais il y avait des entreprises à notre domicile).
Il est d'autant plus intéressant pour moi, que je viens de changer mon ordinateur.
J'avais un chemin sur l'ancien ordi et tout fonctionnait à merveille. Je vous ai mis ce chemin que j'utilise sur notre précédente correspondance.
Sur le nouveau, j'ai donc changé le chemin et tout bloquait systématiquement sur
pc > documents
J'ai embêté Dan pour ce problème.
Evidemment la recherche, du chemin n'est pas du tout la même que le mien, mais ne comprend pas pourquoi sur l'ancien cela fonctionnait et pas sur le nouveau.
En tout cas, vous avez résolu deux problèmes en un.
Super sympa.
Un GRAND MERCI à vous et bonne soirée.
Bien cordialement.
Bonjour bejouette,
Merci pour ce sympathique retour !
En effet, les balises </> permettent de mettre en forme le code et ainsi de le rendre lisible et aussi de le copier facilement (a contrario, quand un code est présenté sous la forme d'image - ce qui n'est pas le cas ici - on ne peut rien en faire).
J'imagine que le chemin n'était pas bon. Pour partir indifféremment du bureau par exemple, vous pouvez utiliser la fonction environ :
dossier = environ("userprofile") & "\Desktop\...suite du chemin...\"
En tout cas, je suis content que votre problème soit résolu.
Bonne continuation et à bientôt peut-être,
Bonjour 3GB
Je reviens vers vous pour un problème d'impression
Pour mes lignes de facturation, j'ai mis dans la macro, la formule ci-dessous pour l'impression.
ActiveSheet.PageSetup.PrintArea = "$B$1:$F$300"
La fenêtre d'impression, par la formule suivante:
If Application.Dialogs(xlDialogPrint).Show = False Then
ActiveWindow.Close False
Des fois, ma facture ne représente que (par exemple 10 lignes) alors, je choisis impression par page 1 à 1, et........ j'imprime 6 pages. Une page remplie pour ma facture et 5 pages blanches.
De même concernant votre macro ci-dessous:
dossier = "C:\Users\Acer\Desktop\SEBASTIEN\FACTURE\" & Mois
'dossier = "C:Users\utilisateur\Desktop\SEBASTIEN\FACTURE\" & Mois
With ActiveSheet 'ou with sheets("DEVIS") avec votre feuille de devis nommée "DEVIS"
NxNom = .Cells(4, "O").Value & "_F" & .Cells(10, "d").Value & ".pdf"
sfilename = dossier & "\" & NxNom
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sfilename, IgnorePrintAreas:=False
End With
j'enregistre 6 feuilles.
Avez vous une astuce pour IMPRIMER et ENREGISTRER uniquement les feuilles contenant de l'écrit.
En vous remerciant.
Bonne réception.
Bien cordialement.
Bonjour Bejouette,
Je ne suis pas certain d'avoir parfaitement saisi le problème. Si c'est ce que je pense, il est possible de momentanément masquer les lignes vides (en testant ici la première colonne, càd la B, par exemple) :
dim rhide as range
dossier = "C:\Users\Acer\Desktop\SEBASTIEN\FACTURE\" & Mois
with activesheet
NxNom = .Cells(4, "O").Value & "_F" & .Cells(10, "d").Value & ".pdf"
sfilename = dossier & "\" & NxNom
with .range("$B$1:$F$300")
.PageSetup.PrintArea = .address
for i = 1 to .rows.Count
if .Cells(i, 1) = "" then
if rhide is nothing then set rhide = .rows(i) else set rhide = union(rhide, .rows(i))
end if
next i
end with
if not rhide is nothing then rhide.entirerow.hidden = true
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sfilename, IgnorePrintAreas:=False
if not rhide is nothing then rhide.entirerow.hidden = false
End With
Cdlt,
Bonjour 3GB,
Je vous ai mis un classeur avec les explications dessus.
Bonne réception.
Bien cordialement.
Bonjour Bejouette,
Désolé, en ce moment, je ne télécharge pas les fichiers... Mais avez-vous essayé le code au moins ?
Cdlt,
Bonjour 3GB
Je l'ai essayé, mais je bloque à ce niveau:
.PageSetup.PrintArea = .address
et le code ne se déroule pas.
C'est pour cela que je vous ai joint le fichier, de ma macro, car je ne vois rien qui le relie à .address
Mais ce n'est peut être pas cela.
Bonne réception.
Bien cordialement.
Bonjour Bejouette,
Peux-tu remplacer cette ligne par :
.parent.PageSetup.PrintArea = .address
Cdlt,
Bonjour 3GB
S U P E R
EXACTEMENT CE QUE JE VOULAIS.
Un GRAND MERCI
J'ai un problème que je ne sais pas si vous pouvez y répondre, mais je vous l'expose.
J'ai trois classeurs MENU, SAUVE DEVIS et SAUVE FACTURES.
En début de macro j'ai ceci:
Dim Wkbk1 As Workbook, Wkbk2 As Workbook, Wkbk3 As Workbook
Dim CheminWkbk1 As String
Dim CheminWkbk2 As String
Dim CheminWkbk3 As String
Set Wkbk1 = ThisWorkbook
CheminWkbk3 = ThisWorkbook.Path & "\" & "SAUVE FACTURES" & ".xlsm"
Set Wkbk3 = Workbooks.Open(CheminWkbk3)
CheminWkbk2 = ThisWorkbook.Path & "\" & "SAUVE DEVIS" & ".xlsm"
Set Wkbk2 = Workbooks.Open(CheminWkbk2)
CheminWkbk1 = ThisWorkbook.Path & "\" & "MENU" & ".xlsm"
Set Wkbk1 = Workbooks.Open(CheminWkbk1)
Je suis dans le classeur MENU onglet DEVIS
En cours de macro pour sélectionner un autre classeur j'utilise la fonction suivante:
With Wkbk2
.Activate
Sheets(1).Select
ActiveSheet.Unprotect
End With
Il s'avère qu'au fil du déroulement de la macro, le genre de fonction ci-dessus avec wkbk dont le numéro change en fonction du classeur, ne fonctionne plus, c'est à dire qu'elle ne va pas sur le classeur, et qu'à l'impression ou autre fonction, comme par exemple supprimer un onglet, l'onglet supprimer est celui ou le wkbk n'a pas pris, et me supprime donc le mauvais onglet à savoir pour l'exemple pris l'onglet DEVIS du classeur MENU alors que je voulais supprimer la première feuille du classeur SAUVE DEVIS.
J'ai ajouter en dessous de la fonction ci-dessus:
'With Wkbk2.Sheets(1).Activate
Puis
Set Wkbk2 = Workbooks.Open(CheminWkbk2)
Au pas à pas, cela passe bien mais reste sur l'onglet DEVIS.
J'ai arrêté la macro et je l'ai réinitialisée et reprend donc au début et à chaque fois que je passe sur les SET, je reste sur mon onglet DEVIS.
Avez vous une idée sur mon problème.
Bonne réception.
Bien cordialement.
Bonjour Bejouette
Dans 99% des cas, il n'est pas nécessaire d'activer les objets sur lesquels on agit. Donc :
With Wkbk2
.Activate
Sheets(1).Select
ActiveSheet.Unprotect
End With
serait bien mieux ainsi :
Wkbk2.Sheets(1).Unprotect
D'ailleurs, l'exécution deviendrait beaucoup plus rapide.
Mais comme je t'ai dit plus haut et précédemment, il faut avoir un unique classeur regroupant les bases (historiques des devis et des factures), le "menu" et les interfaces d'édition (onglets avec le devis en cours et la facture en cours) qui ne servent qu'à l'export pdf puisque les informations remontent ensuite dans les bases.
Sinon, tu ne feras que t'apporter des complications...
Cdlt,
Re bonjour
OK
En vous remerciant pour ces conseils.
MERCI POUR TOUT
Bien cordialement.