IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Compatibilité Excel 2003/2007 : Mettre jour formule sierreur en si(esterreur à l'aide d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Compatibilité Excel 2003/2007 : Mettre jour formule sierreur en si(esterreur à l'aide d'une macro
    Bonjour,

    Afin de rendre compatible mon classeur avec Excel 2003, je dois modifier toutes les cellules comprenant la formule sierreur(... par si(esterreur..., en essayant de récupérer automatique les arguments.

    J'ai réussi à appliquer ma macro sur une cellule active, mais je n'arrive pas à l'appliquer sur l'ensemble des cellules non vides, que je sélectionne préalablement à l'aide d'une macro, qui fonctionne.

    Pourriez-vous me donner un peu d'aide?

    Merci beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    Sub RemplacerSiErreur()
    '
    ' Macro2 Macro
     
    Dim Formule As String
    Dim Trouve As Range
    On Error Resume Next
     
    Set Trouve = Selection.Find(what:="SIERREUR", LookIn:=xlFormulas, lookat:=xlPart)
    adr = Trouve.Address
     
    If Not Trouve Is Nothing Then
    Do
     
    'enlève le égale
    Formule = Right(CStr(ActiveCell.FormulaR1C1), Len(CStr(ActiveCell.FormulaR1C1)) - 1)
     
    'Enlève le ISERREUR()
    Formule = Replace(Formule, "IFERROR", "")
     
    'Enlève le dernier argument du ISERREUR()
    Formule = Replace(Formule, ",0", "")
     
    'Scinder les deux parties de la formule
    'param = Split(Formule, ";")
     
    'Applique le SI(ESTERREUR()...
    FormulaR1C1 = "=SI(ESTERREUR(" & Formule & "),0," & Formule & ")"
     
    Set Trouve = Selection.FindNext(Trouve)
    Loop Until Trouve.Address = adr Or Trouve Is Nothing
    End If
     
     
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    VBA pense en anglais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Trouve = Selection.Find(what:="IFERROR", LookIn:=xlFormulas, lookat:=xlPart)
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    J'avais déjà essayé avec iferror, mais cela ne marche pas pour autant.

    Avez-vous une autre idée?

    Merci beaucoup.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    J'ai refait le test avec Excel 2007 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells.SpecialCells(xlCellTypeFormulas).Select
    Set Trouve = Selection.Find(what:="IFERROR", LookIn:=xlFormulas, lookat:=xlPart)
    MsgBox Trouve.Address
    donne bien l'adresse de ma cellule contenant la formule (D7).

    Enlève la ligne :

    elle peut masquer une erreur.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En remplaçant ActiveCell par Trouve comme suit, j'ai réussi à exécuter correctement la macro.
    Cependant elle ne marche toujours pas sur le classeur excel qui m'intéresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    'Boucle sur les cellules selectionnees
     
    Set Trouve = Selection.Find(what:="IFERROR", LookIn:=xlFormulas, lookat:=xlPart)
    adr = Trouve.Address
     
    If Not Trouve Is Nothing Then
    Do
     
    'enlève le égale
    Formule = Right(CStr(Trouve.FormulaR1C1), Len(CStr(Trouve.FormulaR1C1)) - 1)
     
    'Enlève le SIERREUR()
    Formule = Replace(Formule, "IFERROR", "")
     
    'Enlève le dernier argument du SIERREUR()
    Formule = Replace(Formule, ",0", "")
     
     
    'Applique le SI(ESTERREUR()...
    Trouve.FormulaR1C1 = "=SI(ESTERREUR(" & Formule & "),0," & Formule & ")"
     
    Set Trouve = Selection.FindNext(Trouve)
    Loop Until Trouve.Address = adr Or Trouve Is Nothing
    End If
     
    End Sub
    Par ailleurs, j'aurais automatiser davantage la macro, et utiliser la fonction split, pour pouvoir généraliser à toutes les fonctions commençant par sierreur (la macro écrit telle qu'elle est adaptée à une formule particulière). Je n'y suis pas parvenue.

    L'idée était la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Replace_IF_ERROR_by_IF_IS_ERROR()
     
    Dim P1 As Range
    Dim P2 As Range
    Dim Formule As String
    Dim Trouve As Range
    Dim param() As String
     
      On Error Resume Next
     
    'Selection des cellules non vides
     
      Set P1 = Cells.SpecialCells(xlCellTypeConstants, 23)
      Set P2 = Cells.SpecialCells(xlCellTypeFormulas, 23)
      On Error GoTo 0
      If Not P1 Is Nothing And Not P2 Is Nothing Then
        Union(P1, P2).Select
      ElseIf Not P1 Is Nothing Then
        P1.Select
      ElseIf Not P2 Is Nothing Then
        P2.Select
      End If
     
    'Cellules non vides selectionnees
     
    'Boucle sur les cellules selectionnees
     
    Set Trouve = Selection.Find(what:="IFERROR", LookIn:=xlFormulas, lookat:=xlPart)
    adr = Trouve.Address
     
    If Not Trouve Is Nothing Then
    Do
     
    'enlève le égale
    Formule = Right(CStr(Trouve.FormulaR1C1), Len(CStr(Trouve.FormulaR1C1)) - 1)
     
    'Enlève le SIERREUR()
    Formule = Replace(Formule, "IFERROR", "")
     
    'Scinder les deux parties de la formule
    'param = Split(Formule, ";")
     
    'Applique le SI(ESTERREUR()...
    Trouve.FormulaR1C1 = "=SI(ESTERREUR(" & param(0) & "), " & param(1) & "," & param(0) & ")"
     
    Set Trouve = Selection.FindNext(Trouve)
    Loop Until Trouve.Address = adr Or Trouve Is Nothing
    End If
     
    End Sub
    Merci beaucoup pour votre aide

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Ca dépend surtout des formules, de la condition mise en cas d'erreur... Si tu postes un classeur représentatif, je peux regarder.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut problème résolu
    j'ai finalement réussi à m'en sortir, merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Pb compatibilité excel 2003 et 2007 avec la fonction Vlookup
    Par Heflav dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/05/2011, 17h08
  2. probleme compatibilité excel 2003/2007
    Par huître dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/05/2011, 20h15
  3. Compatibilité excel 2003 / 2007
    Par pasdomidf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/07/2009, 11h55
  4. [OpenOffice][Base de données] Compatibilité Excel 2003 et openOffice 3.0
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 14
    Dernier message: 13/01/2009, 13h46
  5. UserForm de Excel 2003 à 2007
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/01/2008, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo