Bonjour à tous,
Je débute avec l’utilisation de VBA et j’ai fait quelques lignes de programme pour faire une macro avec Excel (version 2007). J’ai commencé en faisant des enregistrements de macro et en puisant à droite et à gauche. Mon programme écrit une formule SI dans des cellules et malheureusement Excel me renvoie le message d’erreur «# NOM? » et VBA le message « Erreur d’exécution 13 », » Incompatibilité de type » et je ne comprends pas pourquoi.

Mon besoin : supprimer de mon tableau les lignes inutiles. Celles-ci sont identifiées grâce à une ou deux dates, donc deux cellules différentes de la même ligne. Les dates antérieures à aujourd’hui doivent générer l’écriture d’un « x », puis à chaque fois qu’une cellule contient un « x » la ligne correspondante est supprimée.

Pour les identifier j’utilise donc la formule ci-dessous dans la colonne « D » :

=SI(C2<>"";"x";SI(B2<AUJOURDHUI();"x";""))

Cette formule dans ma macro est : "=IF(RC[-1]<>"""",""x"",SI(RC[-2]<TODAY(),""x"",""""))"

Je l’ai reprise de la macro que j’avais enregistrée.

L’imbrication respecte scrupuleusement le modèle proposé dans l’aide d’Excel.

En saisissant la formule ou en faisant un copier/coller de la formule écrite par la macro dans une autre cellule cela fonctionne parfaitement (ayant besoin de références relatives j’utilise l’apostrophe que j’ajoute en début d’écriture devant le signe = avant de faire le copier/coller pour garder les numéros des cellules. Une fois la formule collée je supprime l’apostrophe et récupère ainsi la formule issue de la macro).

Par contre, lorsque je fais glisser la cellule afin de copier la formule issue de la macro sur plusieurs lignes, l’erreur se répète pour chaque cellule vide de la colonne "C" (c'est-à-dire dans deux cas de figure sur trois possibles).

Pourtant je ne change rien par ailleurs et le format des cellules contenant la formule est « Standard ».
N’ayant trouvé aucune information traitant de ce problème je suis dans une impasse. Aussi, je serai vraiment heureux de trouver des personnes pour m’aider, et je remercie d’avance toutes celles qui auront l’amabilité de me donner un coup de main.

Ci-joint mon fichier, il contient :
- une feuille « Copies » avec les copies d’écrans au cas où cela aiderait
- une feuille « Démarche » où je présente le résultat final attendu et les résultats obtenus en mettant un point d’arrêt à la ligne n°15 « If ActiveCell.Offset(0, 3).Value = "x" Then »
- une feuille « Tri » qui est celle que j’ouvre pour lancer la macro et qui contient le résultat de la macro
- une feuille « Données » qui contient les données

Je voulais joindre un fichier contenant la macro mais celui-ci est non valide (format .xlsb) ce qui me paraît étrange pour un site dédié aux développeurs... . J'ai donc ajouté au fichier Macro_problème.xls joint une feuille "Code" qui contient mon programme.

A toutes fins utiles en voici une autre copie :

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
 Sub Tri_obsolete ()
    ' Pour lancer cette macro j'ouvre manuellement la feuille « Tri »
    ' copier des données venant de la feuille "Données"
   Sheets("Données").Select
    Range("A:A,B:B,C:C").Select
    Selection.Copy
    Sheets("Tri").Select
    Range("A1").Select
    ActiveSheet.Paste
   ' supprimer les lignes des contrat qui n'ont plus cours
   Range("A2").Select
   Do While ActiveCell <> ""
      If ActiveCell <> "" Then
            ActiveCell.Offset(0, 3).Formula = "=IF(RC[-1]<>"""",""x"",SI(RC[-2]<TODAY(),""x"",""""))"
            If ActiveCell.Offset(0, 3).Value = "x" Then
              ActiveCell.EntireRow.Delete
              Else: ActiveCell.Offset(1, 0).Range("A1").Select
            End If
        End If
    Loop
   End Sub
Merci.
Cordialement