Dictionnaire et pointeur

Résolu
Signaler
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007
-
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007
-
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

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
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
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
c'est pas censé etre workbookS.Add

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
utilises une Collection, plutot qu'un Dictionary

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

 heu .... comment je fais pour utiliser une collection ..... j'suis debutante désolée !
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

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
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
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
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

il me dit "objet requis" alors qu'il passe partout !
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

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)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Est ce que la feuille TEMP existe bien dans l'obet MonClasseur

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

c'est bon j'ai trouvé l'erreur j'ai trouvé j'ai pris le code de renfield
merci bcp bcp.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
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
Messages postés
77
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
21 juin 2007

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 !!