OVH Cloud OVH Cloud

traiter #DIV/0! pour toutes les feuilles

5 réponses
Avatar
J
Bonjour à tous
j'ai trouvé les 2 sub suivantes sur www.mrexcel.com. Elles remplacent
automatiquement les formules qui produisent parfois des #DIV/0! par
=SI(ESTERREUR((B15/B$7)*100);""; (B15/B$7)*100) cela pour l'ensmble de
la feuille.

2 petites questions :
* y a t il un intérêt à utiliser l'une ou l'autre de ces sub?
* j'ai essayé d'automatisé cela pour toutes mes pages, mais cela ne
fonctionne que pour une seule feuille.
Merci pour vos avis
J@@


'----------
Sub ErrorTrapAddDDL()
' Ajoute =If(IsErreur() aux formules existantes
Dim cel As Range
Dim rng As Range
Dim Check As String
Const Equ As String = "=IF(ISERROR(_x),"""",_x)"
Check = Left$(Equ, 12) & "*" 'Check for =IF(ISERROR(

On Error Resume Next

Set rng = Selection.SpecialCells(xlFormulas, 23)
If rng Is Nothing Then Exit Sub
With WorksheetFunction
For Each cel In rng
If Not cel.Formula Like Check Then
cel.Formula = .Substitute(Equ, "_x", Mid$(cel.Formula, 2))
End If
Next
End With
End Sub

'----------
Sub Remove_Formula_Errors()
Dim rng As Range, cell As Range, fmla As String
Set rng = Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub

'----------
Sub NettoieSigneErreursTtesFeuilles()
Dim s As Worksheet
Application.ScreenUpdating = False
For Each s In ActiveWorkbook.Worksheets
'ErrorTrapAddDDL '* ne marche que pour 1 seule feuille
Remove_Formula_Errors '* ne marche que pour 1 seule feuille
Next s
Application.ScreenUpdating = True
End Sub
'----------

5 réponses

Avatar
J
Excuseé-moi, je ne bégaie pas, mais j'aime tellement lire les messages ;-))
Avatar
Ange Ounis
* j'ai essayé d'automatisé cela pour toutes mes pages, mais cela ne
fonctionne que pour une seule feuille.


Deux pistes pour y remédier.
1- sélectionner explicitement chaque feuille :

For Each s In ActiveWorkbook.Worksheets
s.Select ' <------ ici
'ErrorTrapAddDDL '* ne marche que pour 1 seule feuille
Remove_Formula_Errors '* ne marche que pour 1 seule feuille
Next s

2- ajouter un paramètres aux procédures ErrorTrapAddDDL et Remove_Formula_Errors
Par exemple :

'----------
Sub Remove_Formula_Errors(sht As Worksheet)
Dim rng As Range, cell As Range, fmla As String
Set rng = sht.Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub
'----------

puis, dans la procédure générale :

Remove_Formula_Errors s

----------
Ange Ounis
----------

Bonjour à tous
j'ai trouvé les 2 sub suivantes sur www.mrexcel.com. Elles remplacent
automatiquement les formules qui produisent parfois des #DIV/0! par
=SI(ESTERREUR((B15/B$7)*100);""; (B15/B$7)*100) cela pour l'ensmble de
la feuille.

2 petites questions :
* y a t il un intérêt à utiliser l'une ou l'autre de ces sub?
* j'ai essayé d'automatisé cela pour toutes mes pages, mais cela ne
fonctionne que pour une seule feuille.
Merci pour vos avis
J@@


'----------
Sub ErrorTrapAddDDL()
' Ajoute =If(IsErreur() aux formules existantes
Dim cel As Range
Dim rng As Range
Dim Check As String
Const Equ As String = "=IF(ISERROR(_x),"""",_x)"
Check = Left$(Equ, 12) & "*" 'Check for =IF(ISERROR(

On Error Resume Next

Set rng = Selection.SpecialCells(xlFormulas, 23)
If rng Is Nothing Then Exit Sub
With WorksheetFunction
For Each cel In rng
If Not cel.Formula Like Check Then
cel.Formula = .Substitute(Equ, "_x", Mid$(cel.Formula, 2))
End If
Next
End With
End Sub

'----------
Sub Remove_Formula_Errors()
Dim rng As Range, cell As Range, fmla As String
Set rng = Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub

'----------
Sub NettoieSigneErreursTtesFeuilles()
Dim s As Worksheet
Application.ScreenUpdating = False
For Each s In ActiveWorkbook.Worksheets
'ErrorTrapAddDDL '* ne marche que pour 1 seule feuille
Remove_Formula_Errors '* ne marche que pour 1 seule feuille
Next s
Application.ScreenUpdating = True
End Sub
'----------


Avatar
J
Bonjour Ange
et merci

La piste 1 fonctionne avec la sub 1 pas avec la sub 2
La piste 2 me plante : quand je la lance, elle m'ouvre la liste de choix
des macros. (equiv. alt+F8)

@+
J@@


* j'ai essayé d'automatiser cela pour toutes mes pages, mais cela ne
fonctionne que pour une seule feuille.


Deux pistes pour y remédier.
1- sélectionner explicitement chaque feuille :

For Each s In ActiveWorkbook.Worksheets
s.Select ' <------ ici
'ErrorTrapAddDDL '* ne marche que pour 1 seule feuille
Remove_Formula_Errors '* ne marche que pour 1 seule feuille
Next s

2- ajouter un paramètres aux procédures ErrorTrapAddDDL et
Remove_Formula_Errors
Par exemple :

'----------
Sub Remove_Formula_Errors(sht As Worksheet)
Dim rng As Range, cell As Range, fmla As String
Set rng = sht.Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub
'----------

