Iimporter des données vers un tableau

Adamev

XLDnaute Occasionnel
Bonjour:
J'ai des données stockéées dans la plages A1:F10 de la page "Données". Pour avoir ces données dans un tableau VBA il est possible d'écrire:

Code:
MonTableau = sheets("Données").Ranges("A1:F10").Value

Mais ces données restent liées à la plage A1:F10. Je voudrais que MonTableau une fois chargé, n'aura plus de lien avec la plage A1:F10 c-à-dire même en modifiant le contenu de la plage A1:F10 MonTableau reste tel quel.
Merci d'avance
 

job75

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Bonjour Adamev,

Question pas bien claire mais essayez ce code :

Code:
Dim MonTableau 'mémorise la variable

Sub Test()
On Error Resume Next
If UBound(MonTableau) = 0 Then MonTableau = Sheets("Données").Range("A1:F10")
On Error GoTo 0
MsgBox MonTableau(1, 1) 'modifiez A1 pour tester
'---suite---
End Sub
Le tableau est créé lors de la 1ère exécution de la macro, il n'est plus modifiable quand on relance la macro.

Bien sûr le tableau sera recréé si l'on ferme et rouvre le fichier.

A+
 

job75

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Re,

Ce code est plus simple :

Code:
Dim MonTableau 'mémorise la variable

Sub Test()
If IsEmpty(MonTableau) Then MonTableau = Sheets("Données").Range("A1:F10")
MsgBox MonTableau(1, 1) 'pour tester
'---suite---
End Sub
A+
 

Dranreb

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Bonsoir.

Mais qu'est-ce que c'est que ce truc ???
Mais ces données restent liées à la plage A1:F10
Complètement faux. C'est un tableau de variant en mémoire, point. Il n'est lié à rien.
Je voudrais que MonTableau une fois chargé, n'aura plus de lien avec la plage A1:F10 c-à-dire même en modifiant le contenu de la plage A1:F10 MonTableau reste tel quel.
Mais c'est déjà complètement le cas ! Aucune modification dans Excel n'affectera les valeurs préalablement rangées dans ce tableau, à moins qu'elle déclenche un code qui exécute votre instruction.

Toutefois, il suffit d'un rien pour qu'il soit effacé de la mémoire. Dès lors qu'un incident provoque la réinitialisation du projet VBA en fait. Un tableau en mémoire c'est fondamentalement volatile.
 
Dernière édition:

Adamev

XLDnaute Occasionnel
Re : Iimporter des données vers un tableau

Bonsoir Job75, Dranreb

Merci pour vos réponses
Peut être que ma question n'etait pas bien posée.

Bonsoir.

Mais qu'est-ce que c'est que ce truc ???
Complètement faux. C'est un tableau de variant en mémoire, point. Il n'est lié à rien.Mais c'est déjà complètement le cas ! Aucune modification dans Excel n'affectera les valeurs préalablement rangées dans ce tableau, à moins qu'elle déclenche un code qui exécute votre instruction.

Si MonTableau n'est pas lié à la plage source, comment expliquer alors qu'il change à chaque changement de cette plage source?
Je voudrais que Montableau "garde" son contenu une fois chargé, même en fermant le classeur et en l'ouvrant. Est ce possible?
J'éspère que j'ai bien détaillé mon souhait.
Merci beaucoup
A+
 

Dranreb

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Non, c'est complètement impossible à moins de l'enregistrer dans un fichier indépendant, si pour une raison mystérieuse vous tenez absolument à ne pas le sauvegarder dans une feuille du classeur.
Si MonTableau n'est pas lié à la plage source, comment expliquer alors qu'il change à chaque changement de cette plage source?
Ça je ne pourrai vous l'expliquer qu'en voyant votre classeur. Mais c'est probablement du au fait que ce tableau est chargé par une procédure Worksheet_Change.
 

Adamev

XLDnaute Occasionnel
Re : Iimporter des données vers un tableau

Re,
Les données sont copiées en utulisant la procédure:

Code:
Sub CoopieDonnées()
DimMonTableau()
MonTableau = sheets("Données").Ranges("A1:F10").Value
End sub

Et MonTableau est bien lié à la plage source.

En utlisant la procédure suggérée plus haut par gob75, MonTableau est effectivement indépendant de la plage source; mais uniquement tant que le classeur est ouvert.
cordialement
A+
 

Dranreb

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Et MonTableau est bien lié à la plage source.
Mais qu'est ce qui peut bien vous faire dire ça ?
Dans cette procédure, les deux MsgBox affichent 111 bien que lors du 2ième on voit que la cellule A1 contient 999. Une fois chargé en mémoire, le tableau est donc bien indépendant des cellules d'où il à été chargé, non ?
VB:
Sub test()
Dim MonTableau()
Feuil1.Cells(1, 1).Value = 111
MonTableau = Feuil1.[A1:F10].Value
MsgBox MonTableau(1, 1)
Feuil1.Cells(1, 1).Value = 999
MsgBox MonTableau(1, 1)
End Sub
 

job75

XLDnaute Barbatruc
Re : Iimporter des données vers un tableau

Bonjour Adamev, Dranreb,

En utlisant la procédure suggérée plus haut par gob75, MonTableau est effectivement indépendant de la plage source; mais uniquement tant que le classeur est ouvert.

Bon si ça vous gêne on peut mémoriser plus durablement, par exemple dans un nom défini :

Code:
Sub Test()
Dim MonTableau, i, j
If IsError([mem]) Then
  MonTableau = Sheets("Données").Range("A1:F10")
  ThisWorkbook.Names.Add "mem", MonTableau ', Visible:=False
End If
MonTableau = [mem]
For i = 1 To UBound(MonTableau)
  For j = 1 To UBound(MonTableau, 2)
    If IsError(MonTableau(i, j)) Then MonTableau(i, j) = Empty
  Next
Next
MsgBox MonTableau(1, 1) 'modifiez A1 pour tester
'---suite---
End Sub
Comme indiqué le nom mem peut être masqué.

A+
 

Adamev

XLDnaute Occasionnel
Re : Iimporter des données vers un tableau

Bonjour Dranreb, Job75

Vous êtes toujours avec moi! je vous suis trés reconnaissant...

Bon si ça vous gêne on peut mémoriser plus durablement, par exemple dans un nom défini
...

"Durablement" ... c'est le mot que j'aurais dû, peut être, uulisé! Un tableau qui, une fois chargé, ne change pas avec la plage source, que le classeur soit fermé et rouvert, que la plage source soi changée, renommée ou même effacée.
Job, je vais tester ton code, qui semble répondre à ma question.
A+
 

Discussions similaires

M
Réponses
9
Affichages
543
Maikales
M

Statistiques des forums

Discussions
312 836
Messages
2 092 656
Membres
105 479
dernier inscrit
chaussadas.renaud