Défaillance irrémédiable

Résolu
Dark-chyper Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 20 décembre 2013 - 18 déc. 2013 à 18:07
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 20 déc. 2013 à 18:45
Bonjour,
je suis en train de finaliser un script c# pour le logiciel de montage vidéo vegas pro.
Le but de ce script est de rassembler l'ensemble des fichiers d'un projet, qui peuvent être sur différentes sources, en un seul et même endroit comme suit :

dossier_du_projet>dossier_medias>mes_medias
>fichier du projet

Les étapes du scripts sont :
_définition de l'emplacement de sauvegarde (avec moul vérifications)
_supressions des médias non utilisé dans le projet
_copies de tous les médias dans le dossier des médias
_remplacement des médias copiés (avec le nouveau chemin d'acces)

Le script fonctionne très bien sauf pour la réimportation des séquences d'images ( le cas assez complexe).

voici le code :
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;
using System.IO;
using System.Diagnostics;
using System.Drawing;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Windows.Forms;
using Sony.Vegas;

public class EntryPoint
{
static Vegas myVegas;

//declaration des variables boite de dialogue
String dirToCopy = "D:\\test"; // the directory to copy files
bool waste = false; // delete unuse files from the bin ?
bool okToGo = false;

double frameRate = 25;

TextBox copyDirBox = new TextBox();
Button browseButton = new Button();
Button okButton = new Button();
Button cancelButton = new Button();
CheckBox eraseCheck = new CheckBox();

//variables pour le move
String CurrentProjectName = "";

static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();
public List<FicheMedia> mediaPool = new List<FicheMedia>();

public class FicheMedia
{
public readonly bool isSequence = false;
public readonly String oldPath = null;
public readonly String newPath = null;
public readonly int nbrFrame = 0;
public readonly String first = null;
public readonly String extension = null;
public readonly String epure = null;

public FicheMedia(bool a, String b, String c, int d,String e, String f,String g)
{
this.isSequence = a;
this.oldPath = b;
this.newPath = c;
this.nbrFrame = d;
this.first = e;
this.extension = f;
this.epure = g;
}
}

// script start
public void FromVegas(Vegas vegas)
{
myVegas = vegas;
int numberOfMedia = myVegas.Project.MediaPool.Count;
int numberOfErase = 0;

//dialog box
do
{
if (DialogResult.OK != DoDialog())
{
return;
}
} while (!okToGo);

CurrentProjectName = FindTheName(myVegas.Project.FilePath.ToString());
//delete
if (waste)
{
numberOfErase = EraseWithProgress(numberOfErase, numberOfMedia);
}
//copy files
numberOfMedia = myVegas.Project.MediaPool.Count;
if (numberOfMedia > 0)
{
MoveMedia(numberOfMedia, numberOfErase);
try
{
myVegas.SaveProject(dirToCopy + CurrentProjectName + ".rassembly" + ".veg");
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message + "\nArret du script sans sauvegarde");
return;
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message + "\nArret du script sans sauvegarde");
return;
}

}
else { MessageBox.Show("No media to move, script break!"); }
}
//dialog to specify folder and options
DialogResult DoDialog()
{
Form form = new Form();
form.AutoScaleMode = AutoScaleMode.Font;
form.AutoScaleDimensions = new SizeF(6F, 6F);
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.StartPosition = FormStartPosition.CenterParent;
form.MaximizeBox = false;
form.MinimizeBox = false;
form.HelpButton = false;
form.ShowInTaskbar = false;
form.Text = "Rassembler les fichiers";
form.AutoSize = true;
form.AutoSizeMode = AutoSizeMode.GrowAndShrink;



//Select folder
GroupBox groupBox1 = new GroupBox();
groupBox1.Text = "Select a folder to save files in bin";
groupBox1.Location = new System.Drawing.Point(13, 12);
groupBox1.Size = new System.Drawing.Size(450, 46);
groupBox1.TabIndex = 0;
groupBox1.TabStop = false;

// copyDirBox

copyDirBox.Location = new System.Drawing.Point(6, 19);
copyDirBox.Name = "copyDirBox";
copyDirBox.Size = new System.Drawing.Size(381, 20);
copyDirBox.TabIndex = 1;
copyDirBox.Text = dirToCopy;
// browseButton

browseButton.Location = new System.Drawing.Point(390, 19);
browseButton.Name = "browseButton";
browseButton.Size = new System.Drawing.Size(26, 20);
browseButton.TabIndex = 2;
browseButton.Text = "...";
browseButton.UseVisualStyleBackColor = true;

groupBox1.Controls.Add(copyDirBox);
groupBox1.Controls.Add(browseButton);
form.Controls.Add(groupBox1);

//Options
GroupBox groupBox2 = new GroupBox();
groupBox2.Text = "Options";
groupBox2.Location = new System.Drawing.Point(13, 70);
groupBox2.Size = new System.Drawing.Size(450, 46);
groupBox2.TabIndex = 0;
groupBox2.TabStop = false;

//eraseCheck

eraseCheck.AutoSize = true;
eraseCheck.UseVisualStyleBackColor = true;
eraseCheck.Location = new System.Drawing.Point(13, 20);
eraseCheck.Size = new System.Drawing.Size(16, 16);
eraseCheck.Text = "Delete unuse files in bin";
eraseCheck.Name = "eraseUnuse";
eraseCheck.Checked = false;

groupBox2.Controls.Add(eraseCheck);
form.Controls.Add(groupBox2);

/* ******** creation des boutons finaux de form ******** */
FlowLayoutPanel buttonPannel = new FlowLayoutPanel();
buttonPannel.FlowDirection = FlowDirection.RightToLeft;
buttonPannel.Location = new System.Drawing.Point(300, 150);
buttonPannel.Size = new System.Drawing.Size(163, 30);
buttonPannel.AutoSize = true;
buttonPannel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
buttonPannel.TabIndex = 4;

cancelButton.Text = "Cancel";
cancelButton.FlatStyle = FlatStyle.System;
cancelButton.DialogResult = DialogResult.Cancel;
buttonPannel.Controls.Add(cancelButton);
form.CancelButton = cancelButton;
cancelButton.Anchor = AnchorStyles.Left;


okButton.Text = "OK";
okButton.FlatStyle = FlatStyle.System;
okButton.DialogResult = DialogResult.OK;
buttonPannel.Controls.Add(okButton);
form.AcceptButton = okButton;
okButton.Anchor = AnchorStyles.Right;


form.Controls.Add(buttonPannel);

//activate the browse button
browseButton.Click += HandleBrowseoutputDir;

DialogResult result = form.ShowDialog(myVegas.MainWindow);
result = VerifDialog(result, form);
dirToCopy = copyDirBox.Text;
if (!dirToCopy.Trim().EndsWith(@"\"))
{ dirToCopy += "\\"; }
return result;


}
//action du bouton browse
void HandleBrowseoutputDir(Object sender, EventArgs args)
{
string newDir = null;
myVegas.FileUtilities.SelectDirectoryDlg(myVegas.MainWindow.Handle, "Output Folder", copyDirBox.Text, true, out newDir);
if (!String.IsNullOrEmpty(newDir))
{
copyDirBox.Text = newDir;
}
}

DialogResult VerifDialog(DialogResult result, Form form)
{
do
{
if (DialogResult.OK == result)
{
if (!String.IsNullOrEmpty(copyDirBox.Text))
{
FileIOPermission f = new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.Write, copyDirBox.Text);
try
{
f.Demand(); // try to get the read & write permissions of the folder
}
catch (SecurityException s)
{
Console.WriteLine(s.Message);
MessageBox.Show(s.Message + "\nChoose another folder, please !");
result = form.ShowDialog(myVegas.MainWindow);
result = VerifDialog(result, form);
}
//if script is here, we can read and write the folder so continue
if (!Directory.Exists(copyDirBox.Text))
{
try
{
System.IO.Directory.CreateDirectory(copyDirBox.Text);// try to create the folder
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}
}


if (eraseCheck.Checked)
{ waste = true; }
okToGo = true;

}
else // if copyDirBox.Text is Null or Empty
{
MessageBox.Show("Select a folder to save files, please!");
result = form.ShowDialog(myVegas.MainWindow);
result = VerifDialog(result, form);
}
}
} while (!okToGo);
return result;
}

int EraseWithProgress(int numberOfErase, int numberOfMedia)
{
String[] tablePath = new String[numberOfMedia];
int count = 0;
foreach (Media media in myVegas.Project.MediaPool)
{
if (media.UseCount == 0)
{
tablePath[count] = media.FilePath;
count++;
}
}
foreach (String filename in tablePath)
{
if (!string.IsNullOrEmpty(filename))
{
try
{
myVegas.Project.MediaPool.Remove(filename);
numberOfErase += 1;
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}
}
}
return numberOfErase;
}

void MoveMedia(int numberOfMedia, int numberOfErase)
{
String fullNewPath = dirToCopy + "Medias\\";
if (!Directory.Exists(fullNewPath))
{
System.IO.Directory.CreateDirectory(fullNewPath);
}
String affichage = "";
int nombre = 0;
foreach (Media media in myVegas.Project.MediaPool)
{
affichage += nombre + ". "+ media.KeyString;
if (media.IsImageSequence())
{
affichage += " TRUE !";
}
affichage += "\n\n";
nombre++;
}
affichage += "-------------------------------------------\n\n";

foreach (Media media in myVegas.Project.MediaPool)
{
if (media.IsImageSequence())
{
String[] sequence = GetInfoSequence(media);
// sequence[0] = first | full name of the first frame
// 1 = pathName | the directory path where the original image sequence is located
// 2 = nbrZero | number of numbers in the increment of the image sequence
// 3 = nbreFrame | number of frame
// 4 = epure | the name of the sequence without numbers and extension
// 5 = numberStart | number of the first frame (cg 0001)
// 6 = extension | the extension of files
// 7 = tab[tab.Length - 2 ] | the name of the directory where original image sequence is located
// ########################################################################################################
//MessageBox.Show(sequence[0]+"\n\n"+sequence[1]+"\n\n"+sequence[2]+"\n\n"+sequence[3]+"\n\n"+sequence[4]+"\n\n"+sequence[5]+"\n\n"+sequence[6]+"\n\n"+sequence[7]);
System.IO.Directory.CreateDirectory(fullNewPath + sequence[7]);
int j = Convert.ToInt32(sequence[5]);
do
{
try
{
System.IO.File.Copy(sequence[1] + sequence[4] + j.ToString().PadLeft(Convert.ToInt32(sequence[2]), '0') + "." + sequence[6], fullNewPath + sequence[7] + "\\" + sequence[4] + j.ToString().PadLeft(Convert.ToInt32(sequence[2]), '0') + "." + sequence[6], true);
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}
j++;
} while (j != Convert.ToInt32(sequence[3]));

FicheMedia fiche = new FicheMedia(true, sequence[1], fullNewPath + sequence[7] + "\\", Convert.ToInt32(sequence[3]),sequence[0],sequence[6],sequence[4]);
mediaPool.Add(fiche);//saving String[] int the list mediaPool
}
else //if this is not an image sequence
{
String[] tab = media.FilePath.Split('\\');
String fileName = tab[tab.Length - 1];
String oldMedia = media.FilePath.ToString();
System.IO.File.Copy(media.FilePath.ToString(), fullNewPath + fileName, true);
FicheMedia fiche = new FicheMedia(false, oldMedia, fullNewPath + fileName, 0,null,null,null);
mediaPool.Add(fiche);
}
}
foreach (FicheMedia fiche in mediaPool)
{
MessageBox.Show(affichage + "==> " + fiche.oldPath + fiche.first + "\n\n" + fiche.newPath+" "+fiche.nbrFrame+" "+fiche.isSequence);
Media currentMedia = myVegas.Project.MediaPool.Find(fiche.oldPath+fiche.first);
if (!fiche.isSequence)
{
try
{
currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddMedia(fiche.newPath));
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}
}
else
{
string searchPattern = fiche.epure+"*." + fiche.extension;
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo theRoot = new System.IO.DirectoryInfo(fiche.newPath);//on se place dans le dossier du media a verifier
try
{
files = theRoot.GetFiles(searchPattern, SearchOption.TopDirectoryOnly);//on obtient les fichiers du dossiers correspondant au pattern
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}
try
{
currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddImageSequence(fiche.newPath+fiche.first, fiche.nbrFrame, frameRate));
myVegas.Project.MediaPool.RemoveUnusedMedia();
}
catch (UnauthorizedAccessException e)
{ log.Add(e.Message); }
catch (System.IO.DirectoryNotFoundException e)
{ Console.WriteLine(e.Message); }

/*try
{

currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddImageSequence(fiche.newPath.ToString(), fiche.nbrFrame, frameRate));
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}*/
}
numberOfErase = EraseWithProgress(numberOfErase, numberOfMedia);
}


}
String[] GetInfoSequence(Media media)
{
String[] tab = media.FilePath.Split('\\');
String[] firstName = tab[tab.Length - 1].Split('-');
String[] thesplit = media.KeyString.Split('[');

String first = firstName[0]; // name of the first frame
String[] path = media.FilePath.Split('\\');
String pathName = ""; // path to the first frame

int a = 0;
do
{
pathName += path[a] + "\\";
a++;
} while (a != path.Length - 1);

int nbrZero = Convert.ToInt32(thesplit[2].Split(']')[0]); // the number of numbers to the sequence : name_###.ext => 3
int nbreFrame = Convert.ToInt32(thesplit[1].Split(']')[0]); // number of frame of the sequence
String[] destruct = first.Split('.');
String extension = destruct[destruct.Length - 1];
String epure = "";
if (destruct.Length >= 3)//in case of severals '.' in the name
{
for(int i = 0; i == destruct.Length; i++)
{ epure += destruct[i]; }
}
else { epure = destruct[0]; }//whithout any '.' than the '.' of the extension
int numberStart = Convert.ToInt32(epure.Substring(epure.Length - nbrZero, nbrZero));//the substring delete the begining of the name (epure) to get only the number
epure = epure.Substring(0, epure.Length - nbrZero);

String[] sequence = { first, pathName, nbrZero.ToString(), nbreFrame.ToString(), epure, numberStart.ToString(), extension, tab[tab.Length - 2] };
return sequence;

}
String FindTheName(String fullProjectPath)
{
String[] antislash = fullProjectPath.Split('\\'); // windows systems
int i = antislash.Length - 1;
String[] antiantislash = antislash[i].Split('/'); // unix systems
int j = antiantislash.Length - 1;
String[] fileParts = antiantislash[j].Split('.');
int l = fileParts.Length - 1;
for (int k = 0; k < l; k++)
{
CurrentProjectName += fileParts[k];
if (k != l - 1)
{ CurrentProjectName += "."; }
}
return CurrentProjectName;
}
}

