Application d'une macro VBA

Fermé
Akhös - 11 juin 2014 à 19:10
eriiic Messages postés 24582 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 juin 2024 - 11 juin 2014 à 21:15
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 !
A voir également:

1 réponse

eriiic Messages postés 24582 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 juin 2024 7 223
11 juin 2014 à 21:15
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