Erreur dans adaptation d'une macro qui marche

stephsteph

XLDnaute Occasionnel
Bonjour à tous,

Je m'arrache les cheveux (çà va j'en ai trop).
C'est une macro que Pierre Jean avait aimablement construite pour un autre fichier (un autre projet) et qui marche toujours très bien.
En premier je lui ai envoyé un message en tant que bouteille à la mer, mais pas de réaction (j'espère qu'il va bien, vu qu'il n'est plus tout jeune).
Aussi je vous soumet...
Je n'ai quasiment rien changé, j'ai juste changé les contenus html à copier.
Mais comme j'avais déjà une boucle, j'ai posé ma condition à chaque fois (c-a-d à chaque début d'instruction).
Le principe de la macro est de vérifier le contenu d'une colonne (41), puis en fonction de la condition d'écrire des instructions dans un fichier texte que l'on enregistre en format php, puis on passe à la ligne suivante

Si j'exécute la macro sur le fichier réel, cela plante avec une :
Erreur d'exécution 70 Permission refusée
sur le code suivant surligné en jaune
Set a = fs.CreateTextFile(ThisWorkbook.Path & "\" & "azcomp-" & tablo(n, 87) & ".php", True)

En fait j'ai scruté Internet mais cette erreur est assez générique et je ne vois pas le souci.

En pratique, indépendamment de cette erreur '70', la macro réalise 2 fichiers en .php (et seulement 2 correspondant aux 2 premières lignes), mais j'ai dû me planter dans la condition, car au lieu de continuer son chemin quand elle rencontre un contenu différent de "$", en fait elle considère que c'est bon avec toute sorte de caractère (ici, le vide ou @)!


En fichier attaché un fichier testtab.xlsm (je n'ai copié que les colonnes nécessaires à la macro) et je copie la macro ci-après:
Code:
Option Base 1
Sub testtab()
debut = Timer
Dim tabres
Dim tablo
Dim fs As Object
Dim a As Object
Dim n As Integer
Dim m As Integer
tablo = Sheets("Feuil1").Range("A1:XY" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
tabres = Sheets("Feuil1").Range("A1:B" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
ReDim tabres(500)
L = 1
If tablo(n, 41) = "$" Then
  tabres(L) = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<html><head><meta http-equiv=""Content-Type"" content=""text/html;charset=ISO-8859-1"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<meta name=""Description"" CONTENT=""Bienvenue sur le Site"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<meta name=""author"" CONTENT=""Steph Demaitre"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<meta name=""Copyright"" CONTENT=""S.D., 2005-<?php echo date(""Y"");?>"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<title>XXXXX.INFO - " & tablo(n, 93) & "</title>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<link rel=""stylesheet"" type=""text/css"" href=""xxxxxcom.css"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<script type=""text/javascript"" src=""sorttable.js""></script>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<script type=""text/javascript"" src=""PopupCentrer.js""></script>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "</head><body bgcolor=""#FFCC00"" text=""#000065""> <a name=""top""></a> <?php include(""header.php""); ?><? include 'mc-google-ad.txt'; ?> <center><p><i> <? include 'listemenualfa.txt'; ?> </i></p></center><hr><br>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<H1 align=""center"">"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "<?php include(""footer-acomp-catalo.php""); ?></body></html>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
  tabres(L) = "</div><div id=""lower""><?php include 'aaaz-footer-base.txt'; ?></div></div>"
L = L + 1
End If
If tablo(n, 41) = "$" Then
    tabres(L) = "</body></html>"
    L = L + 1
End If
If tablo(n, 41) = "$" Then
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(ThisWorkbook.Path & "\azcomp-" & tablo(n, 87) & ".php", True)
L = L + 1
End If
For m = LBound(tabres) To UBound(tabres)
  If tabres(m) <> "" Then a.WriteLine (tabres(m))
Next m
Next n
   a.Close
End Sub
Ici pas d'erreur '70', mais la macro bugge aussi. J'ai
Erreur d'exécution '91'
variable objet ou variable de bloc with non définie
avec surligné en jaune:
a.Close
pourtant, 'a' est bien définie en Dim object

J'ai cru que c'était parce que j'avais mal formulé la condition avec un '=' en écrivant:
If tablo(n, 41) = "$" Then
Et je suis revenue à la formulation de PierreJean avec
If tablo(n, 41) <> "$" Then (et en inversant les termes de la condition)
mais l'exécution de la macro testtab2 plante, il me dit erreur de compilation 'next sans for' en surlignant en bleu 'next' de next n (pourtant il y a bien un 'for n' au début de la macro)
Et pareil, avec la macro testatb3 avec une double condition!
Bon je sens que je vais m'énerver et que je vais faire n'importe quoi, mais cela fait 5 heures que je suis dessus.
Par ailleurs, je sais que poser la condition au début de chaque instruction, c'est relou, mais je sais pas mieux faire à ce stade.
Donc à l'aide!
Merci d'avance

Steph
 

Pièces jointes

  • testtab.xlsm
    23.6 KB · Affichages: 23

ERIC S

XLDnaute Barbatruc
Re : Erreur dans adaptation d'une macro qui marche

Bonjour à vous

je vois que tu as retrouvé PierreJean
De mon côté pas mal surbooké cette semaine donc peu réactif. Donc PierreJean, n'hésite pas en cas de problème
 

Statistiques des forums

Discussions
311 735
Messages
2 082 023
Membres
101 873
dernier inscrit
excellllll