Dictionnaire et pointeur

Résolu
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007 - 21 juin 2007 à 10:28
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007 - 21 juin 2007 à 11:56
Bonjour à tous !

Voila j'ai un petit soucis ! je vous explique.
En gros j'ai un dictionnaire qui contient des noms et à ces noms sont associés un workbook.
j'aimerai créer un pointeur qui pointe sur le workbook que je desire.
voila mon code.

dim OD_Nom as dictionary
dim WB_Sortie as workbook
dim Pointeur as workbook
dim i as long

for i = 2 to 100 
   if not OD_Nom.exists(thisworkbook.worksheets(1).cells(i,"A").value) then
   
      set WB_Sortie = workbook.add
      OD_Nom.add thisworkbook.worksheets(1).cells(i,"A").value, WB_Sortie
   else
      
         'et donc c'est la que je dois créer un pointeur sur le workbook associé au nom
               
         set Pointeur = OD_Nom(thisworkbook.worksheets(1).cells(i,"A").value)
            ThisWorkbook.Worksheets("TEMP").Activate
            ThisWorkbook.Worksheets("TEMP").Select
            ThisWorkbook.Worksheets("TEMP").Rows(i & ":" & i).Select
            Selection.Copy
            
            Pointeur.Worksheets(1).Activate
            Pointeur.Worksheets(1).Select
            Pointeur.Worksheets(1).Rows(L_derniere_ligne & ":" & L_derniere_ligne).Select
            Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
   endif
next i

donc voila si quelqu'un peut m'aider svp Merci bcp !!

Miss07

16 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 10:50
un peu comme les dictionary, en fait....

ce genre de choses :

Dim OD_Nom As Collection
Dim oRef As workbook
Dim i As Long
Dim sName As String

Set OD_Nom = New Collection

   For i = 2 To 100
      Set oRef = Nothing
      sName = ThisWorkbook.Worksheets(1).cells(i, "A").Value
      On Error Resume Next
      Set oRef = OD_Nom(sName)
      On Error GoTo 0
      If oRef Is Nothing Then
           Set oRef = workbook.Add
           OD_Nom.Add oRef, sName
      Else
           With ThisWorkbook.Worksheets("TEMP")
               .Activate
               .Select
               .Rows(i & ":" & i).Select
           End With
           Selection.Copy
               
           With oRef.Worksheets(1)
               .Activate
               .Select
               .Rows(L_derniere_ligne & ":" & L_derniere_ligne).Select
           End With
           Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      End If
   Next i

, ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 11:17
c'est pas censé etre workbookS.Add

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 10:33
utilises une Collection, plutot qu'un Dictionary

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:37
Salut,
Note: ca ne ressemble pas à du .NET tout ca...
Pas mieux utilises une collection dans laquelle tu ajoute tes objets WorkBook et qui sera indéxée par le nom du WorkBook

@+: Ju£i?n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 10:40
 heu .... comment je fais pour utiliser une collection ..... j'suis debutante désolée !
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:56
Salut,
Bon ben a la bourre le JUJU mais bon je propose tout de meme ceci on sait jamais (j'ai pas testé)

Dim MCol As New Collection
Dim Pointeur As Workbook
Dim i As Long
Dim MonClasseur As Workbook
Set MonClasseur = ThisWorkbook
   For i = 2 To 100
       On Error Resume Next
       Call MCol.Add(Workbooks.Add, MonClasseur.Worksheets(1).Range("A" & CStr(i)).Value)
       On Error GoTo 0
       
       Set Pointeur = MCol(MonClasseur.Worksheets(1).Range("A" & CStr(i)).Value)
       MonClasseur.Worksheets("TEMP").Rows(i & ":" & i).Copy
       With Pointeur
           .Worksheets(1).Activate
           .Worksheets(1).Select
           .Worksheets(1).Rows(L_derniere_ligne & ":" & L_derniere_ligne).Select
       End With
       Selection.PasteSpecial Range.PasteSpecial(xlValues, xlNone, False, False)
       
   Next i, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:05
Merci bcp ! mais j'ai un soucis au niveau de la création du workbook
Set oRef = Workbook.Add

ce n'est pas du au fait qu'il fasse ceci avant !?
On Error Resume Next
      Set oRef = OD_Nom(sName)

Merci de ton aide
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
21 juin 2007 à 11:08
si l'element  n'existe aps dans la colection, tu aura une erreur, d'ou mon test.

un "soucis" tu pourrait etre plus claire ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:15
il me dit "objet requis" alors qu'il passe partout !
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:18
et j'ai essayé avec le code jrivet il me dit la mm chose sur cette ligne la
Set Pointeur = MCol(MonClasseur.Worksheets("TEMP").Range("H" & CStr(i)).Value)
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 11:25
Re,
Est ce que la feuille TEMP existe bien dans l'obet MonClasseur

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:35
oui
set MonClasseur = Thisworkbook

Call MCol.Add(Workbooks.Add, MonClasseur.Worksheets("TEMP").Range("H" & CStr(i)).Value)  ca passe
       On Error GoTo 0
      
       Set Pointeur = MCol(MonClasseur.Worksheets("TEMP").Range("H" & CStr(i)).Value) ca ne passe plus ! il me dit objet requis
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 11:40
SAlut,
Si tu mets est Msgbox MonClasseur.Worksheets("TEMP").Range("H" & CStr(i)).Value)
Est ce que cela fonctionne?

Sinon essaie aussi
Set Pointeur = MCol(Cstr(MonClasseur.Worksheets("TEMP").Range("H" & CStr(i)).Value))

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:42
c'est bon j'ai trouvé l'erreur j'ai trouvé j'ai pris le code de renfield
merci bcp bcp.
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 11:48
Salut,
Si tu estimes que ton problème est résolu pense à appuyer sur le bouton réponse acceptée sur le ou les posts qui t'on aidé à te débloquer.

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_miss07 Messages postés 77 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 21 juin 2007
21 juin 2007 à 11:56
oui merci !! j'espere ne plus avoir de soucis ! je redoute la sauvegarde de chaque classeur mais je pense pouvoir m'en sortir!
Merci encore a vous deux !!
0