le problème se situe par ici:
else
{
string searchPattern = fiche.epure+"*." + fiche.extension;
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo theRoot = new System.IO.DirectoryInfo(fiche.newPath);//on se place dans le dossier du media a verifier
try
{
files = theRoot.GetFiles(searchPattern, SearchOption.TopDirectoryOnly);//on obtient les fichiers du dossiers correspondant au pattern
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}
try
{
currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddImageSequence(fiche.newPath+fiche.first, fiche.nbrFrame, frameRate));
myVegas.Project.MediaPool.RemoveUnusedMedia();
}
catch (UnauthorizedAccessException e)
{ log.Add(e.Message); }
catch (System.IO.DirectoryNotFoundException e)
{ Console.WriteLine(e.Message); }

/*try
{

currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddImageSequence(fiche.newPath.ToString(), fiche.nbrFrame, frameRate));
}
catch (UnauthorizedAccessException e)
{
log.Add(e.Message);
MessageBox.Show(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
MessageBox.Show(e.Message);
}*/
}

Il y a une partie du code qui est commentée, c'était une variante.

Lors de l'excecution j'obtient ce message d'erreur :
System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.Runtime.InteropServices.COMException (0x8000FFFF): Défaillance irrémédiable (Exception de HRESULT : 0x8000FFFF (E_UNEXPECTED))
à Sony.Vegas.IMediaCOM.AddImageSequence(String path, Int32 frameCount, Double fps, Boolean addToProperBin, UInt32& mediaID, MetaPathType& metaPathType)
à Sony.Vegas.MediaPool.AddImageSequence(String path, Int32 imageCount, Double fps, Boolean addToSelectedBin)
à Sony.Vegas.MediaPool.AddImageSequence(String path, Int32 imageCount, Double fps)
à EntryPoint.MoveMedia(Int32 numberOfMedia, Int32 numberOfErase)
à EntryPoint.FromVegas(Vegas vegas)
--- Fin de la trace de la pile d'exception interne ---
à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
à Sony.Vegas.ScriptHost.ScriptManager.Run(Assembly asm, String className, String methodName)
à Sony.Vegas.ScriptHost.RunScript(Boolean fCompileOnly)

