Macro copie valeur

Yslgb

Nouveau membre
Bonjour,

Je suis débutant sur VBA.
Je cherche à développer une macro Excel permettant de remplacer toutes les cellules d’un classeur contenant une formule précise (ici, somme()) par leur valeur.
La formule doit être remplacée sur l’ensemble des feuilles du classeur.
J’ai trouvé un modèle sur internet que j’ai commencé à personnaliser.
Merci par avance de votre aide.

Sub Keep_data()

'Détermine le numéro de la dernière ligne utilisée
dernLigne = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Count - 1
'Désactive la mise à jour de l'écran afin d'accélérer les traitements
Application.ScreenUpdating = False

'Pour toutes les lignes en partant de la première
For i = 1 To dernLigne Step -1
nn = ActiveCell.Formula
'Donne à la variable nn le contenu de la formule. Si elle n'en contient pas nn prend la valeur null

If Left(nn, 6) <> "=somme" Then GoTo suivant
'Si la formule ne commence pas par =HsGetValue on passe à la valeur suivante de i
If Left(nn, 6) = "=somme" Then Selection.Copy
Selection.PasteSpecial xlValues, xlNone, False, False
'Dans le cas contraire, on remplace le contenu de la cellule par sa valeur
End If
suivant:
Next i
End Sub
 

Freeman23

Expert
Bonjour,

Penses à lire les règles comme qui dirait Zeb. :D.. et surtout concernant la balise code.

Il me semble que le début est correct, mais il y a qq erreurs de codage.

En VBA (en anglais) il y a peu de chance que tu trouves =somme en général c plutot =SUM, mais il vaut mieux le vérifier.
Par exemple avec la fenetre de déboguage, tu rajoutes dans ton code qqch du genre
Code:
debug.print nn

Tu fais une erreur dans ton parcours. T'as cellule active n'est pas modifiée par ton for ni après donc tu vas pointer toujours sur la meme cellule.
Pour cela Il faut plutot passé par Range. Tu veux travailler sur l'ensemble des colonnes ou sur une seule ?

Code:
For i = 1 To dernLigne Step -1 
    nn = ActiveCell.Formula 
next

Ensuite pour remplacer la formule par la valeur il a plus simple et plus rapide.

Code:
.range("A" & i) = .range("A" & i ).value
 

Yslgb

Nouveau membre
Merci pour ces indications et désolé pour les règles de post.
Pour l'instant, la macro ne fonctionne pas.
Comment puis-je la généraliser pour l'ensemble du classeur (toutes les cellules de toutes les feuilles) ?
Merci par avance.

Code:
Sub Keep_data()

dernLigne = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Count - 1
Application.ScreenUpdating = False
nn = ActiveCell.Formula

For i = 1 To dernLigne Step -1
If Left(nn, 4) = "=Sum" Then Range("A" & i) = Range("A" & i).Value
Next
End Sub
 

Freeman23

Expert
Re,

Mes indications n'étaient pas juste à 100% c'est juste une aide...

Il va te falloir plusieur boucle for imbriquée... donc pour t'aider regarde ds l'aide de Office.

Parcours des feuilles :
regarde la collection Sheets

Parcours de toutes les cellules :
Regardes la collection Cells

Tu devrais trouver de quoi t'aider la dedans, je reste à disposition pour t'aiguiller et corriger ton avancement.

Regardes aussi ce sujet et un des liens qui donne d'autre infos.

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 064
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut