Macro dans fonction SI
Bonjour tous le monde!
Je suis nouveau ici, et j'ai une question qui, à mon avis, vous semblera simple. Alors voilà, je vais tenter d'être clair (en simplifiant ma requête):
Je dispose d'une liste de nombres consécutifs (1,2,3,4,5...) rangé dans l'ordre croissant et en colonne sous excel. Cependant, cette liste n'est pas parfaite, il existe des "sauts": par exemple, au lieu d'avoir {1,2,3,4,5}, j'ai {1,2,4,5,6}. Dans ce cas, mon but est d'insérer de manière automatique un saut de ligne (insérer une cellule vide là où il manque le "3", de manière à obtenir en colonne {1,2, ,4,5,6}.
Je vous explique ma démarche, j'ai créer une macro qui insère une cellule vide, ensuite j'ai placé à côté de ma colonne erronée, une colonne "parfaite" (sans erreur). Puis une 3eme colonne qui compare ces deux colonnes à l'aide de la fonction SI: Si la colonne de base égale la colonne parfaite, ne rien faire, sinon appeler ma macro pour sauter une ligne, du genre:
=SI(B3=A3;"ok";mamacro())
Excel n'accepte pas cette formule. Que puis je faire?
D'avance merci,
Snamf.
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir et bienvenue,
On ne peut pas lancer une macro à partir d'une formule,
Il faudrait voir le contexte de l'action,
Envoie le fichier avec explications et la macro actuelle
çà n'a pas l'air très compliqué.
Amicalement
Claude
Bonjour,
essaies cette macro qui recherche les sauts dans ta progression (raison:1)et insère aux lignes voulues
excusez moi, j'étais mal réveillé... voir ci dessous
en espérant que...
-- Lun Juin 28, 2010 11:57 am --
re,
un peu mieux réveillé!
Const col As Byte = 2
Sub inserer_trous()
Dim plage As Range
Dim dep As Byte, Ut As Long, Ux As Long, cptr As Long
Dim liste As String
'---------------initialisations
Application.ScreenUpdating = False
'ligne 1° terme
dep = Columns(col).Find("*", Cells(1, col)).Row
'nombre de termes dans la plage
Set plage = Cells(dep, col).CurrentRegion
'----------teste si il existe des sauts dans la liste
'valeur théorique pour n termes
Ut = plage.Rows.Count
'valeur réelledernier terme
Ux = Cells(Cells(dep, col).End(xlDown).Row, col)
'-------liste les lignes de sauts
If Ut <> Ux Then
For cptr = 1 To Ut
sauts = Cells(dep + cptr, col) - Cells(dep + cptr - 1, 2)
If sauts > 1 Then
'For cptr_s = 0 To sauts - 1
liste = liste & dep + cptr & ":" & dep + cptr + cptr_s + sauts - 2 & ","
'Next
End If
Next
End If
'------insère les lignes
Range(Left(liste, Len(liste) - 1)).Insert
End Sub