Des idées ?

5 réponses

Dark-chyper Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 20 décembre 2013
20 déc. 2013 à 10:44
Effectivement, ca fait un gros pavé à lire, je vais essayer de réduire cela.

Mon Problème se situe ici :
currentMedia.ReplaceWith(myVegas.Project.MediaPool.AddImageSequence(fiche.newPath+fiche.first, fiche.nbrFrame, frameRate));
// AddImageSequence importe dans le chutier la séquence d'image 
// comme un seul et même média;
// AddImageSequence(string path, int imageCount, double fps)
// ReplaceWith remplace les occurences du média dans la 
// Timeline par un autre media
// dans mon cas currentMedia sera remplacé par ce qui arrive du AddImageSequence()




currentMedia se difinit comme suit :
Media currentMedia = myVegas.Project.MediaPool.Find(fiche.oldPath+fiche.first);



fiche se définit comme suit :
 FicheMedia fiche = new FicheMedia(bool isSequence, String oldPath, String newPath, int nbrFrame,String first,String extension,String epure);
// isSequence => pour savoir si on a une sequence d'images;
// oldPath => contient le chemin d'acces de l'emplacement d'origine du fichier;
// newPath => contient le chemin d'acces du fichier copié;
// nbrFrame => le nombre d'image dans la séquence d'image;
// first => le nom de la 1ere image de la sequence;
// extension => l'extension des fichiers de la sequence;
// epure => le nom de la 1ere image sans la sequence de chiffre et sans l'extension;
0
Dark-chyper Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 20 décembre 2013
20 déc. 2013 à 16:18
Bon j'ai déplacé le problème :

