Bonjour Jacques,
Je trouves que tu "tritures" un peu trop le "bouzin" dans ton code.
Si l'on part de ma première proposition, que l'on mixe avec ton idée de récupérer formules et valeurs des cellules :
1- on se moque des listes de validation, elles seront toujours présentes,
2- on n'est pas obligé de passer par une autre feuille,
3- pas besoin de se préoccuper des cellules éventuellement vides en A (on remplit toutes les cellules de A),
4- si cellules vides en B, pas grave non plus.
Teste ce code [ton code simplifié] :
1 2 3 4 5 6 7 8 9 10 11 12
| Private Function enlever_plage(A As Range, B As Range) As Range
Dim AValeur, AFormula
Set B = Intersect(A, B)
'Evite le bug sur B.ClearContents si B Is Nothing :
If B Is Nothing Then Set enlever_plage = A: Exit Function
AValeur = A.Value: AFormula = A.Formula
A.Value = "XXX" 'ne provoque pas d'erreur si liste de validation (y compris avec message d'erreur de saisie)
B.ClearContents
Set enlever_plage = A.SpecialCells(xlCellTypeConstants)
A.Value = AValeur 'remet les valeurs dans les cells de A, y compris si liste de validation, y compris les "vides"
A.Formula = AFormula
End Function |
Ou alors quelque chose m'échappe...
Pour aller plus loin, il serait peut-être intéressant (mais cela seul toi peux le savoir
) de créer une fonction avec un second paramètre de type Array :
Private Function enlever_plage(A As Range, B() As Range) As Range
EDIT : on peut même s'affranchir de AValeur...
1 2 3 4 5 6 7 8 9
| Private Function enlever_plage(A As Range, B As Range) As Range
Dim AFormula
Set B = Intersect(A, B)
If B Is Nothing Then Set enlever_plage = A: Exit Function
AFormula = A.Formula
A.Value = "XXX": B.ClearContents
Set enlever_plage = A.SpecialCells(xlCellTypeConstants)
A.Formula = AFormula
End Function |
Partager