Tableau ou dictionnaire

bonsoir

j'ai une question assez courte et pas forcement simple

  • sur une feuille de calcul je peux me reserver une plage de cellule et travailler à l'interieur , verifier si un element s'y trouve ..etc
  • si je ne souhaite pas passer par les cellules de ma feuille de calcul mais plutot utiliser de l'espace memoire alloué par avance
pour y inscrire des variables ou voir meme si certaines d'entre elle s'y trouve , est ce que la notion de tableau ou dictionnaire est adaptée dans ce cas et est ce faisable ?

Merci

Bonsoir,

Tu peux faire plein de choses , à choisir ce qui te facilitera l'utilisation... Un exemple : tu nommes une plage ! BA1:BI20 que tu nommes PlgPerso, ce qui te fait une plage de 20 lignes et 9 colonnes, 180 cellules dans lesquelles tu peux stocker des valeurs réutilisables...

Par commodité, tu peux affecter cette plage à une variable (niveau module) :

MesVar = [PlgPerso].Value

te permet de disposer d'un tableau indicé de 1 à 20 (en lignes) et 1 à 9 (en colonnes) : MesVar(3, 8 ) te renvoie la valeur que tu auras stockée en BH3. Mais tu n'as pas à te soucier de l'adresse. Si tu veux modifier la valeur, tu peux le faire avec :

[PlgPerso].Cells(3, 8 ) = NouvelleValeur

Mais tu peux encore plus facilement modifier directement MesVar(3, 8 ). En fin de travail, tu fais :

[PlgPerso].Value = MesVar

et tu auras mémorisé l'état de tes variables.

Ce peut être une façon intéressante de conserver la valeur d'un lot de variables entre 2 sessions de travail pour en disposer dès l'ouverture en une seule ligne de code et les restocker pour enregistrement en fin de travail par une seule ligne de code également.

Cordialement.

Bonjour/soir,

et sans compter que avec ce genre de tableau, le travail d'une boucle est bien plus rapide sur un grand nombre de lignes

Faut s'y faire et maitriser, et il y a quelques spécialistes ici dont l'excellent MFerrand justement

Quand le problème est bien posé, les réponses coulent de source

P.

Merci pour vos réponses ! l'idée a l'air séduisante ... je vais tenter un essai ...y a pas à dire Mferrand est excellent en la matière


j'ai essayé ceci

Sub essai()
Set PlgPerso = Range("a1:d6")  'je defini mon tableau 
mesvar = [PlgPerso].Value 'j'en fais une variable
End Sub

ce que je n'ai pas compris c'est comment alimenter mon tableau si par exemple en cellule (1,4) je souhaite inserer la valeur 55

mais sans du tout passer par ma feuille de calcul

merci

Si tu utilises une variable Range, tu l'utilises sans crochets..

Si tu as nommé la plage dans le classeur (Gestionnaire de noms) tu utilises les crochets (notation compacte) [le nom est enregistré avec le classeur et demeure].

Pour modifier une valeur existante ou en affecter une nouvelle, directement dans le tableau : mesvar(1, 4) = 55

Quand tu enregistreras le tableau de variables : [PlgPerso].Value = mesvar

le 55 sera enregistré dans la plage, et conservé, tu le retrouveras la fois suivante...

merci et bien compris Mferrand ... dans la lancé j'ai une derniere question , si je veux verifier l'existence d'une valeur dans une plage de cellule de ma feuille de calcul je vais utiliser l'instruction application.countIf(range("a1:a6",55) >0 . mais dans le cas ou cette plage est une variable , faut il forcement que je passe par une boucle classique ?

Tout dépend si ta variable tableau est le reflet exact de la feuille.

Si tu as modifié un seul des deux tout dépend si tu veux la valeur sur feuille réellement, ou dans le tableau auquel cas il faut boucler dessus en effet.

Et si tu as à le faire des centaines de fois, c'est là qu'un dictionnaire peut être intéressant

Tu as affaire à un tableau, tu passes donc par des boucles pour le parcourir... Mais tu peux faire ça en utilisant une fonction, de ce type :

Function IsInMesVar(ByVal vcherch) As Boolean
    Dim v
    For Each v In mesvar
        If v = vcherch Then IsInMesVar = True: Exit Function
    Next v
    IsInMesVar = False
End Function

fonction que tu utilises pour tester :

If IsInMesVar(55) Then ....

Si tu mets des valeurs de différents types, il faudra peut-être étoffer le code pour éviter des incompatibilités de type...

Tu peux faire renvoyer autre chose que True ou False...

Le tout est de voir les utilisations que tu veux faire, et créer les outils intermédiaires pour faciliter ces utilisations.

Cordialement.

Rechercher des sujets similaires à "tableau dictionnaire"