J'ai résolu le soucis lors de l'import :
myVegas.Project.MediaPool.AddImageSequence(fiche.newPath+fiche.first, fiche.nbrFrame, frameRate)


lors du traitement pour enregistrer les informations relatives à la séquence d'image, il restait un espace à la fin de la chaine de caractère "first".

Maintenaint le soucis se porte sur :
currentMedia.ReplaceWith();


Le fichier que j'essaye de remplacer existe et a été importé, mais le script me renvoie :

System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à EntryPoint.MoveMedia(Int32 numberOfMedia, Int32 numberOfErase)
   à EntryPoint.FromVegas(Vegas vegas)
   --- Fin de la trace de la pile d'exception interne ---
   à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   à Sony.Vegas.ScriptHost.ScriptManager.Run(Assembly asm, String className, String methodName)
   à Sony.Vegas.ScriptHost.RunScript(Boolean fCompileOnly)


Je sens l'erreur con mais je ne vois pas :/
0
Dark-chyper Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 20 décembre 2013
20 déc. 2013 à 16:55
Problème résolu !
Pour définir l'instance de l'objet "Média" d'une séquence d'images, le chemin d'accès doit faire référence à la 1ere et à la dernière image de la séquence d'image sinon le "Media" n'est pas trouvé dans le chutier.
                Media oldMedia = myVegas.Project.MediaPool.Find(fiche.filePath);
try
 {
    Media currentMedia = myVegas.Project.MediaPool.AddImageSequence(fiche.newPath + fiche.name, fiche.nbrFrame, frameRate);
    oldMedia.ReplaceWith(currentMedia); 
}
//filePath faisant alors référence à quelque chose comme :
// "D:\mon_chemin_d_acces\maSequenceDImages000.png - maSequenceDImages010.png"
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
20 déc. 2013 à 18:45
Tant mieux.
Je marque ce sujet résolu.
Bonnes fêtes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
19 déc. 2013 à 14:58
Bonjour,

ne pas perdre de vue que les "répondeurs" sont bénévoles.
Il faudrait que tu cibles un peu le soucis, on ne va pas forcément (en tout ca pas moi) se donner le temps de lire, interpréter, comprendre ton programme entier.

Synthétise en décrivant le contenue et le but de chaque variable dans la partie ou tu situes le problème.
-1
Rejoignez-nous