Reprendre adresse d'une variable et décaler celle-ci

Bonjour à toutes et à tous,

J'ai créé une macro qui me permet d'inserer une ligne au dessus de la case contenant la valeur m1.

Pour cela on recherche cette case et on met son adresse dans la variable r.

Le problème se situe à la fin car je ne souhaite pas inserer ma ligne au niveau de r mais deux lignes au-dessus.

Je crois avoir compris que pour cela il faut que je redefinisse une autre variable reprenant l'adresse de r et en décrémentant de 2 la valeur de sa ligne mais comment l'écrire ?

De même je ne souhaite pas modifier la case à l'adresse de r mais celle située deux colonnes à droite de celle-ci (même ligne mais en C donc).

Etant débutant en VBA ( le code ci-dessous est d'ailleurs inspiré de celui trouvé sur un forum) je sollicite votre aide pour ce problème.

Cordialement .

Sub ajout_ligne_OB()

Dim pl As Range 'déclare la variable pl (Plage de recherche)

Dim r As Range 'déclare la variable r (Recherche)

Dim pa As String 'déclare la variable pa (Première Adresse)

Set pl = Range("A20:A200")

Set r = pl.Find("m1", , xlValues, xlPart) 'définit la variable r

If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de r dans pl

pa = r.Address 'définit la variable pa

Do 'exécute

Set r = pl.FindNext(r) 'redéfinit la variable r (prochaine occurrence trouvée)

Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences de r ailleurs qu'en pa

End If 'fin de la condition

Range(r.Address(0, 0)).Select ' ->Je voudrais mettre deux lignes au dessus de l'adresse de r et non à r

Selection.EntireRow.Insert

Range(r.Address(0, 0)).Select ' -> Je voudrais mettre deux colonne à droite (en C) de l'adresse de r et non à r

ActiveCell.FormulaR1C1 = "OB"

Bonjour à tous, Forum,

Kelaydos, je ne suis vraiment pas spécialiste en VBA mais essaye de remplacer le 1er "Address(0, 0)" par "Address(0, -2)" et le second "Address(0, 0)" par "Address(0, 2)".

A te relire.

Amicalement.

Merci pour ta rapidité, malheureusement pour avoir déjà essayé cette méthode, je peux te dire que cela ne marche pas. La cellule sélectionnée reste r.

Re-,

Bon... Désolé... Attendons alors les spécialistes VBA...

Bon courage.

Edit : je crois que j'ai commis une petite erreur pour le 1er... C'était ""Address(-2, 0)" que je voulais suggérer...

essaye avec Offset(0,2)

T'as réponse manquait d'explications mais merci beaucoup quand même line31. En effet il faut utiliser la fonction offset.

Voilà ce que cela donne en apllication :

Range(pa).Select ' je n'avais pas vue que on pouvait utiliser la variable pa égale à r.Address(0,0) c'est plus jolie et puis faut bien qu'elle serve.

ActiveCell.Offset(-2, 0).Select 'un coup de offset pour remonter de 2 lignes

Selection.EntireRow.Insert

ActiveCell.Offset(0, 2).Select 'un autre pour décaler de 2 colonnes vers la droite

ActiveCell.FormulaR1C1 = "OB"

et op ça fonctionne .

c'est vrai! autant pour moi!

je savais juste que c'était Offset qu'il fallait utiliser. Mais la procédure... je reste un bleu en VBA...

bien à toi

ps: si tu as la réponse à la question "recherche USF" elle est la bienvenue...!

Rechercher des sujets similaires à "reprendre adresse variable decaler celle"