Application d'une macro VBA

Akhös -  
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Eric m'avait aidé ici même il y a quelques jours, et m'avait proposé la formule suivante :

"""
Sélectionne toutes tes cellules recevant une addition et nomme la plage pl_add.
Et met ce code sur ton bouton :

Sub add()
Dim c As Range
For Each c In [pl_add]
c = c + c.Offset(, 1)
c.Offset(, 1) = ""
Next c
End Sub
"""

Ca marche du tonner, et j'ai même pu modifier la cellule de destination en modifiant le chiffre "1".

Par contre j'aimerai savoir comment modifier les coordonnées verticales ? En gros, j'aimerai garder la même formule mais pour pouvoir cibler n'importe quelle cellule de la feuille.

Ah, et puis-je faire plusieurs formules de ce type en modifiant le nom "add" ?

Merci d'avance !

1 réponse

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Bonjour,

Si tu fais F1 sur Offset tu as l'aide excel qui est très bien faite :

Offset, propriété
Cette propriété renvoie un objet Range qui représente une plage décalée de la plage spécifiée. En lecture seule.

expression.Offset(RowOffset, ColumnOffset)
expression Obligatoire. Expression qui renvoie un objet Range.

RowOffset Argument de type Variant facultatif. Nombre de lignes (valeur positive, négative ou égale à 0 (zéro)) de décalage à appliquer à la plage. Les valeurs positives correspondent à un décalage vers le bas et les valeurs négatives à un décalage vers le haut. La valeur par défaut est 0.

ColumnOffset Argument de type Variant facultatif. Nombre de colonnes (valeur positive, négative ou égale à 0 (zéro)) de décalage à appliquer à la plage. Les valeurs positives correspondent à un décalage vers la droite et les valeurs négatives à un décalage vers la gauche. La valeur par défaut est 0.

Par contre je l'avais mal nommée, add est un mot du basic et il vaut mieux éviter. Appelle-là addX() par exemple.

Tu peux avoir (presque) autant de procédures que tu veux tant qu'elles portent des noms différents.
Pour raccourcir le code tu peux aussi appeler une autre procédure, en lui passant des paramètres éventuellement.
Exemple :
Sub add01()
    addOffset 0, 1
End Sub

Sub addOffset13()
    addOffset 1, 3
End Sub

Sub addOffset(lig As Long, col As Long)
    Dim c As Range
    For Each c In [pl_add]
        c = c + c.Offset(lig, col)
        c.Offset(lig, col) = ""
    Next c
End Sub

Dans la mesure où c'est la même plage pl_add qui est concernée.
Sinon il faut soit créer une nouvelle procédure avec le nouveau nom de plage, soit ajouter un paramètre Plage (as Range) à passer à la procédure.

eric
0