Copie interfeuille sur excel via VBA

Fermé
Phyranum - 23 juin 2009 à 11:32
yg_be Messages postés 22891 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 juin 2024 - 24 juin 2009 à 08:01
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
A voir également:

1 réponse

yg_be Messages postés 22891 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 juin 2024 1 478
24 juin 2009 à 08:01
Quelle est exactement la ligne qui donne une erreur 1004 ?
0