pour EricS - fermeture et enregistrement

R

Rogi

Guest
suite des messages échangés hier....


Bonjour Eric,

Merci de ton envoi - j'ai pu constater que ton fichier contenait un "module" VBA mais là cela dépasse complétement mes compétences.
Je ne sais pas du tout comment l'utiliser. Peux tu encore m'aider par correspondance ou mon cas est-il désespéré ?

Merci

Cordialement
 
E

EricS

Guest
Bonjour

Pour le fichier envoyé dans le fil

<http://www.excel-downloads.com/html/French/forum/messages/1_128293_128293.htm>

La première chose est de l'essayer

ce que j'ai fait : j'ai écrit une macro en vba. De plus le fichier est en lecture seule

si tu écris des formules sur une feuille, lorsque tu quittes, les formules sont converties en leur résultat et tu peux sauvegarder le fichier sous un autre nom

est-ce ce que tu veux ?
__________________________

Principe d'utilisation

tu enlève lecture seule sur mon fichier
tu l'ouvres
tu crées tes feuilles avec formule
tu sauvegardes
puis
tu fermes SANS ENREGISTRER
tu remets le fichier en lecture seule

tu dois pouvoir l'utiliser
___________________________

fais un petit essai avant de te lancer dans un gros projet

___________________________

le code lui-même se trouve au niveau de Thisworkbook
il est défini en beforeclose et s'exécute donc juste avant fermeture
il parcourt toutes les feuilles et effectue un copie collage spécial valeurs avant d'appeler la boite de dialogue pour la sauvegarde

Si tu veux te mettre au vba, avant de passer au complexe, génère des codes avec l'enregistreur de macro

exemple "code pour sélectionner une cellule"

tu ouvres xl, tu fais outils - macros - nouvelle macro

l'enregistreur se met en route
tu valides la boite de dialogue
tu cliques sur b3 par exemple
tu fais arrêter l'enregistrement

alt f11 (outils - macros - visual basic editor)
tu vas voir dans les répertoires modules
tu trouveras quelque chose comme

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 22/11/2004 par Eric
'

'
Range("B3").Select
End Sub

tu sais maintenant que pour sélectionner b3, en vba il faut écrire
Range("B3").Select

Tu peux utiliser l'enregistreur pour trouver les codes pour effacer, insérer, copier....

Il te faudra du temps mais on fait vite des exemples intéressants sans être pro

Il y a une aide en ligne sous la fenêtre vba (différente de l'aide xl) et de la littérature et les forum

Continue sur ce fil pour nos échanges, n'en crée pas de nouveau

A+
 
R

Rogi

Guest
Bonjour,

Mille mercis pour tes précisions elles me sont et seront trés utiles.

Comme mon tableau existe déja, j'ai copié toutes les feuilles dans le tien mais j'ai un petit problème.
Quand je ferme il m'arrive une fenêtre qui me dit :
"erreur d'exécution 1004
impossible de coller les informations car les zones copier et de collage sont de forme et de taille différentes...."

Il m'est proposé un touche "débogage" qui renvoie au module VBA dans lequel la ligne :
" Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False" est surlignée en jaune.


Est ce guérissable ?

Merci encore.
 
E

EricS

Guest
Re

sûrement guérissable mais il faut cerner d'avantage le pb

soit tu joints le tableau zippé, soit tu me l'envoie en direct

sinon sans utiliser la macro essaie feuille par feuille de sélectionner toute la feuille (angle haut gauche de la feuille), de faire copier, sélectionner a1, faire collage spécial valeurs

tu verras déjà si un message apparaît lors de la manip sur une feuille (peut-être avec des cellules fusionnées....

autre chose avec l amacro quand tu passes en débug si tu passes au dessus de variables avec ton curseur (exemple au dessus de i) la valeur de la variable apparait, i représente la position de la feuille dans le classeur

A+
 
R

rogi

Guest
J'ai une autre piste.

En enregistrant une macro simplement en ce mettant en mode création et en passant une à une les différentes étapes de ce que je souhaite faire celà marche trés bien.
Il me manque juste "le truc" pour dire que je veux que cette macro se déroule automatiquement quand on ferme le fichier.
Ce doit être simple mais j'ai beau triturer l'aide dans tous les sens je ne trouve pas.

Peux tu encore m'aider ?


A+
 
E

EricS

Guest
re

fenêtre vba
tu doublecliques sur workbook
fenêtre de droite choix haut gauche tu sélectionnes workbook
choix haut droite tu sélectionnes beforeclose

tu obtiens

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub


tu mets ton code entre le début et la fin

il devrait ressembler à

'
Sheets("Feuil1").Select
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
Sheets("Feuil2").Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
Sheets("Feuil3").Select
Cells.Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select


as-tu regardé lorsque cela plante quelle était la valeur de i et ce qu'il y avait sur cette feuille?

A+
 
R

Rogi

Guest
Je n'y comprends rien mais finalement après un nouvel essai cela fonctionne avec ton module vba. J'ignore de où venait le plantage.... incident unique !

Il y a encore un truc mais là je crois que celà se complique.

Quand on ferme, on doit enregistrer le fichier sous un autre nom (c'est normal c'est ce que je voulais) et le nouveau fichier ainsi créé contient aussi le module vba ce qui fait que quand on le ferme la procédure recommence....
Bien sûr il est toujours possible de répondre "non".

Te semble-t-il possible de faire quelque chose ?

A bientôt.
 
E

Eric S

Guest
Bonjour

effectivement, c'est un peu gênant

Une possibilité est de regarder le nom du fichier en début de macro before_close

pour cela, essaie de la modifier comme suit :

_________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)

For i = 1 To Sheets.Count..................
____________________________

devient
____________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)
if thisworkbook.name <> "________.xls" then exit sub

For i = 1 To Sheets.Count.................
_____________________

Il faut que tu mettes le nom de ton fichier protégé en lecture à la place des _____, si le nom du fichier n'est pas celui de référence, on sort de la macro dès cette ligne

Applique la même méthode que la première fois :

enlever lecture seule
ouvrir
faire la modif
enregistrer
quitter sans sauvegarder
remettre en lecture seule
essayer

A+
 
R

rogi

Guest
Bonjour,

Super, ça marche parfaitement.

Je m'arrête de te solliciter.

A nouveau, merci pour tout, ta rapidité, ta précision et tout et tout.

Grâce à toi je commence à mieux comprendre le "mystère" des macros...

Cordialement
 

Statistiques des forums

Discussions
312 329
Messages
2 087 325
Membres
103 516
dernier inscrit
René Rivoli Monin