scripting.dictionary probleme avec .exists

Le
isabelle
bonjour à tous,

j'ai de la brume dans mes lunette,
voilà,
en cellule A1:A4 j’inscris
1
2
1
2

puis j’exécute la macro ci-bas.
normalement il devrait résulter en cellule C1:C2 les données 1 et 2
mais non, j’obtiens en cellule C1:C4 1, 2, 1, 2


Private Sub liste()
Dim it As Range
Range("C:C").Delete

With CreateObject("scripting.dictionary")

For Each it In Range("A1:A4")
If Not .exists(it) Then .Item(it) = it
Next

Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With

End Sub

c'est grave docteur ?
isabelle
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #26417278
Bonjour,
Private Sub liste()
Dim it As Range, Dico As Object
Range("C:C").Delete
Set Dico = CreateObject("scripting.dictionary")
With Dico
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Cordialement.
Daniel
bonjour à tous,
j'ai de la brume dans mes lunette,
voilà,
en cellule A1:A4 j’inscris
1
2
1
2
puis j’exécute la macro ci-bas.
normalement il devrait résulter en cellule C1:C2 les données 1 et 2
mais non, j’obtiens en cellule C1:C4 1, 2, 1, 2
Private Sub liste()
Dim it As Range
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it) Then .Item(it) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
c'est grave docteur ?
isabelle
DanielCo
Le #26417296
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
bonjour à tous,
j'ai de la brume dans mes lunette,
voilà,
en cellule A1:A4 j’inscris
1
2
1
2
puis j’exécute la macro ci-bas.
normalement il devrait résulter en cellule C1:C2 les données 1 et 2
mais non, j’obtiens en cellule C1:C4 1, 2, 1, 2
Private Sub liste()
Dim it As Range
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it) Then .Item(it) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
c'est grave docteur ?
isabelle
isabelle
Le #26417320
merci Daniel,
ça fonctionne avec le .Value
isabelle
Le 2016-11-16 à 05:56, DanielCo a écrit :
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
HB
Le #26417326
Bonjour,
Encore un cas ou la "propriété par défaut"
(ici .Value) n'est plus facultative...
Peut-on considérer qu'il s'agit là
d'un défaut de VBA ?
C'est quand même curieux ...
On se laisse facilement prendre à défaut ...
HB
Le 16/11/2016 à 15:57, isabelle a écrit :
merci Daniel,
ça fonctionne avec le .Value
isabelle
Le 2016-11-16 à 05:56, DanielCo a écrit :
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
DanielCo
Le #26417329
Bonjour,
A partir du moment ou tu peux faire un dictionnaire d'objets range, il
faut bien spécifier que c'est selement la valeur qui t'intéresse.
Cordialement.
Daniel
Bonjour,
Encore un cas ou la "propriété par défaut"
(ici .Value) n'est plus facultative...
Peut-on considérer qu'il s'agit là
d'un défaut de VBA ?
C'est quand même curieux ...
On se laisse facilement prendre à défaut ...
HB
Le 16/11/2016 à 15:57, isabelle a écrit :
merci Daniel,
ça fonctionne avec le .Value
isabelle
Le 2016-11-16 à 05:56, DanielCo a écrit :
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
isabelle
Le #26417328
oui c'est bien ça,
étant donné que chaque cellule a une adresse différente
c'est pourquoi tous était mit dans le dico
isabelle
Le 2016-11-16 à 12:11, DanielCo a écrit :
Bonjour,
A partir du moment ou tu peux faire un dictionnaire d'objets range, il faut bien
spécifier que c'est selement la valeur qui t'intéresse.
Cordialement.
Daniel
Bonjour,
Encore un cas ou la "propriété par défaut"
(ici .Value) n'est plus facultative...
Peut-on considérer qu'il s'agit là
d'un défaut de VBA ?
C'est quand même curieux ...
On se laisse facilement prendre à défaut ...
HB
Le 16/11/2016 à 15:57, isabelle a écrit :
merci Daniel,
ça fonctionne avec le .Value
isabelle
Le 2016-11-16 à 05:56, DanielCo a écrit :
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
HB
Le #26417377
oui
c'était juste pour tourner autour du mot "default"
;o)
Blague à part :
On prend vite l'habitude de ne pas spécifier ".Value"
et quand c'est indispensable on peut se laisser surprendre...
HB
Le 16/11/2016 à 18:11, DanielCo a écrit :
Bonjour,
A partir du moment ou tu peux faire un dictionnaire d'objets range, il
faut bien spécifier que c'est selement la valeur qui t'intéresse.
Cordialement.
Daniel
Bonjour,
Encore un cas ou la "propriété par défaut"
(ici .Value) n'est plus facultative...
Peut-on considérer qu'il s'agit là
d'un défaut de VBA ?
C'est quand même curieux ...
On se laisse facilement prendre à défaut ...
HB
Le 16/11/2016 à 15:57, isabelle a écrit :
merci Daniel,
ça fonctionne avec le .Value
isabelle
Le 2016-11-16 à 05:56, DanielCo a écrit :
Ou au minimum :
Private Sub liste2()
Dim it As Range, Dico As Object
Range("C:C").Delete
With CreateObject("scripting.dictionary")
For Each it In Range("A1:A4")
If Not .exists(it.Value) Then .Item(it.Value) = it
Next
Range("C1").Resize(.Count, 1) = Application.Transpose(.Items)
End With
End Sub
Daniel
Publicité
Poster une réponse
Anonyme