[OK] [Macro] Formule ok sous Excel 2007 et pas dans 2003

Bonjour,

Nous cherchons à faire des découpe de cellule dans plusieurs autres.

Or, une formule dans une macro qui fonctionne parfaitement sous excel 2007, et qui ne fonctionne pas sous 2003.

Je vous colle la formule qui pose problème, en espérant que vous puissiez faire quelque chose ...

    ActiveCell.FormulaR1C1 = _
        "=IF(IFERROR(FIND(CHAR(10),RC[-2],1),0)=0,"""",RIGHT(RC[-2],LEN(RC[-2])-IFERROR(FIND(CHAR(10),RC[-2],1),0)))"

A savoir que nous obtenions bien un découpage dans chaque cellule sous 2007 et un "#NOM?" sous 2003. [problème de format de cellule ? elles sont en standard, mais j'ai eu beau tester... ca n'a rien donné de différent...]

Merci d'avance.

Bonjour,

Tout simplement la fonction française équivalent à IFERROR est SIERREUR n'existe pas en Excel 2003. Si tu veux utilise la formuleISERROR ou en français ESTERREUR.

Cdlt,

Bonjour,

ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-2],1),0)=0,"""",RIGHT(RC[-2],LEN(RC[-2])-ESTERREUR(FIND(CHAR(10),RC[-2],1),0)))"

Aucun changement... toujours la meme réponse "#NOM?"

[ et quand je teste avec ISERROR, il m'envoie une erreur, et demande de debugguer... ]

Pour info voici le code complet de cette macro :

Sub macro3()
valeurinicolb = 0
valeurstructb = 0
For i = 2 To nblignes(1, 2) + 1
Cells(i, 2) = valeurinicolb
Cells(i, 18) = valeurstructb
Range("F" & i).Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-2],1),0)=0,"""",RIGHT(RC[-2],LEN(RC[-2])-ESTERREUR(FIND(CHAR(10),RC[-2],1),0)))"

Range("E" & i).Select
ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-1],1),0)=0,RC[-1],LEFT(RC[-1],ESTERREUR(FIND(CHAR(10),RC[-1],1),0)-2))"
Range("T" & i).Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],5)"
Range("U" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-2],6,5)"
Range("V" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-3],11,11)"
Range("W" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-4],22,2)"
Next i
Columns("E:E").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("F:F").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("T:W").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
Columns("R:R").Select
    Selection.Delete Shift:=xlToLeft
Range("A1").Select
End Sub

Re,

Merci de joindre le fichier qui va avec, sinon tester ton code sera difficile. Une remarque, sur la 4è ligne de ton code :

For i = 2 To nblignes(1, 2) + 1

d'où sort nblignes(1,2) ? Si c'est une fonction, donne nous également le code. J'essayerai de tester sur les 2 versions.

Cdlt,

Bonjour,

Malheureusement, il m'est impossible de vous donner le fichier, pour cause de "grosse" confidentialité... (tableau excel de coordonnées banquaires...)

Je reste tout de même persuadé que la formule est fausse... mais pourquoi :s

Par contre, voici le reste de la macro :

Function nblignes(feuille As Integer, colonne As Integer)
feuilledebut = ActiveSheet.Index
Worksheets(feuille).Activate
i = 0
While Cells(i + 2, colonne) <> ""
i = i + 1
Wend
nblignes = i
Worksheets(feuilledebut).Activate
End Function

Sub macro1()
Cells(1, 1) = "Nb sociétés :"
Cells(1, 2) = nblignes(1, 2)
End Sub

Sub macro2()
Range("A2:Z10000").ClearContents
feuilledebut = ActiveSheet.Index
For i = 2 To nblignes(1, 2) + 1
Worksheets(1).Activate
Rows(i).Select
Selection.Copy
Worksheets(feuilledebut).Activate
Rows(i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next i
Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("R:R").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
End Sub

Sub macro3()
valeurinicolb = 0
valeurstructb = 0
For i = 2 To nblignes(1, 2) + 1
Cells(i, 2) = valeurinicolb
Cells(i, 18) = valeurstructb
Range("F" & i).Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-2],1),0)=0,"""",RIGHT(RC[-2],LEN(RC[-2])-ESTERREUR(FIND(CHAR(10),RC[-2],1),0)))"

Range("E" & i).Select
ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-1],1),0)=0,RC[-1],LEFT(RC[-1],ESTERREUR(FIND(CHAR(10),RC[-1],1),0)-2))"
Range("T" & i).Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],5)"
Range("U" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-2],6,5)"
Range("V" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-3],11,11)"
Range("W" & i).Select
ActiveCell.FormulaR1C1 = "=MID(RC[-4],22,2)"
Next i
Columns("E:E").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("F:F").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("T:W").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
Columns("R:R").Select
    Selection.Delete Shift:=xlToLeft
Range("A1").Select
End Sub

hello

