Bonjour à toutes et à tous !
J'ai un pitit soucis avec mon code que je viens d'ecrire pour une macro Excel (office 2003).
Ma maccro me permet de créer des fichiers RTF à partir d'un fichier excel contenant plusieurs commandes.
En gros, ce fichier comprend x commandes qui doivent apres execution de ma maccro générer x fichiers RTF "bon de commande".
Mon fichier excel est fait de cette maniere : une ligne commencant par C désigne le début d'une commande, les lignes suivantes commencet par p et désignent les produit de la commande.
Ca ressemble à ça , les asterisques représentant les colonnes suivantes
Mon code se comporte comme ceci pour générer les fichiers :C *************
P *************
P *************
P *************
C *************
P *************
P *************
C *************
P *************
etc........
* je débute une boucle FOR
* je charge un fichier RTF "modele" contenant des balises et je copie ce fichier e le renommant en rapport avec la commande
* je parcours mon fichier excel et je remplace les balises par les valeurs des cellules correspondantes, jusqu'à ce que j'arrive à la commande suivante (lettre C dans la 1ere collonne)
* je recommence la boucle pour crée un autre fichier pour la commande suivante, jusqu'à ce que j'arrive à la fin de mon fichier.
Malgré quelque petits problemes innérants à mon inexpérience de VBA, mon code fonctionne à merveille --> j'obtient autant de fichiers que de commandes, et les donnnées sont correctes... seul soucis : j'ai ma premiere ligne de commande qui contient 4 colonnes vide de + que la normale (5 col. par ligne).
Voilà un apercu de mon fichier modele avec les balises :
Et un fichier que j'obtiens apres exec. de la maccro :
J'obtiens donc desfichiers corrects, hormis les 4 colonne en trop (fleche rouge, en dehors du champs visible sur mon screenshoot) sur la premiere ligne.
Je vous joins un bout de code, si ça peut vous donner une idée..
La balise <newline> que vous voyez dans le modele est remplacée par une nouvelle ligne du tableau + une balise <newline>, sauf si c'est la derniere ligne de la commande.
La variable strContent contient le fichier en cours (donc copie du modele si vous avez suivi mon raisonement).
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 If Range("A" & i + 1).Value <> "P" Then 'si c'est le dernier produit de la commande, la prochaine valeur sera C ou sera nulle (fin de fichier) 'on met la derniere ligne du tableau des commandes et un saut de ligne sReplace = "\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx1276\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx5812\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6804\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx8364\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx9476\pard\intbl\nowidctlpar\fs16 " & sRef & "\fs20\cell\fs16 " & sDesi & "\fs20\cell " & sQte & "\cell " & sPU & "\cell " & sPT & "\cell\row\pard\nowidctlpar\qc\par" strContent = Replace(strContent, "<newline>", sReplace) 'on écrit le fichier et on le ferme File.Write strContent File.Close Else 'sinon on place la ligne du tableau sans fin de tableau + la balise, qui sera remplacer lors du prochain passage de la boucle sReplace = "\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx1276\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx5812\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6804\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx8364\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx9476\pard\intbl\nowidctlpar\b0\i0\fs16 " & sRef & "\fs20\cell\fs16 " & sDesi & "\fs20\cell " & sQte & "\cell " & sPU & "\cell " & sPT & "\cell\row\trowd\trgaph70\trleft-70\trqc\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl70\trpaddr70\trpaddfl3\trpaddfr3" & "<newline>" strContent = Replace(strContent, "<newline>", sReplace) End If
Voilà, ça n'a rien d'extraordinaire ni de peut etre super propre niveau code, mais ça fonctionne ().
Si vous avez un idée d'où peut venir ce probleme de colonne vide qui se rajoute à la 1ere ligne, je suis preneur de tout conseils et avis !
Merci !![]()
Partager