Macro inactive ?

leyeti77

XLDnaute Nouveau
Bonjour,

J'ai pour habitude de créer mes macros en enregistrant une action, puis éventuellement j'utilise l'éditeur pour optimiser.

J'ai un cas ou une partie de la macro est inopérante : Je veux remplacer les champs #VALEUR! par un espace (" ") :
Columns("AE:AG").Select
Selection.Replace What:="#VALEUR!", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False


Et rien ne se passe :confused:
J'ai cherché sur des forum français et US, mais pas de réponse.
Merci d'avance.
 

vbacrumble

XLDnaute Accro
Re : Macro inactive ?

Bonsoir leyeti77, PUARAI



Et la touche F1 dans VBE ;)


Valeurs d'erreur de cellule


La fonction CVErr vous permet d'insérer une valeur d'erreur de cellule dans une cellule ou de tester la valeur d'une cellule pour une valeur d'erreur. Les valeurs d'erreur de cellule peuvent être l'une des constantes XlCVError suivantes.

Constante Numéro de l'erreur Valeur d'erreur de cellule
xlErrDiv0 2007 #DIV/0!
XlErrNA 2042 #N/A
xlErrName 2029 #NAME ?
XlErrNull 2000 #NULL!
XlErrNum 2036 #NUM!
XlErrRef 2023 #REF!
XlErrValue 2015 #VALUE!
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Macro inactive ?

Re

EDITION: pour pas te laisser te coucher dans le désarroi ;)
Code:
Sub Macro1() (test OK sur  Excel 2000
[COLOR="Green"]' Macro1 Macro
' Macro enregistrée le 27/04/2009 par VBACrumble[/COLOR]
Dim plg As Range, c As Range
Set plg = Columns("AE:AG").SpecialCells(xlCellTypeFormulas, 16)
For Each c In plg
c = IIf(c.Value = CVErr(xlErrValue), vbNullString, c)
Next
End Sub


Il y a même un exemple tout prêt dans l'aide VBE d'Excel :rolleyes:

Cet exemple montre comment afficher un message si la cellule active de la feuille Sheet1 contient une valeur d'erreur de cellule. À partir de cet exemple, vous pouvez créer un gestionnaire d'erreurs de valeur d'erreur de cellule.

Code:
Worksheets("Sheet1").Activate
If IsError(ActiveCell.Value) Then
    errval = ActiveCell.Value
    Select Case errval
        Case CVErr(xlErrDiv0)
            MsgBox "#DIV/0! error"
        Case CVErr(xlErrNA)
            MsgBox "#N/A error"
        Case CVErr(xlErrName)
            MsgBox "#NAME? error"
        Case CVErr(xlErrNull)
            MsgBox "#NULL! error"
        Case CVErr(xlErrNum)
            MsgBox "#NUM! error"
        Case CVErr(xlErrRef)
            MsgBox "#REF! error"
        Case CVErr(xlErrValue)
            MsgBox "#VALUE! error"
        Case Else
            MsgBox "This should never happen!!"
    End Select
End If
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Macro inactive ?

Bonsoir ledzepfred, kjin

EDITION II:
pour tenir compte de la remarque de kjin (et ne pas perdre la formule
Code:
Sub gardeFORMUetSuppVALEUR()
With Sheets(1) [COLOR="Green"]'s'applique à la feuille 1[/COLOR]
    Set plg = .UsedRange.SpecialCells(xlCellTypeFormulas, 16) 
[COLOR="Green"]' définit la plage plg[/COLOR]
[COLOR="Green"]'contenant les cellules [I]"formulées"[/I] avec un message d'erreur.[/COLOR]
     
        For Each c In plg[COLOR="Green"]' Pour chaque cellule[/COLOR]
            If  c.Value = CVErr(xlErrValue) Then [COLOR="Green"]' avec message d'erreur,[/COLOR]
            With c
                .Formula = "'" & .Formula [COLOR="Green"]' on ajoute un guillement au début[/COLOR]
                .NumberFormat = ";;;" [COLOR="Green"]' puis on applique un format  "invisible" [/COLOR]
[COLOR="Green"]'pour masquer la formule.[/COLOR]
            End With
            End If
        Next
Set plg=Nothing       [COLOR="Green"] ' on libère [/COLOR]
End With
End Sub



EDITION: une dernière façon (pour le fun)
Code:
Sub Macro2()
Dim c As Range
For Each c In [AE:AG].SpecialCells(xlCellTypeFormulas, 16)
c = Chr(32 + (c = CVErr(xlErrValue)))
Next
End Sub



Je veux remplacer les champs #VALEUR! par un espace (" ")
En plus court (mais prudence car toutes erreurs seront rempacés par un espace)
Code:
Range("AE:AG").SpecialCells(xlCellTypeFormulas, 16).Value = Chr(32)
 
Dernière édition:

leyeti77

XLDnaute Nouveau
Re : Macro inactive ?

bonsoir à tous,
essayes ceci, cela devrait fonctionner :
Code:
Columns("AE:AG").Select
Selection.Replace What:="#VALUE!", Replacement:=" "

Et bien c'est simple et ça fonctionne nickel.
Un grand merci :cool:

J'imagine que je n'arrive pas à sauvegarder avec ma macro pour la même raison ;)
Mais je vais enqueter d'abord :rolleyes:


PS : je n'oublie pas de remercier tous ceux qui ont répondu. MERCI ;-)
 

Discussions similaires

Réponses
1
Affichages
134

Statistiques des forums

Discussions
312 398
Messages
2 088 076
Membres
103 699
dernier inscrit
amin Saadaoui