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 :
Merci.
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
Cordialement
Partager