macro et conditionnel

D

durand

Guest
dans un de mes messages, je demande si l'on peut executer une macro à partir d'une formule de calcul conditionnel.
chris me répond que non.
par contre nini, dans le forum demande la même chose et on lui répond que oui.

dans mon exemple je veux que :

a1 devienne la valeur stockée dans a2
a2 devienne la valeur stockée dans a3
a3 devienne la valeur stockée dans a4
a4 devienne la valeur stockée dans a5
etc ..... (en fait, les faire glisser)

à la condition que (dès que) b1 est différent de b2.

b1 étant le résultat d'un nouveau calcul
b2 étant le "stockage" d'un ancien calcul

très cordialement à tous.
pierre
 
M

Michel_M

Guest
Bonjour Durand (j’aime bien ce prénom) et le forum


Voilà une petite macro qui semble résoudre ton pb si je l’ai bien compris
A copier dans feuil1 de l Ȏditeur vBa

Private Sub Worksheet_Change(ByVal Target As Range)

‘ déclarations
Dim glissade As Range
Static flag As Boolean
Dim lig As Long

If Intersect(Target, Range("B2")) Is Nothing Then: Exit Sub
If flag = True Then: Exit Sub

'teste la différence B1/B2
If Range("B1") = Range("B2") Then: End

flag = True

‘ B1 devient la future ancienne valeur de test
Range("B1") = Range("B2")

'Numero de la dernière ligne occupée colonne A
lig = Range("A1").End(xlDown).Row

' active une variable « range » des valeurs existant en colonne A à partir de la ligne 2
Set glissade = Range(Cells(2, 1), Cells([lig], 1))

' nettoie le dernière cellule
Cells(lig, 1).ClearContents

' restitue les valeurs de la col A à partir de la ligne 1
Range(Cells(1, 1), Cells([lig] - 1, 1)) = glissade.Value

flag = False

End Sub


Le coup de la variable « static flag » doit beaucoup à une macro de Ti trouvée dans le coffret des listes. ( j’ai surnommé dans mes archives cette macro de Ti : la « macro des vraies fausses sorties » après avoir passé pas mal de temps à comprendre…c’est tout l’intérêt du forum : etudier les solutions proposées pour essayer de piger et + tard appliquer, Encore 1 fois, Merci Ti et les autres champions d’Excel).

Toutefois, qq chose me dit qu’il doit y avoir + simple, donc peut-être à +

Bon Dimanche

Michel. Béziers
 
M

Michel_M

Guest
Re,


Peut-être + simple en considérant que la valeur de B2 est calculée a partir d’une autre feuille
(la précédente fonctionne si le calcul de B2 se trouve dans la ^m feuille)

Private Sub Worksheet_Activate()

Dim glissade As Range
Dim lig As Long

'teste la différence B1/B2
If Range("B1") = Range("B2") Then: End

Range("B1") = Range("B2")
'Numero de la dernière ligne occupée colonne A
lig = Range("A1").End(xlDown).Row

' active une variable range des valeurs existant en colonne A à partir de la ligne 2
Set glissade = Range(Cells(2, 1), Cells([lig], 1))

' nettoie le dernière cellule
Cells(lig, 1).ClearContents

' restitue les valeurs de la col A à partir de la ligne 1
Range(Cells(1, 1), Cells([lig] - 1, 1)) = glissade.Value

End Sub


A+
Michel. Béziers
 
D

durand

Guest
merci michel pour tous tes conseils et surtout d'avoir passé de ton temps pour cela.
par contre je ne suis pas du tout familiarisé avec le vba.

j'ai fait du dbase, en son temps, ce qui me permet de ne pas être ignare sur le sens du programme que tu m'as envoyé.
à moi de m'y mettre.
Pierre (Durand)
 

Discussions similaires

Réponses
7
Affichages
271

Statistiques des forums

Discussions
314 145
Messages
2 106 370
Membres
109 570
dernier inscrit
Melby