VBA Macro copie/colle valeur cellule non vide à la fermeture

Anais51

XLDnaute Nouveau
Bonsoir!

Je suis une grande débutante en VBA, et je cherche à faire une macro capable de copier coller les valeurs des cellules d'une plage précise (dans tout les onglets sauf deux mais dans un premier temps j'essaye de faire dans un onglet) à la fermeture du fichier avant de sauvegarder. Pour l'instant VBA pour moi c'est une partie de légo: je trouve des formules par ci par là et j'essaye d'assembler le tout pour en faire ce que je veux. Donc voici ce que j'ai tenté qui ne fonctionne pas:

Private Sub WorkBook_BeforeClose()
Dim Plage_Cible As Range


'Définit la plage qui doit réagir à l'évènement
Set Plage_Cible = Range("E9:K22")


'boucle sur chaque cellule de la plage à traiter( pasage obligé, le_
'"selectcase" ne peut travailler que sur une cellule à la fois)
For Each C In Plage_A_Traiter.Cells


'Action seulement sur cellule non-vide
If Not IsEmpty(C) Then
'Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues,
End If
Next C
ActiveWorkbook.Save
End Sub

Je reconnais que j'ai du mal à saisir les explications données dans d'ancien posts, il se peut que j'ai fait d'énorme erreur (surtout que mon niveau d'anglais est absolument abominable donc l'encodage en anglais m'aide pas vraiment)

Donc si vous avez quelques pistes à me donner je suis preneuse :rolleyes:
 

Anais51

XLDnaute Nouveau
Re : VBA Macro copie/colle valeur cellule non vide à la fermeture

YEAHH
Gorfael ce que tu as fait marche niquel! Plus qu'a l'appliquer sur toutes les pages (sauf les 5 cités) et c'est bon! Mais ça si vous en avez marre de moi je peux me débrouiller!

Un grand Merci!!!
 
G

Guest

Guest
Re : VBA Macro copie/colle valeur cellule non vide à la fermeture

Re, Anais,

Mon soucis ne viens pas du fait que j'ai des erreurs qui s'affichent mais de ces cellules qui n'ont pas encore remplis leur rôle qui perdent leur précieuse formules ou, à l'inverse, de ces cellules qui ont remplis leur rôle et qui gardent leur formules

Avec les lignes ci-dessous, les formules renvoyant des valeurs ="" (chaine vide) seront conservées ainsi que celles renvoyant des erreurs.

La première méthode traite les formules renvoyant un nombre ou une valeur logique pour n'en conserver que le résultat(la formule est écrasée)

La méthode qui suit traite les formules renvoyant des textes (y compris vides ="")
Elle parcours toutes les cellules et si le résultat est non = "" alors c'est que la formule a renvoyé quelque chose, elle peut être écrasée. Si = "" elle est conservée.

Code:
            'Ne tient compte que les cellules ayant une formule renvoyant des nombres et valeurs logiques
            Set Plage_Cible = Range("E9:K22").SpecialCells(xlCellTypeFormulas, xlNumbers + xlLogical)
            If Not plage Is Nothing Then Plage_Cible.Value = Plage_Cible.Value
            Set Plage_Cible = Nothing
 
            'Les cellules renoyant une valeur textuelle
            Set Plage_Cible = Range("E9:K22").SpecialCells(xlCellTypeFormulas, xlTextValues)
            If Not Plage_Cible Is Nothing Then
                For Each c In Plage_Cible.Cells
                    If Not c.Text = "" Then c = c.Value
                Next c
            End If

A+
 

Gorfael

XLDnaute Barbatruc
Re : VBA Macro copie/colle valeur cellule non vide à la fermeture

Salut Anais51 et le forum
Mais ça si vous en avez marre de moi je peux me débrouiller!
On n'en a jamais marre !
Le plus gros problème est la communication : chacun discute avec ses connaissances et ses compétences. Le premier but est de comprendre le problème, après seulement on peut faire un code.

Tu peux le faire toute seule, si tu veux apprendre, c'est toujours le meilleur moyen. Mais tu peux aussi te faire aider. Le but est de faire un code que tu comprennes et puisses faire par toi même dans un autre problème similaire.

Une proposition, en partant du principe que ma macro est bonne. Vu le nombre de cellule à tester (13 max/feuille) pas besoin de rechercher seulement les cellule de I ayant une formule :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim X As Long, F As Worksheet
Application.ScreenUpdating = False
For Each F In ThisWorkbook.Worksheets
'Pour chaque feuille de ce classeur
    If F.Name <> "nom1" And _
       F.Name <> "nom2" And _
       F.Name <> "nom3" And _
       F.Name <> "nom4" And _
       F.Name <> "nom5" Then
        For X = 9 To 22
            If F.Range("I" & X) <> "" Then
                F.Range(F.Cells(X, "E"), F.Cells(X, "K")) = F.Range(F.Cells(X, "E"), F.Cells(X, "K")).Value
            Else
                Exit For
            End If
        Next X
    End If
Next F
Application.ScreenUpdating = True
End Sub
Pour accélérer, on empêche le rafraîchissement écran pour la durée de la macro.
A+
 
G

Guest

Guest
Re : VBA Macro copie/colle valeur cellule non vide à la fermeture

Re,

N'apporte rien au fil, si ce n'est de dire à Gorfael qu'il n'est pas obligé d'être désobligeant on peut ne pas s'apprécier sans se combattre systématiquement.

Ma blackliste s'est encore allongée.
A+
 

Gorfael

XLDnaute Barbatruc
Re : VBA Macro copie/colle valeur cellule non vide à la fermeture

Salut Hasco et le forum
si ce n'est de dire à Gorfael qu'il n'est pas obligé d'être désobligeant
Tu peux expliciter ?
Je ne vois aucun propos désobligeant dans mon ou mes postes. Si un de mes propos te désoblige, dis-moi lequel que je comprenne en quoi !

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 644
dernier inscrit
MOLOKO67