puis, dans la procédure générale :

Remove_Formula_Errors s

----------
Ange Ounis
----------


j'ai trouvé les 2 sub suivantes sur www.mrexcel.com. Elles remplacent
automatiquement les formules qui produisent parfois des #DIV/0! par
=SI(ESTERREUR((B15/B$7)*100);""; (B15/B$7)*100) cela pour l'ensmble de
la feuille.

'----------
Sub ErrorTrapAddDDL()
' Ajoute =If(IsErreur() aux formules existantes
Dim cel As Range
Dim rng As Range
Dim Check As String
Const Equ As String = "=IF(ISERROR(_x),"""",_x)"
Check = Left$(Equ, 12) & "*" 'Check for =IF(ISERROR(

On Error Resume Next

Set rng = Selection.SpecialCells(xlFormulas, 23)
If rng Is Nothing Then Exit Sub
With WorksheetFunction
For Each cel In rng
If Not cel.Formula Like Check Then
cel.Formula = .Substitute(Equ, "_x", Mid$(cel.Formula, 2))
End If
Next
End With
End Sub

'----------
Sub Remove_Formula_Errors()
Dim rng As Range, cell As Range, fmla As String
Set rng = Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub





Avatar
Ange Ounis
Je ne sais pas comment tu as modifié tes deux procédures pour leur ajouter un
paramètre, mais la procédure ErrorTrapAddDDL ne fonctionne pas tout à fait comme
la deuxième : elle attend une sélection, ce qui va poser problème dans ton cas.

Set rng = Selection.SpecialCells(xlFormulas, 23)

devrait devenir qqchose comme

Set rng = sht.Cells.SpecialCells(xlFormulas, 23)

----------
Ange Ounis
----------

Bonjour Ange
et merci

La piste 1 fonctionne avec la sub 1 pas avec la sub 2
La piste 2 me plante : quand je la lance, elle m'ouvre la liste de choix
des macros. (equiv. alt+F8)

@+
J@@


* j'ai essayé d'automatiser cela pour toutes mes pages, mais cela ne
fonctionne que pour une seule feuille.


Deux pistes pour y remédier.
1- sélectionner explicitement chaque feuille :

For Each s In ActiveWorkbook.Worksheets
s.Select ' <------ ici
'ErrorTrapAddDDL '* ne marche que pour 1 seule feuille
Remove_Formula_Errors '* ne marche que pour 1 seule feuille
Next s

2- ajouter un paramètres aux procédures ErrorTrapAddDDL et
Remove_Formula_Errors
Par exemple :

'----------
Sub Remove_Formula_Errors(sht As Worksheet)
Dim rng As Range, cell As Range, fmla As String
Set rng = sht.Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub
'----------

puis, dans la procédure générale :

Remove_Formula_Errors s

----------
Ange Ounis
----------


j'ai trouvé les 2 sub suivantes sur www.mrexcel.com. Elles remplacent
automatiquement les formules qui produisent parfois des #DIV/0! par
=SI(ESTERREUR((B15/B$7)*100);""; (B15/B$7)*100) cela pour l'ensmble
de la feuille.

'----------
Sub ErrorTrapAddDDL()
' Ajoute =If(IsErreur() aux formules existantes
Dim cel As Range
Dim rng As Range
Dim Check As String
Const Equ As String = "=IF(ISERROR(_x),"""",_x)"
Check = Left$(Equ, 12) & "*" 'Check for =IF(ISERROR(

On Error Resume Next

Set rng = Selection.SpecialCells(xlFormulas, 23)
If rng Is Nothing Then Exit Sub
With WorksheetFunction
For Each cel In rng
If Not cel.Formula Like Check Then
cel.Formula = .Substitute(Equ, "_x", Mid$(cel.Formula, 2))
End If
Next
End With
End Sub

'----------
Sub Remove_Formula_Errors()
Dim rng As Range, cell As Range, fmla As String
Set rng = Cells.SpecialCells(xlCellTypeFormulas, 16)
For Each cell In rng
fmla = Right(cell.Formula, Len(cell.Formula) - 1)
cell.Formula = "=if(iserror(" & fmla & "),""""," & fmla & ")"
Next
End Sub







Avatar
J
Bonjour Ange
avec un peu de retard, voisi le résultats des courses.
Voici ce qui fonctionne bien. Je n'ai pas modifié les proc d'origine.
Une remarque la proc2 est nettement plus rapide, mais je ne suis pas
assez pointu pour apprécier els avantages, les inconvéninets de l'une et
l'autre.

'=================== ' pour ttes les feuilles du classeur
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ErrorTrapAddDDL 'moins rapide
'Remove_Formula_Errors
Next ws

' pour seulement les feuilles sélectionnées
For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
ws.Select
ActiveSheet.Activate
'ErrorTrapAddDDL
Remove_Formula_Errors 'plus rapide
Next ws
'===================
Merci encore
et Joyeuses fêtes
J@@


Ange Ounis wrote:
Je ne sais pas comment tu as modifié tes deux procédures pour leur
ajouter un paramètre, mais la procédure ErrorTrapAddDDL ne fonctionne
pas tout à fait comme la deuxième : elle attend une sélection, ce qui va
poser problème dans ton cas.

Set rng = Selection.SpecialCells(xlFormulas, 23)

devrait devenir qqchose comme

Set rng = sht.Cells.SpecialCells(xlFormulas, 23)

La piste 1 fonctionne avec la sub 1 pas avec la sub 2
La piste 2 me plante : quand je la lance, elle m'ouvre la liste de
choix des macros. (equiv. alt+F8)
J@@