Après 2 jours de recherche sur internet, je ne trouve aucune solution à mon problème.
Voici une macro que je n'arrive pas à faire fonctionner:
Sub Augmente()
Dim myRange As Range
myRange = WorksheetFunction.VLookup(Range("R6").Value, Sheets("FORFAIT").Range("A2350"), 14, False)
myRange = myRange + 1
End Sub
Disons que sur une feuille nommée "2015" j'ai une case "R6" avec un nombre à l'intérieur (1120 pour l'exemple)
Sur une seconde feuille, nommée "FORFAIT", j'ai un tableau avec une base client (1120 étant la référence client).
Ce que je voudrais, c'est que la macro me prenne la valeur contenu dans R6 (soit 1120), me la cherche dans la feuille FORFAIT (disons qu'il la trouve en ligne 22), et m'augmente la case ligne 22 colonne 14 de 1.
Je pense que ce ne doit pas être très compliqué mais je suis débutant en macro et je n'ai vraiment rien trouvé sur internet...
Sub test()
Dim r As Range, R1 ', R2, R3, R4, OPE
Set r = Sheets("FORFAIT").Range("A2:P50"): r.Name = "BASE"
'Récupère la valeur
R1 = Application.VLookup([R6], [BASE], 16, False)
OPE = R1 + 1
MsgBox OPE
End Sub
ST007: malheureusement, la macro bug à ce niveau là: OPE = R1 + 1.
Je pense qu'il n'a pas pris en compte la définition de OPE..
Également, pour la définition de R1, il n'est pas indiqué dans ta macro qu'il doive chercher R6 sur la feuille "2015", et non sur la feuille "FORFAIT", ce n'est pas gênant?
Pierrot: Je n'ai pas trop compris ce que tu m'as dit désolé. Je ne sais pas ce qu'est un type de variable, alors de là à le modifier pour trouver le bon, j'en suis loin..
c'est le type de donnée que peux recevoir une variable, quand tu mets "as range", c'est un objet soit une cellule en tant que telle... si tu mets "as string" ce sera du texte (une chaîne de caractère)... je t'invite à consulter l'aide vba pour plus d'infos...
St007: Ton tableau est exactement comme le mien, mais la macro ne marche pas. Je ne comprends pas car tu as remis la même macro que dans le post précédent, et tu as juste rajouté une macro qui appelle cette première macro.
Ça bug donc toujours au niveau de OPE = R1 + 1.
J'ai essayé de remplacer par R1 = R1 + 1, ou même R1.Value = R1 + 1 mais rien n'y fait.
Sub test()
Dim r As Range, R1, R2
Set r = Sheets("FORFAIT").Range("A250")
'Récupère la valeur
R1 = WorksheetFunction.VLookup(Sheets("2015").Range("R6"), Sheets("FORFAIT").Range("A250"), 16, False)
Sheets("FORFAIT").Select
R1 = R1 + 1
MsgBox R1
End Sub
Le problème étant maintenant qu'il ne m'augmente pas la valeur de la cellule R1 de 1, il me l'annonce juste. Admettons que la case L21 soit égale à 4, il va m'annoncer R1 = 5, mais la valeur de la case L21 ne changera pas, elle. Alors que c'était l'objectif initial..
De ce que je comprends, pour VBA, R1 est une valeur, et non la valeur d'une case en particulier, c'est pourquoi il n'augmente pas la valeur de L21.
Est-ce que c'est la fonction vlookup qui n'est pas adapté vous pensez?
Que me proposeriez-vous à la place?
C'est ce que j'avais cru comprendre en effet: "De ce que je comprends, pour VBA, R1 est une valeur, et non la valeur d'une case en particulier, c'est pourquoi il n'augmente pas la valeur de L21."
Mais comment résoudre mon problème alors? As-tu une solution?
essaye ceci, incrémentera la valeur de la colonne 16 de la feuille "forfait" si valeur trouvée en colonne A :
Code:
Sub test()
Dim x As Range
Set x = Sheets("FORFAIT").Range("A2:P50").Find(Range("R6"), , xlValues, xlWhole, , , False)
If Not x Is Nothing Then x.Offset(0, 16).Value = x.Offset(0, 16).Value + 1
End Sub