Bonsoir Nicolas, le Forum
Ce n'est pas que ton problème m'interresse ou pas, c'est que je ne suis pas trop souvent chez moi, et comme j'ai écrit plus haut, les anciens fils, je ne les vois que par mails interposés depuis chez moi...
Ceci dit, il y a bien un problème de conception dans le code que tu as repris d'une de mes démo... En effet dans cet démo la variable "Numero_fiche" devait exister dans la feuille Cible, hors dans ce que je vois dans ton fichier ce n'est pas le cas...
Tu initialises "Numero_fiche = nomFichier"
Hors "nomFichier' est initialisée dans une autre macro par concaténation de 3 cellules du fichier Source...
Seulement "Plage" est la range de la colonne "A" De la feuille Cible qui est vide de données...
Comme veux-tu alors que la boucle suivante fonctionne :
For Each Cell In Plage
If Cell = Numero_fiche Then
L = Cell.Row
End If
Next
Puisque toutes les Cells sont Vides...
Par conséquent la variable Long "L" n'est pas initialisée donc elle a la valeur zéro...
Il te faut gérer avec une Boolean "Existing" le cas où tu n'as pas déjà de Numéro_Fiche existant en initialisant "L" avec la dernière ligne disponible, voici la macro "Transfer" refaite :
Sub Transfert() '@+Thierry
Const ThePath As String = "H:\Nicolas\mon_anomalie\"
Dim WSsource As Worksheet, WScible As Worksheet
Dim L As Long
Dim Numero_fiche As String
Dim Plage As Range, Cell As Range
Dim Existing As Boolean
Set WSsource = ThisWorkbook.Worksheets("fiche")
Set WScible = Workbooks("tableau_mon_anomalie.xls").Worksheets("tableau")
nomFichier = "zaza" '<<< ici j'initialise ta variable pour mes tests (A DEGAGER)
Numero_fiche = nomFichier
Set Plage = WScible.Range("A1:A" & WScible.Range("A65536").End(xlUp).Row)
For Each Cell In Plage
If Cell = Numero_fiche Then
Existing = True
L = Cell.Row
End If
Next
If Existing = False Then
L = WScible.Range("A65536").End(xlUp).Row + 1
End If
With WScible
.Range("A" & L) = Numero_fiche
.Range("B" & L) = WSsource.Shapes("Description").DrawingObject.Caption
.Range("C" & L) = WSsource.Range("choix_caractéristique")
.Range("D" & L) = WSsource.Shapes("Commentaires").DrawingObject.Caption
.Range("E" & L) = WSsource.Range("Date_début")
.Range("F" & L) = WSsource.Range("Date_fin")
.Range("G" & L) = Numero_fiche & ".xls"
.Hyperlinks.Add Anchor:=.Range("G" & L), Address:=ThePath & nomFichier & ".xls"
End With
End Sub
J'ai aussi repris l'HyperLink... Pour ce qui est de saisir et reporter des données d'Objets Shapes, ce n'est pas vraiment très catholique non plus, mais boen j'ai laissé...
Voilà ce devrait mieux fonctionner !
Désolé pour les délais de réponse, mais je suis assez pris.
Bonne nuit ou Bonne Journée
@+Thierry