Problème de Collection

Kobal

XLDnaute Junior
Bonjour/Bonsoir à tous !
Pour ceux qui digèrent les repas de Noël en faisant du excel, une "petite" question:
Je fais un classeur qui contiendrait 1 onglet de synthèse, et un onglet de "données", où toutes les données d'un "SSA" (du jargon de boulot) seraient stockées.
Dans la synthèse, on choisirait dans une liste déroulante le SSA qu'on voudrait voir, et une fois sélectionné, ses données s'afficheraient dans la feuille de synthèse, avec la liste déroulante toujours accessible.

Bon, ça, c'est l'objectif.
Là où j'en suis, la liste fonctionne à peu près, au sens où l'algo va fouiller les données et référence tout ce qui suit les "avancement SSA". Mon principe est que je range tout dans une Collection. Le nom du SSA, puis la cellule "titre" (ou son adresse) qui lui correspond. Ensuite, mon but est qu'a la sélection, la liste affiche le nom de tous les SSA, et qu'en en choisissant un, l'algo va prendre la cellule cible jusqu'a la fin de "ses" données pour les copier et coller dans la synthèse.
Seulement j'ai du mal avec la collection.
Il faut qu'elle soit publique (car utilisée à plusieurs endroits, à la définition de la liste, et à la sélection du SSA) je me doute. Quant à sa déclaration, si je ne la met pas à "new", j'ai une erreur. Mais en cas de "new", à part dans la définition de la liste, la collection reste vide.
Bref.
Je vous joins un fichier exemple. Une partie du code y est, je l'ai copié/collé à la bourrin, sans trop adapter, mais c'est pour donner une idée du probleme. Je me doute qu'il marchera encore moins dans l'exemple.

Merci d'avance si quelqu'un a une idée pour m'aider.
Bonne soirée !

P.S.: Désolé d'écrire des pavés à chaque fois, j'espère que ça reste relativement clair...
 

Pièces jointes

  • Exemple Collection.xls
    37 KB · Affichages: 47
Dernière édition:

Kobal

XLDnaute Junior
Re : Problème de Collection

Bonjour,
Désolé de remonter mon topic, mais bon, si à tout hasard quelqu'un pourrait m'aider.

J'ai tripoté un peu le code depuis, la définition de la liste marche toujours bien, et j'ai réussi une fois à bien copier ce qu'il fallait (mais que le premier élément de la liste).
L'algo de copie est ainsi maintenant:
Code:
Sub CopierSynthese(Nom As String, Collect As Collection)
'Copie la synthèse du SSA/Projet sélectionné (Nom)
Dim Plage As Range
Dim CelTarg As Range
Dim CelEnd As Range
Dim Objet As Variant
Dim i As Integer

Application.ScreenUpdating = False
ActiveWorkbook.Worksheets("DB").Activate

For i = 1 To Collect.Count
    If Collect.Item(i) = Nom Then
        Set CelTarg = Collect.Item(i + 1)
        CelTarg = CelTarg.Offset(-1, -1)
        If ContainsItem(Collect, i + 3) Then
            Set CelEnd = Collect.Item(i + 3).Offset(-1, 15)
            Else
            Set CelEnd = Sheets("DB").Range("B65536").End(xlUp).Offset(0, 15)
        End If
    End If
    i = i + 2
Next

If Not IsEmpty(CelTarg) Then
    Set Plage = Sheets("DB").Range(CelTarg, CelEnd)
    Plage.Copy
    Else
    MsgBox ("SSA non trouvé")
End If
ActiveWorkbook.Worksheets("Synthèse SSA").Activate
Range("A1:IV65536").PasteSpecial xlPasteAll
Application.ScreenUpdating = True

End Sub


Function ContainsItem(col As Collection, val As Variant) As Boolean
Dim itm As Variant
On Error Resume Next
itm = col.Item(val)
ContainsItem = Not (Err.Number = 5 Or Err.Number = 9)
On Error GoTo 0
End Function

Avec le code en l'état, en choisissant un SSA, il me met soit une erreur, soit il copie un bout de code dans mon excel, ce qui est bizarre.
Bref, toutes les remarques sont les bienvenues :)

edit: pour être plus précis, l'erreur est "erreur définie par l'application ou par l'objet", et est surligné "Set plage = Worksheets("DB").Range(CelTarg,CelEnd)"
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 745
Messages
2 091 582
Membres
105 004
dernier inscrit
Dera