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:
1) Pas d'option explicit. Au vu de ce que j'ai lu, je l'ai activée...
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
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 VariantL'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...
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
Merci d'avoir pris le temps de regarder ma demande.
Partager