FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Macro copie valeur
 

Macro copie valeur

Overclocking & Tuning : fifi2191 et 71 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Macro copie valeur
 
Plus d'informations

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

Plus d'informations

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 :
  1. 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 :
  1. For i = 1 To dernLigne Step -1
  2.     nn = ActiveCell.Formula
  3. next


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

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


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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 :
  1. Sub Keep_data()
  2. dernLigne = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Count - 1
  3. Application.ScreenUpdating = False
  4. nn = ActiveCell.Formula
  5. For i = 1 To dernLigne Step -1
  6. If Left(nn, 4) = "=Sum" Then Range("A" & i) = Range("A" & i).Value
  7. Next
  8. End Sub

Plus d'informations

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.
 
http://www.presence-pc.com/forum/p [...] 2941-1.htm


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Macro copie valeur
 

Annonces Google
Publicité