Se connecter avec
S'enregistrer | Connectez-vous

Macro à appliquer à plusieurs cellules

Dernière réponse : dans Programmation

Bonjour à tous,

Je suis débutant et même plus que novice dans VBA alors excusez la naïveté de la question mais j'aurai besoin d'un script qui me supprime la valeur d'une cellule si la valeur de la même cellule (même coordonnées) dans une autre feuille est inférieure à 5. J'ai essayé le code suivant mais malheureusement il ne marche que lorsque je sélectionne une seule cellule. Auriez-vous une solution pour pouvoir le faire marcher à l'ensemble des cellules (car j'en ai 25000 !) ?

Merci par avance !


  1. Sub MaMacro()
  2.  
  3. y = ActiveCell.Row
  4. z = ActiveCell.Column
  5. Dim MyCell As Range
  6.  
  7.  
  8. For Each MyCell In Selection
  9. If Sheets("1 Fam").Cells(y, z).Value < 5 Then
  10. MyCell.Value = ""
  11. End If
  12. Next MyCell
  13.  
  14.  
  15.  
  16. End Sub

Lassé par la pub ? Créez un compte
Expert Programmation

Je t'invite à indenter ton code. C'est tellement plus lisible. Et cela permet de mieux se relire. C'est un vieux truc de développeurs : http://fr.wikipedia.org/wiki/Indentation pour toi le novice ;) 

Tu as oublié de Dimensionner x et y. Ce n'est pas grave, VB est tellement permissif. Ajoute l'Option Explicit pour éviter d'oublier des "trucs" dans ton code, il en sera beaucoup plus facile à corriger en cas de bug.

ActiveCell, c'est la cellule active au moment où on appelle cette méthode, donc lignes 3 et 4. Quand tu t'en sers à nouveau, ligne 9, les valeurs de y et z ne sont pas remise à jour. C'est donc entre le For et le Next qu'il faut réinitialiser y et z, à chaque tour de boucle.

Sheets, c'est la collection de tous les onglets, c'est-à-dire aussi bien les feuilles de calcul que les graphes. Seules les feuilles de calcul t'intéressent, alors utilise plutôt la collection WorkSheets.

Comme ça, regarde : (Code à bien comprendre pour que ça te soit profitable. Si tu as des questions, n'hésite pas, même naïves ;)  )

  1. Sub TaMacro()
  2. Dim row As Long
  3. Dim col As Long
  4. Dim cel As Range
  5.  
  6. For Each cel In Selection
  7. row = cel.Row
  8. col = cel.Col
  9. If WorkSheets("1 Fam" ).Cells(row, col).Value < 5 Then
  10. cel.Value = ""
  11. End If
  12. Next cel
  13. End Sub


Quand tu ne seras plus un novice, tu l'écriras comme ça :
  1. Sub ZeroSiTropPetit(zone As Range, mini As Integer)
  2. Dim cel As Range
  3.  
  4. For Each cel In zone
  5. If WorkSheets("1 Fam" ).Cells(cel.Row, cel.Row).Value < mini Then
  6. cel.Value = ""
  7. End If
  8. Next cel
  9. End Sub
  10.  
  11. Sub TaMacro()
  12. ZeroSiTropPetit Selection, 5
  13. End Sub


Toutes ces explications pour que tu quittes rapidement l'état de novice qui ose à peine poser des questions naïves. :o 
Lassé par la pub ? Créez un compte