VBA : différents boutons

Bonjour,

Je tente d'automatiser certaines manipulations répétitives dans un fichier excel à plusieurs onglets.

Pour l'instant je bute sur la création d'un bouton permettant d'enregistrer une des feuilles du classeur dans un nouveau fichier nommé sous la forme XXX_"dd/mm/yyy".xslx dans un dossier réseau du genre S:\blablabla\bliblibli\blublublu\leDossier

De plus j'aimerais que les boutons etc de cette feuilles ne soient plus sur le fichier enregistré, juste le tableau , est ce possible ?

Suis je assez clair ?

Merci d'avance :)

Bonjour,

Si j'ai compris, ce code est censé copier la feuille active aux nom et emplacement spécifiés dans les variables dossier et fichier.

Sub Copier()

dossier = "S:\blablabla\bliblibli\blublublu\leDossier\"
fichier = "XXX_" & format(date, "YYYYMMAA") & ".xslx"
activesheet.copy
with activeworkbook
    application.displayalerts = false
    .saveas dossier & fichier, 51
    .close true
    application.displayalerts = true
end with

end sub

Cdlt,

Mais vous êtes trop forts !

C'est exactement cela, je test et vous le confirme :)

Alors,

J'ai peut être fait une erreur, car le résultat est un fichier ayant pour nom : Inters du jourInters_202102AA.xslx

Le code que j'ai collé, avec mes modifs pour le nom, est :

Sub EnregistrerFichier()

dossier = "Le chemin réseau"
Fichier = "Inters_" & Format(Date, "YYYYMMAA") & ".xslx"
ActiveSheet.Copy
With ActiveWorkbook
Application.DisplayAlerts = False
.SaveAs dossier & Fichier, 51
.Close True
Application.DisplayAlerts = True
End With

End Sub

Sachant qu'à l'arrivée, le fichier ne s'enregistre pas dans le dernier dossier du chemin, mais dans le dossier parent, que finalement le nom n'est pas au bon format, et que le fichier n'est pas reconnu par excel comme un xslx.

Par contre, pour enregistrer, ça mouline :D

Je viens de voir mon erreur de frappe : xslx à la place de xlsx ;)

Je retest ça deja :)

Oui, il faut bien ajouter un antislash à la fin du dossier : dossier = "Le chemin réseau\".

Oui, forcément, ça prend un peu de temps (mais probablement moins qu'à la main^^). Voici un nouvel essai pour gagner un peu de temps :

Sub EnregistrerFichier()

dossier = "Le chemin réseau\"
Fichier = "Inters_" & Format(Date, "YYYYMMAA") & ".xlsx" 'corrigé après ton comm.
application.screenupdating = false
Application.DisplayAlerts = False
ActiveSheet.Copy
With ActiveWorkbook
    .SaveAs dossier & Fichier, 51
    .Close True
End With
Application.DisplayAlerts = True
application.screenupdating = true

End Sub

Alors, j'ai testé avec le code ci dessous, nickel :)

Sub EnregistrerFichier()

dossier = "le chemin réseau\"
Fichier = "Inters_" & Format(Date, "DDMMYYYY") & ".xlsx"
ActiveSheet.Copy
With ActiveWorkbook
    Application.DisplayAlerts = False
    .SaveAs dossier & Fichier, 51
    .Close True
    Application.DisplayAlerts = True
End With

End Sub

Une dernière question, est il possible que le fichier cible ne comporte plus les formules et les boutons mais soit juste le tableau comme après un coller valeurs ?

Je ne sais pas si ce que je dit est très clair .

Le fichier obtenu étant envoyé à des collabs/client etc, et ils n'ont pas besoin d'avoir un fichier avec les formules, c'est le résultat qui les intéresse, sachant de plus que ces formules tapant sur d'autres onglets parfois ils obtiennent juste des erreurs .

Je pourrais rajouter une étape au préalable en automatisant un copier/collervaleur dans une nouvelle feuille mais il y a peut etre moyen d'integrer cette étape ?

Oui, c'est possible :

Sub EnregistrerFichier()

dossier = "Le chemin réseau\"
Fichier = "Inters_" & Format(Date, "YYYYMMAA") & ".xlsx" 'corrigé après ton comm.
application.screenupdating = false
Application.DisplayAlerts = False
ActiveSheet.Copy
With ActiveWorkbook
    with .activesheet.cells
        .value = .value
        call EffacerBoutons
        '.clearformats 'sans les formats si jamais
    end with
    .SaveAs dossier & Fichier, 51
    .Close True
End With
Application.DisplayAlerts = True
application.screenupdating = true

End Sub

Au cas où, s'il reste un bouton sur la feuille, tu peux ajouter cette macro supplémentaire exécutée au moment du collage valeurs (pas sûr qu'elle soit nécessaire) :

