Remplacer #NOM par un sigle

Bonjour à tous,

Je m'explique : j'ai un tableau qui se remplit automatiquement avec une fonction VBA, qui consiste à aller chercher des valeurs d'autres fichiers excel. Or certaines valeurs ne sont pas précisées dans ces fichiers, donc dans mon tableau j'ai #NOM. Je veux laisser cette erreur, mais pour ne pas surcherger mon tableau je veux le remplacer par un sigle comme par exemple X.

J'ai deja réalisé une fonction VBA mais cela m'enleve la formule de la cellule (ce que je ne veux pas) et j'ai essayé avec la formule ESTERREUR pour ne pas enlver la formule mais je dois le faire cellule par cellule (sachant que j'ai environ une vingtaine de tableau avec a chaque fois environ 25000 cellules, c'est impossible)

Quelqu'un aurait-il une solution?

Merci d'avance pour vos réponses

Bonjour tioch,

Est-ce que c'est la même formule partout ?

Non ce n'est pas la meme formule partout.

Elle est meme différente pour toutes les cellules, vu qu'elles correspondent chacune à une cellule d'un fichier excel spécifié.

La est le problème.

Merci

Peux-tu fournir un bout de ton fichier avec une vingtaine de formules ? Garde la structure des données.

bonjour

A tout hasard et a defaut ; une mfc du genre = esterreur(a1) sans les$$ avec format voulu pour masquer

cordialement

Merci a tous pour vos idées mais ce n'est pas exactement ca.

J'ai fais un exemple (en gros et vite fait) des fichiers que j'ai normalement (mais qui sont confidentiels).

Sur la première colonne c'est des liens hypertext vers les fichiers. Et donc des qu'il y a une erreur il me faudrait remplacer par un sigle. Sachant également que toutes les cellules se remplisssent automatiquement à l'aide d'un programme VBA.

Si vba-new tu as des idées c'est avec plaisir.

Merci d'avance

19classeur-test.xls (16.50 Ko)

Une solution serait de réécrire toutes les formules en y intégrant une condition en cas d'erreur. Possible avec la macro suivante :

Sub reecriture()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each cel In Selection
        oldCel = Mid(cel.FormulaR1C1, 2, Len(cel.FormulaR1C1) - 1)
        cel.FormulaR1C1 = "=IF(ISERROR(" & oldCel & "),""X""," & oldCel & ")"
    Next cel
End Sub

Il te faudra au préalable sélectionner toutes les cellules contenant les formules puis lancer la macro.

Par contre, avec 25000 cellules, je ne sais pas combien de temps ça prendra. Fais des tests avec une sélection plus petite d'abord peut-être.

bonjour

quant a moi ,de mon coté j'ai cherché un format personnalisé ; .... en vain

bon week-end

Ca marche bien vba-new et je t'en remercie mais (il y a qd meme un mais) il me met une erreur qd je selectionne toutes les cellules : Erreur d'execution '7' Mémoire insuffisante

Ca veut dire que mon fichier est trop gros? Qu'il y a trop de données?

Et n'est-il pas possible de l'automatiser, sans devoir selectionner de cellule?

Merci encore a toi

tulipe_3 a écrit :

bonjour

quant a moi ,de mon coté j'ai cherché un format personnalisé ; .... en vain

C'était une bonne idée mais ça ne me semble également pas possible.
tioch a écrit :

Et n'est-il pas possible de l'automatiser, sans devoir selectionner de cellule?

Si c'est possible avec ça :
Sub reecriture()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each cel In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
        oldCel = Mid(cel.FormulaR1C1, 2, Len(cel.FormulaR1C1) - 1)
        cel.FormulaR1C1 = "=IF(ISERROR(" & oldCel & "),""X""," & oldCel & ")"
    Next cel
End Sub

Le seul souci est que la macro va sélectionner toutes les cellules contenant des formules, il y a peut-être des formules que tu ne veux pas changer mais bon. C'est soit tout soit rien

Et n'oublie pas, cette macro est à lancer qu'une seule fois car sinon on aurait des SI et des ESTERREUR imbriqués.

Bonjour

Quelques modifications

Pour la vitesse et pour éviter

vba-new a écrit :

il y a peut-être des formules que tu ne veux pas changer mais bon. C'est soit tout soit rien

et

vba-new a écrit :

des SI et des ESTERREUR imbriqués.

A tester

Sub reecriture()

  With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  On Error Resume Next
  For Each cel In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
    oldCel = Mid(cel.FormulaR1C1, 2, Len(cel.FormulaR1C1) - 1)
    cel.FormulaR1C1 = "=IF(ISERROR(" & oldCel & "),""X""," & oldCel & ")"
  Next cel
  Application.Calculation = xlCalculationAutomatic
End Sub

Test sur 2003 : 100280 cellules en erreur : 01 mn 04 sec

Parfait vba_new, c'est exactement ca. Ca met un peu de temps, mais moins que ce que je pensais, donc très bien.

Merci

Rechercher des sujets similaires à "remplacer nom sigle"