Problème cellule "#REF!"
Résolu
Pierre
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai mis en place à l'aide d'un bout de code, une condition qui remplace tous les "month" par "mois". Tout fonctionne sauf si une cellule contient "#REF!" pour une erreur de référence.
Ma question est la suivante. Est-il possible en partant de ce code de passer outre l'erreur d'exécution '13' dû aux cellules contenant "#REF!" ?
Merci d'avance pour votre aide.
J'ai mis en place à l'aide d'un bout de code, une condition qui remplace tous les "month" par "mois". Tout fonctionne sauf si une cellule contient "#REF!" pour une erreur de référence.
Ma question est la suivante. Est-il possible en partant de ce code de passer outre l'erreur d'exécution '13' dû aux cellules contenant "#REF!" ?
Sub test() Dim src As Range, fdest As Worksheet Dim ws As Worksheet, rng As Range Dim O As Worksheet 'd?clare la variable O (Onglet) Dim CEL As Range 'd?clare la variable CEL (CELlule) For Each O In Worksheets 'boucle 1 : sur tous les onglets du classeur 'Si le nom de l'onglet contient "month", remplace "month" par "mois" If InStr(1, O.Name, "month", vbTextCompare) <> 0 Then O.Name = Replace(O.Name, "month", "mois", 1) For Each CEL In O.UsedRange 'boucle 2 : sur toutes les cellules de la plage ?dit?e de l'onglet O 'Si la cellule contient "'month", remplace "month" par "mois" If InStr(1, CEL.Value, "month", vbTextCompare) <> 0 Then CEL.Value = Replace(CEL.Value, "month", "mois", 1) Next CEL 'prochaine cellule de la boucle 2 Next O 'prochain onglet de la boucle 1 End Sub
Merci d'avance pour votre aide.
A voir également:
- Problème cellule "#REF!"
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule choix multiple - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
Bonjour,
A l'arrache, a mettre apres les declarations variable
et a la fin
A l'arrache, a mettre apres les declarations variable
On Error Resume Next
et a la fin
On Error GoTo 0
Bonjour,
Simplement :
Simplement :
Sub test() Dim O As Worksheet For Each O In Worksheets O.Name = Replace(O.Name, "month", "mois", 1) O.UsedRange.Replace "month", "mois", 1 Next O End Sub
Les deux tests suivants sont totalement inutiles et chronophages, l'instruction Replace s'en charge :
C'est le second qui provoque l'erreur 13 en cas de #REF!.
Par contre
c'est une méthode où il faut cibler la cause, surtout pas à mettre en début et fin de procédure !
Dans l'éventualité où il faudrait éviter les erreurs #REF! et uniquement celles-là, utiliser le test suivant :
If InStr(1, xxxx, "month", vbTextCompare) <> 0 Then ....
C'est le second qui provoque l'erreur 13 en cas de #REF!.
Par contre
On Error Resume NextMasque toutes les erreurs :
c'est une méthode où il faut cibler la cause, surtout pas à mettre en début et fin de procédure !
Dans l'éventualité où il faudrait éviter les erreurs #REF! et uniquement celles-là, utiliser le test suivant :
If Not CEL.Value = CVErr(XlCVError.xlErrRef) Then
Effectivement, dans les cas où plusieurs alternatives existent ensuite, je dirais même qu'il est indispensable de tester la présence de la chaine à remplacer, mais pas dans le cas actuel où le test positif se traduit uniquement par un remplacement systématique. L'instruction Replace n'effectue le remplacement que si la chaine est présente, il est inutile et chronophage de le doubler par un test préalable.
Et le pire dans ce cas précis, c'est la boucle sur chacune des cellules alors qu'une seule instruction suffit pour toute la plage de cellules.
Et le pire dans ce cas précis, c'est la boucle sur chacune des cellules alors qu'une seule instruction suffit pour toute la plage de cellules.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, suggestion:
If Not IsError(CEL) Then If InStr(1, CEL.Value, "month", vbTextCompare) <> 0 Then CEL.Value = Replace(CEL.Value, "month", "mois", 1) End If End If