Ecrire tableau (défini par un type) nouvelle feuille
Bonjour à tous,
Je souhaite automatiser le traitement d'une extraction de données. Pour cela, la première étape consiste à diviser le tableau en deux en fonction des utilisateurs (facturations et directeurs).
Pour réaliser cela J'ai dans un premier temps défini un type. Chaque ligne du tableau contient une facture avec ses caractéristiques. J'ai donc défini un type facture.
ensuite j'ai créer une fonction filtre_directeurs qui reçoit le tableau de base et en fonction du nom de l'utilisateur il enregistre la ligne.
Jusqu'ici tout va bien j'obtient mon tableau filtre.
Je souhaite maintenant écrire ce tableau filtre dans une nouvelle feuille. Voici le code que j'ai écris :
Public Function ecrire_element(ByRef tableau() As t_facture)
Dim copie_tableau() As t_facture
Dim ligne As Long
For ligne = 2 To UBound(copie_tableau)
feuille_directeur.Cells(ligne, 1).Value = copie_tableau(ligne).state
feuille_directeur.Cells(ligne, COLONNE_GROUP).Value = copie_tableau(ligne).group
feuille_directeur.Cells(ligne, COLONNE_ROLE).Value = copie_tableau(ligne).role
feuille_directeur.Cells(ligne, COLONNE_USER).Value = copie_tableau(ligne).user
feuille_directeur.Cells(ligne, COLONNE_EMAIL).Value = copie_tableau(ligne).email
feuille_directeur.Cells(ligne, COLONNE_VOUCHER_NUMBER).Value = copie_tableau(ligne).voucher_number
feuille_directeur.Cells(ligne, COLONNE_INVOICE_DATE).Value = copie_tableau(ligne).invoice_date
feuille_directeur.Cells(ligne, COLONNE_INVOICE_NUMBER).Value = copie_tableau(ligne).invoice_number
feuille_directeur.Cells(ligne, COLONNE_VENDOR_NAME).Value = copie_tableau(ligne).vendor_name
feuille_directeur.Cells(ligne, COLONNE_AMOUNT).Value = copie_tableau(ligne).amount
feuille_directeur.Cells(ligne, COLONNE_SYSTEM_ENTRY_DATE).Value = copie_tableau(ligne).system_entry_date
feuille_directeur.Cells(ligne, COLONNE_QUEUE_ENTRY_DATE).Value = copie_tableau(ligne).queue_entry_date
feuille_directeur.Cells(ligne, COLONNE_QUEUE_EXIT_DATE).Value = copie_tableau(ligne).queue_exit_date
feuille_directeur.Cells(ligne, COLONNE_AP_COMPLETE_DATE).Value = copie_tableau(ligne).ap_complete_date
feuille_directeur.Cells(ligne, COLONNE_DECLINE_DATE).Value = copie_tableau(ligne).decline_date
feuille_directeur.Cells(ligne, COLONNE_DAYS_WITHIN_QUEUE).Value = copie_tableau(ligne).days_within_queue
feuille_directeur.Cells(ligne, COLONNE_DAYS_TO_PROCESS).Value = copie_tableau(ligne).days_to_process
Next ligne
End FunctionJe reçois le message d'erreur suivant :
Run-time error '9'
subscript out of range
il me souligne la premiere ligne en jaune et l'erreur viendrait de copie_tableau.
Merci pour votre aide.
Bonjour,
Pas sûr de savoir t'aider (d'autres y arriveront) mais,
Pensez à joindre un fichier pour faciliter la compréhension du problème et augmenter les chances de vous faire aider (taille limite : 300ko, n'hésitez pas à compresser vos fichiers).
Ca aide à aider
Un exemple de même présentation court et anonymisé suffit
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Après lecture du code :
- la fonction a comme argument un tableau :
Public Function ecrire_element(ByRef tableau() As t_facture)- toute la suite utilise un autre tableau (jamais initialisé :
For ligne = 2 To UBound(copie_tableau)Solution 1 :
- utiliser directement le tableau passé en paramètre => tableau()
Solution 2 :
- affecter le tableau au nouveau tableau :
copie_tableau = tableauA voir si cela résout le problème ...
Bonne soirée
Bouben
Bonjour,
Merci à toi, effectivement j'avais oublier de charger le tableau. En apportant quelques modifications à ma fonction ecrire je suis enfin capable de copier le tableau filtre dans la nouvelle feuille. Cependant un petit détail me gène.
Pour les 4 colonnes contenant des dates du type : 11/11/2015 11:40:37 AM
Lorsque le programme copie cette ligne dans la nouvelle feuille il supprime le AM il garde simplement 11/11/2015 11:40:37
cette information est importante car par la suite je souhaite convertir cette colonne en format date (actuellement en string) afin de pouvoir calculer des délai entre les différentes dates.
Je ne comprend vraiment pas pourquoi il supprime la fin sachant que dans le type il est définit en string.
Quelqu'un saurait m'éclaircir pour ça ?
Autre chose, savez-vous comment faire pour supprimer une ligne entiere une fois qu'elle a été copié dans la nouvelle feuille ?
je joins le nouveau fichier fonctionnel.
Merci!