VBA prendre en mémoire une cellule

Bonjour au forum,

Peut-on prendre en mémoire le contenu d'une cellule, si elle fait partie d'une plage événementielle ?

https://www.excel-pratique.com/~files/doc/INVENTAIRE_3.xls

de manière à pouvoir la remettre en place, si condition non remplie.

amicalement

Claude.

Bonjour Claude

Est ce que la solution n'est pas là ? (sans garantie vu mes connaissances VBA)

https://www.excel-pratique.com/forum/viewtopic.php?t=2486

Cordialement

Bonsoir,

Si j'ai bien compris fais ceci :

Avant sub essai tu mets --> Public a As Integer

Dans ta Private sub avant "call essai" mets --> a = target

Ensuite tu peux utiliser "a" où tu le souhaites

Amicalement

Dan

Bonsoir à tous,

Dan, je n'arrive pas à appliquer ton code correctement, çà marche pas !

l'a-tu tester sur le fichier ??

amicalement

Claude.

re,

J'ai peut être été trop vite pour te répondre.

Donne moi un exemple concret avec le résultat car à la vue de ton fichier je ne saisis pas tout le pb je crois.

A te relire

Dan

Bonsoir, claude

dans l'évènement de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 5 Then
Application.EnableEvents = False
x = Application.Sum(Range(Cells(Target.Row, 5), Cells(Target.Row, 27)))
If Application.Sum(Range(Cells(Target.Row, 5), Cells(Target.Row, 27))) > MonStock Then
    Target = IIf(MaDer = 0, "", MaDer)
    Cells(Target.Row, 3) = MonStock
Else
    Cells(Target.Row, 3) = Cells(Target.Row, 2) - Application.Sum(Range(Cells(Target.Row, 5), Cells(Target.Row, 27)))
End If
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
MonStock = Cells(Target.Row, 2)
MaDer = Target
End Sub

et dans un module standard :

''Macros par Claude Dubois pour "banditito" Excel-Pratique le 2 juin 08
Public MonStock As Long, MaDer As Long

Cependant, je te conseille de forcer la sélection de la cellule A1 à l'ouverture, ou à l'enregistrement, ou à l'activation de la feuille, entre autres, pour ne pas perdre la valeur publique :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("INVENTAIRE").[A1].Select
End Sub

Private Sub Workbook_Open()
Sheets("INVENTAIRE").[A1].Select
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sheets("INVENTAIRE").[A1].Select
End Sub

Bonsoir felix,

çà marche nickel !

j'essaye d'analyser ton code, une ligne m'échappe :

 Target = IIf(MaDer = 0, "", MaDer)

d'ou sort et que signifie ce " I" (c'est un i majuscule ?)

je comprends pas cette ligne

en tout cas, je te remercie, (c'est déjà un niveau VBA supérieur, pour moi).

Bonne soirée

Claude.

Re,

mets-toi au milieu du IIf, et clique sur F1

C'est l'équivalent VBA de la formule Excel Si

IIF(condition, valeur si vraie, valeur si faux)

re,

Je prends bonne note.

une ligne du même genre pourrait être dans un module ?

il va quand même falloir que je réinstalle la bibliothèque d'aide (pour le F1)

encore merci

Claude.

Re-,

une ligne du même genre pourrait être dans un module ?

Tout à fait, c'est pas un code réservé à l'évènement de feuille

Attention, toutefois, à l'utilisation de IIF

si ta condition ramène une erreur, ou même si une des valeurs (vraie, ou fausse) ramène une erreur, ta ligne plante, et le code ne marche pas

Exemple :

essai = "texte"
x = IIf(IsNumeric(essai), CDbl(essai), "texte")

Ici, tu planteras sur x, pourtant, on lui demande si "essai" est numérique......

re,

je vais cogiter tout çà.

encore une bonne leçon aujourd'hui !

merci felix et bonne nuit

Claude.

Rechercher des sujets similaires à "vba prendre memoire"