Sub EffacerBoutons()
for each sh in activesheet.shapes
    if sh.onaction <> "" then sh.delete
next sh
End Sub

Cdlt,

Merci :)

J'essaie d'apprendre/comprendre en meme temps, le fait de coller les valeurs c'est la partie du code ci dessous c'est ça ?

    with .activesheet.cells
        .value = .value
        '.clearformats 'sans les formats si jamais

Le clearformats je suppose que c'est pour le formatage des cellules au cas ou, ok .

Concernant les boutons c'est quelle partie ?

Je n'avais pas vu la macro EffacerBoutons .

Je l'ai vu apres l'erreur d'execution du code car lors du call à cette fonction, evidemment ... paf :p

Je test :)

J'ai une erreur de mémoire insuffisante lors du traitement de .Value=.Value, je suppose que c'est pour le coller valeur, mais je ne sais pas pourquoi ça coince .

Sub EnregistrerFichier()

dossier = "Le chemin réseau\"
Fichier = "Inters" & Format(Date, "DDMMYYYY") & ".xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Copy
With ActiveWorkbook
    With .ActiveSheet.Cells
        .Value = .Value
        Call EffacerBoutons
        '.clearformats 'sans les formats si jamais
    End With
    .SaveAs dossier & Fichier, 51
    .Close True
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

En fait, si lorsque tu enregistres ton fichier, la macro liée au bouton disparait, il n'y a pas besoin de ce code (je ne sais plus si l'enregistrement au format .xlsx neutralise également les macros externes mais j'ai un doute).

Mais si le bouton demeure avec le code (qui est la macro du fichier d'origine !), il faut l'utiliser.

Oui, le "collage valeurs", c'est le fait d'écraser les valeurs par les valeurs, ça a pour effet d'enlever toutes les formules et de ne garder que les valeurs qui en résultaient.

clearformats permet d'effacer les formats (mais je ne pense pas qu'il faille s'en servir).

Remplace .value = .value par .usedrange.value = .usedrange.value. C'est trop lourd sinon !

Arf, ça me donne une erreur sur

.usedrange.value = .usedrange.value

Je cherche .

Non, c'est moi, désolé, je ne suis pas assez attentif . Cette fois-ci, je l'espère, ce sera la bonne :

Sub EnregistrerFichier()

dossier = "Le chemin réseau\"
Fichier = "Inters" & Format(Date, "DDMMYYYY") & ".xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Copy
With ActiveWorkbook
    With .ActiveSheet.usedrange
        .Value = .Value
        Call EffacerBoutons
        '.clearformats 'sans les formats si jamais
    End With
    .SaveAs dossier & Fichier, 51
    .Close True
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

Cdlt,

Top ! ça marche :)

Sois pas désolé, c'est déjà sympa d'aider :)

Bon, je vais manger, je m'y remet après, j'ai watt mille question/sujets à poster ici, mais je vais y aller doucement et tenter de me débrouiller aussi :)

Encore merci .

Nickel ! Oui, j'ai vu ton pseudo sur plusieurs sujets, tu passes à l'offensive !

Et bien, bon appétit et bon courage pour la résolution de tes autres soucis !

A plus,

Rechercher des sujets similaires à "vba differents boutons"