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.

Rechercher des sujets similaires à "incorporer bouton ouverture classeur"