VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Guy_M

XLDnaute Occasionnel
Bonjour,

Je fais une série de copier/coller dans une cellule et j'enregistre la feuille ainsi modifiée. Je souhaiterai restituer l'état de la cellule d'origine après ce traitement, auriez vous une idée ? (Ah si j'avais un deuxième presse papier : le presse papier office n'est pas manipulable avec VBA)

C'est à dire dans le code ci-dessous à quelles instructions correspond "ConserveCelluleDestination" ?
VB:
ConserveCelluleDestination
i= 0
For Each CellCour In MonRange
'Pré traitements
    CellCour.Copy 'On copie la cellule
    CelluleDestination.PasteSpecial xlPasteValuesAndNumberFormats
'Post traitements dont
    Application.DisplayAlerts = False
    CelluleDestination.Parent.Copy
    ActiveWorkbook.Close True, "FeuillleSauvee_" & i
    Application.DisplayAlerts = True
    i = i+1
Next CellCour
RetitueCelluleDestination

Par avance, je vous remercie de vos réponses
Guy Marty
 

Paf

XLDnaute Barbatruc
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Bonjour

Pas sûr d'avoir tout compris ni d'avoir toutes les informations (un classeur avec quelques données aurait peut-être pu expliciter ?)

Mais peut-être

Code:
MaVariable = CelluleDestination
i= 0
For Each CellCour In MonRange
   ...
   ...
Next CellCour
CelluleDestination = MaVariable

A+
 

Guy_M

XLDnaute Occasionnel
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Bonjour Paf,

Cette procédure n'est pas attachée à des données, il faut que je fournisse une procédure opérationnelle.

De quel type doit être "Mavariable" ?

A bientôt
Guy
 

Guy_M

XLDnaute Occasionnel
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Voilà la procédure opérationnelle : mettez des données dans le colonne A de feuill1 puis lancez la procédure et regardez ce qui se passe. Je n'ai pas testé cette version.

VB:
Sub GenererFichiersPersonnalises()
Dim ClassIndex As Workbook
Dim FeuilleIndex As Worksheet
Dim NumColIndex As Long
Dim ColonneIndex As Range
Dim NumLigneTitre As Long 'Numéro de la ligne contenant les titres de colonnes

Dim FeuilleModele As Worksheet
Dim CelluleDestination As Range
Dim ModeleProtege As Boolean 'Vrai si la feuille modèle a une protection

Dim Rep As String

Dim CellCour As Range
Dim i As Long

Set ClassIndex = ActiveWorkbook
Set FeuilleIndex = ClassIndex.Sheets("Feuil1")
Set FeuilleModele = ClassIndex.Sheets("Feuil2")
Rep = ClassIndex.Path

NumColIndex = 1
NumLigneTitre = 1 'Devrait être calculé s'il existe un filtre avancé
Set ColonneIndex = FeuilleIndex.Columns(NumColIndex)
Set CelluleDestination = FeuilleModele.Range("C3")

'Gestion de la protection de la feuille modèle
ModeleProtege = FeuilleModele.ProtectContents

'On reduit la taille de la colonne index aux cellules utiles
Set ColonneIndex = ColonneIndex.Range(FeuilleIndex.Cells(NumLigneTitre, NumColIndex), FeuilleIndex.Cells(FeuilleIndex.UsedRange.Rows.Count, NumColIndex))

If ColonneIndex.Cells.Count <= NumLigneTitre Then GoTo GestionErreurs

i = 1
For Each CellCour In ColonneIndex.SpecialCells(xlCellTypeVisible)
    If CellCour.Row <= NumLigneTitre Then GoTo CellCourSuivante 'Ligne titre ou avant, on ne fait rien
    If CellCour.value = "" Then GoTo CellCourSuivante 'Cellule vide, on ne fait rien
    If ModeleProtege Then FeuilleModele.Unprotect 'On déprotège pour pouvoir travailler avec la feuille modèle
    CellCour.Copy 'On copie la cellule
    CelluleDestination.PasteSpecial xlPasteValuesAndNumberFormats 'On colle dans la cellule index
    Application.DisplayAlerts = False
    FeuilleModele.SaveAs Filename:=Rep & "\FeuillleSauvee_" & i, FileFormat:=ClassIndex.FileFormat
    Application.DisplayAlerts = True
    If ModeleProtege Then FeuilleModele.Protect 'On rétrabli la protection de la feuille modèle
    i = i + 1
CellCourSuivante:
Next CellCour

GoTo SortiePropre

GestionErreurs:
    On Error GoTo 0 'On annule la gestion des erreurs
    If Err.Number > 0 Then Resume 'On redéclenche l'erreur pour pouvoir exécuter le débogage là où a lieu l'erreur
SortiePropre:
If ModeleProtege Then FeuilleModele.Protect 'On rétrabli la protection de la feuille modèle
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Bonjour à tous

Un essai

Edit : je n'avais pas vu votre macro
je ne comprends pas pourquoi vous collez successivement dans un seule cellule (Feuillemodele.range("C3")) chacune des cellules de MonRange !!!
 

Pièces jointes

  • Guy_m.xlsm
    16.9 KB · Affichages: 27
Dernière édition:

Guy_M

XLDnaute Occasionnel
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Bonjour pierrejean,

Aaaaaaaaaargh ! Worksheet.SaveAs enregistre tout le classeur et pas seulement la feuille.

L'objectif est de créer des feuilles de calcul "personnalisées", je colle chaque cellule de MonRange dans Feuillemodele.range("C3") puis j'enregistre Feuillemodele (copy puis close du classeur actif). Feuillemodele contient des formules basées sur la valeur contenu en C3 (voir le fichier joint)

A bientôt
Guy
 

Pièces jointes

  • Guy_m.v1.xlsm
    23.8 KB · Affichages: 26
  • Guy_m.v1.xlsm
    23.8 KB · Affichages: 31
  • Guy_m.v1.xlsm
    23.8 KB · Affichages: 31

pierrejean

XLDnaute Barbatruc
Re : VBA: comment "sauvegarder" une cellule pour pouvoir la restituer

Re

Vois si tu peux adapter le code du Module2
 

Pièces jointes

  • Guy_m.v1.xlsm
    23.9 KB · Affichages: 26
  • Guy_m.v1.xlsm
    23.9 KB · Affichages: 28
  • Guy_m.v1.xlsm
    23.9 KB · Affichages: 27

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400