un conseil en attendant la réponse : mets des commentaires dans tes programmes.

ça facilite la vie, la tienne et celle des autres programmeurs.

Amicalement

Bon dév

Re,

Ah! si c'est TOP SECRET, donne-nous au moins des explications. Quelle est la nature de donnée en Dx ? Que est-ce que tu veux ramener comme donnée en Fx et Ex. A partir de là, nous auditerons les formules. Ecoute également le conseil de Jmd, ca facilite la vie pour tous le monde.

Cdlt,

Re,

Déjà je tiens à préciser que le code n'est pas de moi, je ne suis que celui a qui on a refilé le bébé en disant "démerde toi, faut que ca marche".

Donc moi perso j'ai toujours commenté mes codes, que ce soit en c, cpp, c#, js, php, et j'en passe... mais là c'est pas moi

Ensuite, pour la confidentialité je peux vraiment pas donner le fichier.

Par contre, pour vous expliquer brièvement.

En D, nous avons du texte : "

18-20 rue Gaston Cheq
BP23

"

qui contient le caractère "10" (un caractère d'échappement).

La macro droit permettre de placer dans les E et F les morceaux gauche et droite de ce caractère.

Ex :

D                                             E             F
test (caract 10) test2

Doit devenir

D                           E                F
                           test           test 2

Voila voila.

Et evidemment, a partir de la macro que j'ai donné.

Merci a vous

up

Toujours personne ?

re hello

efface les données confidentielles et upload ton fichier.

mais avant, ajoute les fameux commentaires, c'est mieux pour toi et tous ceux qui veulent t'aider (ne fais pas comme ton prédescesseur, corrige ses mauvaises habitudes, impose les tiennes dans ta boutique aussi)

5classeur1.zip (23.74 Ko)

Bonjour,

1/ je ne peux pas effacer les données confidentielles vu que ce sont TOUS des champs de comptes bancaires.

2/ je ne peux pas mettre de commentaires, ce ne sont pas MES macros

3/ je ne remplace personne, je suis juste le responsable informatique à qui on a demandé de corriger un fichier, et qui n'y connait rien aux macro excel parce qu'il est plutot dans le réseau ou la prog via c, cpp, c#.

Merci

re

  • alors remplace les vrais n° par des nombres bidons
  • pour les commentaires, de toutes façon les gens qui peuvent t'aider vont faire de tête le boulot à la place de ton entreprise (pas glop)

Bonjour à tous

Bien que ne connaissant pas Excel 2007, je suis déjà tombé sur IFERROR.

Il me semble (de mémoire) qu'il y a une différence importante entre ESTERREUR et IFERROR, en ce sens que IFERROR ne comprend pas l'argument FAUX de ESTERREUR.

Toujours de mémoire, donc, cela reste à contôler IFERROR correspondrait plus à SI(ESTERREUR que à ESTERREUR.

Pour revenir au fichier, inutile de l'envoyer:

Tu ouvres un nouveau fichier.

Tu mets dans une cellule une donnée correspondante à celle que tu testes et tu expliques le raisonnement de la formule, du style "Je veux que si la cellule machin contient le caractère truc, la formule me renvoie tel résultat."

A partir de là, tu verras surement arriver la solution.

Cordialement

Re,

Range("F" & i).Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-2],1),0)=0,"""",RIGHT(RC[-2],LEN(RC[-2])-ESTERREUR(FIND(CHAR(10),RC[-2],1),0)))"

Range("E" & i).Select
ActiveCell.FormulaR1C1 = _
        "=IF(ESTERREUR(FIND(CHAR(10),RC[-1],1),0)=0,RC[-1],LEFT(RC[-1],ESTERREUR(FIND(CHAR(10),RC[-1],1),0)-2))"

Remplace les lignes précédentes par les lignes suivantes :

Range("F" & i).Formula = _
"=IF(FIND(CHAR(32),RC[-2]),RIGHT(RC[-2],LEN(RC[-2])-FIND(CHAR(32),RC[-2])),"""")"
Range("E" & i).Formula = _
        "=IF(FIND(CHAR(32),RC[-1]),LEFT(RC[-1],FIND(CHAR(32),RC[-1])-1),RC[-1])"

Cdlt,

PS : Quand tu utilises la propriété "Formula" d'un objet "Range", tu n'est pas obligé d'utiliser les fonctions en anglais. Tu peux écrire tes formules en français, ça marchera parce que c'est purement du texte entre les double quotes que le VBA interprète et inscrit dans les cellules indiquées.

Par contre, si tu veux simplement afficher le résultat et non pas la formules dans les cellules, il faut passer par les formules en anglais.

Bonjour,

Un grand merci à vous, même si, au final, ma Direction préfère acheter le dernier office pour la compatibilité, et pour la "nouveauté".

Merci quand même de vos efforts

Rechercher des sujets similaires à "macro formule 2007 pas 2003"