Bonjour à tous,

Etant newbie de base, j'ai commencé par lire tout ce que je trouvais. Mais apparemment l'erreur 1004 c'est un peu (beaucoup) sibyllin...
Après une bonne journée à compulser les FAQs et le forum, je tourne toujours en rond...

Mon souci : j'ai une macro livrée par une personne en congés que je veux adapter à des traitements en masse, et forcément c'est un peu pour hier :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub QuiMarche()
 
LigneEnCours = 1
 
    Ligne = 2
    Colonne = 2
    OnExtrait = True
 
    LigneEnCours = 2
 
    Continue = True
    While Continue = True
        LigneModif = Feuil3.Cells(LigneEnCours, 1).Value
        If VarType(LigneModif) = vbEmpty Then
            Continue = False
        Else
            LigneModif = LigneModif + 1
            Colonne = 2
            While Mid(Feuil1.Cells(LigneModif, 1).Value, 1, 1) <> "#"
                Feuil3.Cells(LigneModif, 1).NumberFormat = "@"
                Feuil1.Cells(LigneModif, 1).Value = Feuil3.Cells(LigneEnCours, Colonne).Value
                LigneModif = LigneModif + 1
                Colonne = Colonne + 1
            Wend
        End If
        LigneEnCours = LigneEnCours + 1
 
    Wend
    MsgBox "Réintégration terminée dans la Feuil1 !!!", vbOKOnly + vbInformation, "Fini"
 
End Sub
1) Pas d'option explicit. Au vu de ce que j'ai lu, je l'ai activée...
2) J'ai réussi à mettre le paramètre dans une cellule, puis ma liste de paramètres dans une plage en dessous, et dans d'autres procédures j'appelle les procédures de traitement en faisant une boucle. Pour la petite histoire le mid qui test le # permet de passer à la ligne suivante.
La phase d'extraction se déroule parfaitement donc je pense que le système est OK, c'est sur la phase de réintégration (à l'unité) que j'ai le souci.
3) Pour une raison qui m'échappe totalement, le code QuiMarche() plante dès que je renomme les feuilles (en changeant les propriétés Name et (Name)). Pourtant j'insiste, la partie extraction qui fonctionne avec les mêmes objets n'a pas de problème

Je pars d'un onglet identifié par un paramètre pour d'un tableau listant des valeurs, regénérer un "fichier texte" dans la feuille Import.

Donc en Déclarations j'ai entré :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Dim Msg, FlagLbl As String
Dim LigneEnCours, Ligne, Colonne, LigneMax, LigneSup As Long
Dim FlagCell, FlagList As Range
Dim FlagPos As Integer
Dim OnExtrait, Continue As Boolean
Dim Valeur, ValeurModif As Variant
'Dim LigneModif As Long
Dim LigneModif As Variant
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Sub QuiMarchePas()
 
 
 
    Set FlagCell = Sheets("Menu").Range("C13")
'    FlagLbl = FlagCell.Value
 
    With Sheets("Temp")
        .Select
        .Cells.Select
    End With
    Selection.ClearContents
 
    With ThisWorkbook.Sheets(FlagCell.Value)
        .Select
        .Cells.Select
    End With
    Selection.Copy
    ThisWorkbook.Sheets("Temp").Activate
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste
    ActiveSheet.Range("A1").Select
 
 
 
LigneEnCours = 1
 
    Ligne = 2
    Colonne = 2
    OnExtrait = True
 
    LigneEnCours = 2
 
    Continue = True
    While Continue = True
        LigneModif = ThisWorkbook.Sheets("Temp").Cells(LigneEnCours, 1).Value
        If VarType(LigneModif) = vbEmpty Then
            Continue = False
        Else
            LigneModif = LigneModif + 1
            Colonne = 2
            While Mid(ThisWorkbook.Sheets("Import").Cells(LigneModif, 1).Value, 1, 1) <> "#"
                ThisWorkbook.Sheets("Temp").Cells(LigneModif, 1).NumberFormat = "@"
 'ça plante ici !               
 ThisWorkbook.Sheets("Import").Cells(LigneModif, 1).Value = ThisWorkbook.Sheets("Temp").Cells(LigneEnCours, Colonne).Value
' Erreur d'exécution '1004' : Erreur définie par l'application ou par l'objet
                LigneModif = LigneModif + 1
                Colonne = Colonne + 1
            Wend
        End If
        LigneEnCours = LigneEnCours + 1
 
    Wend
    'MsgBox "Réintégration terminée  !!!", vbOKOnly + vbInformation, "Fini"
 
    ThisWorkbook.Sheets("Menu").Select
End Sub
L'erreur survient seulement au bout d'un moment, et j'ai l'impression que ça fonctionne bien au début. Le problème, c'est que j'ai environ 1 millions de lignes, donc les vérifs sont pas gagnées...

Merci d'avoir pris le temps de regarder ma demande.