Copie interfeuille sur excel via VBA
Phyranum
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un soucis avec ma macro VBA :
La situation :
J'ai un fichier excel avec une centaine de lignes qui contiennent des entrées. La colonne E contient un référence (un trigramme) pour identifer la personne à l'origine de la ligne. Les autres colonnes contiennent des informations. La première ligne contient l'entête des colonnes.
Le but :
Dans le même fichier, créer une feuille par référence qui contiendra toutes les entrées qui se rapportent à la même personne ainsi que l'entête
Par exemple :
Feuille de base :
° § " * REF
1 2 a 4 AAA
2 5 s 4 AAB
1 5 b 4 AAB
1 2 v 4 AAA
2 5 j 4 AAC
1 2 e 4 AAA
Après manipulation :
1 Feuille AAA :
° § " * REF
1 2 a 4 AAA
1 2 v 4 AAA
1 2 e 4 AAA
1 Feuille AAB :
° § " * REF
2 5 s 4 AAB
1 5 b 4 AAB
1 Feuille AAC :
° § " * REF
2 5 j 4 AAC
L'idée :
1) Trier verticalement la feuille de donnée en fonction des références
2) Pour chaque ligne de la feuille de donnée,
a) si aucune feuille n'existe pour la référence, créer la feuille, copier l'entête en haut
b) si la feuille existe, rien
c) pour toutes ligne copier les valeurs de la feuille de données vers la feuille correspondant à la référence
Pour ce faire j'utilise deux compteurs : le premier pour parcourir progressivement les lignes de la feuille de données, le second pour décaler la copie des données si une référence apparaît plusieurs fois.
Comme ma feuille est triée, je peux gérer le second compteur en le réinitialisant lors de la création d'une nouvelle feuille et en l'incrémentant après chaque copie.
Le problème :
Aucune idée :(
Quand j'execute mon code, j'ai une erreur
"Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet"
Le débogage se place sur la ligne de copie mais j'ai testé cette syntaxe sur un autre fichier, ca passait...
Help !^^
Je remerci d'ores et déjà ceux qui sauront m'aider ;)
Pour les experts codeurs, voici mon code :
----------------------------------------------------------------------
Sub dispatchOnglets()
Dim reference As String
Dim ligne As Integer
Dim lignecopie As Integer
ligne = 2
lignecopie = 2
ThisWorkbook.Sheets("Données").Rows("1:1").AutoFilter
Range("A1:E500").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Do While Not IsEmpty(ThisWorkbook.Sheets("Données").Cells(ligne, 5))
reference = ThisWorkbook.Sheets("Données").Cells(ligne, 5).Value
Dim i As Integer
Dim b_existe As Boolean
For i = 1 To Sheets.Count
If Sheets(i).Name = reference Then
b_existe = True
End If
Next
If b_existe Then
lignecopie = lignecopie + 1
Else
lignecopie = 2
ThisWorkbook.Worksheets.Add
ActiveSheet.Name = reference
ThisWorkbook.Sheets(reference).Range("A1:E1").Value = ThisWorkbook.Sheets("Données").Range("A1:E1").Value
End If
ThisWorkbook.Sheets(reference).Range(Cells(lignecopie, 1), Cells(lignecopie, 5)).Value = ThisWorkbook.Sheets("Données").Range(Cells(ligne, 1), Cells(ligne, 5)).Value
ligne = ligne + 1
Loop
End Sub
J'ai un soucis avec ma macro VBA :
La situation :
J'ai un fichier excel avec une centaine de lignes qui contiennent des entrées. La colonne E contient un référence (un trigramme) pour identifer la personne à l'origine de la ligne. Les autres colonnes contiennent des informations. La première ligne contient l'entête des colonnes.
Le but :
Dans le même fichier, créer une feuille par référence qui contiendra toutes les entrées qui se rapportent à la même personne ainsi que l'entête
Par exemple :
Feuille de base :
° § " * REF
1 2 a 4 AAA
2 5 s 4 AAB
1 5 b 4 AAB
1 2 v 4 AAA
2 5 j 4 AAC
1 2 e 4 AAA
Après manipulation :
1 Feuille AAA :
° § " * REF
1 2 a 4 AAA
1 2 v 4 AAA
1 2 e 4 AAA
1 Feuille AAB :
° § " * REF
2 5 s 4 AAB
1 5 b 4 AAB
1 Feuille AAC :
° § " * REF
2 5 j 4 AAC
L'idée :
1) Trier verticalement la feuille de donnée en fonction des références
2) Pour chaque ligne de la feuille de donnée,
a) si aucune feuille n'existe pour la référence, créer la feuille, copier l'entête en haut
b) si la feuille existe, rien
c) pour toutes ligne copier les valeurs de la feuille de données vers la feuille correspondant à la référence
Pour ce faire j'utilise deux compteurs : le premier pour parcourir progressivement les lignes de la feuille de données, le second pour décaler la copie des données si une référence apparaît plusieurs fois.
Comme ma feuille est triée, je peux gérer le second compteur en le réinitialisant lors de la création d'une nouvelle feuille et en l'incrémentant après chaque copie.
Le problème :
Aucune idée :(
Quand j'execute mon code, j'ai une erreur
"Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet"
Le débogage se place sur la ligne de copie mais j'ai testé cette syntaxe sur un autre fichier, ca passait...
Help !^^
Je remerci d'ores et déjà ceux qui sauront m'aider ;)
Pour les experts codeurs, voici mon code :
----------------------------------------------------------------------
Sub dispatchOnglets()
Dim reference As String
Dim ligne As Integer
Dim lignecopie As Integer
ligne = 2
lignecopie = 2
ThisWorkbook.Sheets("Données").Rows("1:1").AutoFilter
Range("A1:E500").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Do While Not IsEmpty(ThisWorkbook.Sheets("Données").Cells(ligne, 5))
reference = ThisWorkbook.Sheets("Données").Cells(ligne, 5).Value
Dim i As Integer
Dim b_existe As Boolean
For i = 1 To Sheets.Count
If Sheets(i).Name = reference Then
b_existe = True
End If
Next
If b_existe Then
lignecopie = lignecopie + 1
Else
lignecopie = 2
ThisWorkbook.Worksheets.Add
ActiveSheet.Name = reference
ThisWorkbook.Sheets(reference).Range("A1:E1").Value = ThisWorkbook.Sheets("Données").Range("A1:E1").Value
End If
ThisWorkbook.Sheets(reference).Range(Cells(lignecopie, 1), Cells(lignecopie, 5)).Value = ThisWorkbook.Sheets("Données").Range(Cells(ligne, 1), Cells(ligne, 5)).Value
ligne = ligne + 1
Loop
End Sub
A voir également:
- Copie interfeuille sur excel via VBA
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Word et excel gratuit - Guide
- Comment trier par ordre alphabétique sur excel - Guide
- Copie écran samsung - Guide
1 réponse
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
Quelle est exactement la ligne qui donne une erreur 1004 ?