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
code vba, utilise le décalage pour contrôle tes IF .. end if par exemple, dans ton fichier il manque le dernier end if
pourquoi tous ces if avec les mêmes conditions, un seul suffit ou alors j'ai mal lu
pas eu le temps de regarder le reste A SUIVRE

Nota: je serais curieux de voir le code qui fonctionne, il doit être plus propre si c'est du PierreJean
 

Pièces jointes

  • erreur-dans-adaptation-dune-macro-qui-marche-testtab.xlsm
    27.8 KB · Affichages: 23
Dernière édition:

stephsteph

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

Bonjour Eric S,
Excuse-moi mais je confirme, la macro originale est bien de Pierre Jean et il l'a faite spécialement pour moi (je veux dire mes beaux yeux!).
Il ne manque pas de end if en particulier à la fin pour le dernier if.
Ce qui change c'est que bien sûr dans la macro de Pierre Jean à chaque ligne les conditions ne concerne pas toujours une seule colonne (ici la colonne 41).
Dans la macro de Pierre Jean, à chaque if correspond une colonne différente et avec des conditions souvent plus complexes (et avec <>).

C'est clair que je me suis trompée dans les conditions...
Ce que je n'explique pas c'est l'erreur 70 de permission, mais ça tu ne peux pas le voir c'est dans le gros fichier Xls.
Comme je l'ai dit, remettre toujours la même condition c'est lourd, mais je fais comme je peux.

J'espère que tu pourras tout de même m'aider.

Désolée de tout ce bins que j'ai généré, faute de connaissance approfondie.

Steph
 

ERIC S

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

Bonjour

j'avais remis en forme et debuggé le TESTAB3
je viens de comparer TESTAB1 (je l'ai remis en forme et en commentaire je t'ai mis les différences. il ne semble plus bugger, il fait des choses (génère un php), de là à dire que c'est le bon résultat ...
pas regardé le TESTAB2 , il faut bien que tu joues

Sinon, effectivement si les critères évoluaient, je comprends tous les if. PierreJean les aurait forcément enlevés sur ta demande actuelle
 

Pièces jointes

  • 331475d1427285262-erreur-dans-adaptation-dune-macro-qui-marche-erreur-dans-adaptation-dune-macr.xlsm
    29.1 KB · Affichages: 18

stephsteph

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

Bonjour Eric S, bonjour le forum,

Merci de ton aide!
Avec la condition ="$" et testlab je n'obtiens qu'un fichier vide (0 octet).
Avec les conditions ="<>" proche de la macro de Pierre Jean (testlab3) j'obtiens un fichier correspondant à mes specs et dont le titre comprend le contenu de LC(87).
Mais 1 seul fichier (correspondant à la 1ère ligne) et pas plusieurs (pour les lignes en dessous).
Et le fichier généré n'aurait pas dû l'être car la 1ère ligne de LC(41) contient du vide.
C'est seulement la ligne 2 qui contient $ (et les lignes 6, 10, 11, 13, 27) dans l'exemple.
Donc c'est bien un problème de condition et de boucle car si le programme VBA lit la macro (pas de bug) il ne la comprend pas et ne l'exécute pas correctement.
Désolée !

A+

Steph
 

ERIC S

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

Re

comme je ne connais pas ton application, difficile de savoir ce que tu veux !!!!
J'ai donc regardé les causes probables de tes erreurs sans plus

tu as 3 macros, : des essais ? des besoins différents ?

si tu joins un fichier allégé avec quelques données (quelques lignes de données) et le résultat que tu en attends, je pourrais (ou un autre) peut-être comprendre et t'expliquer
 

stephsteph

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

Bonjour Eric S, bonjour le forum, bonjour Pierre Jean

Tout d'abord il faut que je présente toutes mes excuses à Pierre Jean.
J'ai vu hier qu'il est intervenu sur un autre fil ici même et cela m'a paru bizarre.
Donc j'ai vérifié sur ma boîte mail et... il avait répondu le jour même, mais Yahoo avait mis son mail aux oubliettes.
Incompréhensible.
Donc il n'est pas malade et le salue amicalement (et je vais lui répondre).
Eric S, je précise pour clarifier.
La macro de Pierre Jean et son adaptation bien plus simple revient dans une colonne (41) à vérifier si elle contient "$" ou ce qui revient au même si elle ne contient ni "" (rien) ni @.
A partir de là elle déroule des instructions qui se finalise^nt dans une page php, puis elle descend d'une ligne dans la colonne (41) jusqu'à la fin, où elle s'arrête.
Avec la macro testab3, elle fait bien les instructions sans bug mais pour la 1ère ligne seulement et elle le fait faux puisque la1ère ligne contient du vide (mais j'ai joué en faisant des tests.
Merci de ton aide
Steph
 

stephsteph

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

Non le message que j'avais reçu était juste une réponse amicale d'ouverture (car le contact précédent remontait à plus de 2 ans).
Maintenant je lui ai envoyé le mail de réponse avec l'adresse de ce fil.
En y réfléchissant je me suis demandée si le souci ne serait pas réglé en indiquant un nombre de lignes à scruter dans la colonne 41. Dans la macro de Pierre Jean il y avait des conditions complexes concernant plusieurs colonnes.
Ici dans la colonne 41 la ligne 1 est vide, puis il y a des vides à d'autres lignes de cette colonne. Peut-etre que cela buggue la macro.
Merci de ton aide (amis si tu penses que c'est mieux de faire autrement...)

Steph
 

ERIC S

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

Re

un petit problème : les lignes suivantes

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)

regardent la colonne A où il n'y a rien dans ton exemple déjà je pense qu'il faudrait prendre la colonne 41...
 

ERIC S

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

Re

j'ai reproduit ton erreur Permission refusée

avec ton set, tu cherches à créer 2 fois le même fichier (il y a plusieurs lignes Ackerman)

que veux-tu faire si plusieurs lignes?

Sinon, exemple fichier avec module 3 seul
 

Pièces jointes

  • adaptation-dune-macro-qui-marche-erreur-dans-adaptation- (1).xlsm
    26.4 KB · Affichages: 17
Dernière édition:

stephsteph

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

Bonjour Eric S,
Ce WE j'ai testé et cela marche bien avec tes changements dans le dernier fichier attaché.
Vraiment je ne comprend pas pourquoi il fallait mettre le colonne AO (=41) car dans la macro de Pierre-Jean il avait mis XY car cela correspondait à la dernière colonne possiblement remplie 1 fois et pas une collone concernée par des if.
Bon je ne vais pas me torturer puisque cela marche! (une explication serait utile car c'est une macro magique que j'utilise souvent... je gère directement ou pas plusieurs URL).
Merci!
Je me demande pourquoi j'ai passé des heures sans y arriver.
Désolée.

Juste une petite question pour une ligne d'instructions nouvelle, type:
If tablo(n, 41) = "$" Then
tabres(L) = "<title>XXXXX.INFO - " & tablo(n, 93) & "</title>"

Je voudrais que la macro aille chercher (plutôt que le contenu d'une cellule) le contenu d'un champ déjà nommé avec le même nom contenu dans tablo(n, 87) et prenne le texte contenu dans ce champ.
J'espère que je suis claire.
C'est plus futé, peut-être que cela va t'amuser.
A+
Steph
 

stephsteph

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

Ah Pierre Jean super.
Là je ne suis pas encore aller visiter ma boîte avant de répondre ici, mais je viens de le faire et j'ai vu ton mail.
Comme Eric S a répondu, j'ai préféré ne pas le laisser tomber!
Bien sûr si tu as les explications et la soluce de la petite question en plus, tu es le bienvenue.
Expert oblige !
Contente de te voir en bonne santé (d'après la photo de ton alias... je plaisante)
Amitiés
Steph
 

Statistiques des forums

Discussions
312 158
Messages
2 085 829
Membres
102 994
dernier inscrit
snoopy70