Récupérer la valeur d'une variable

Bonjour à tous,

Je récupère, grace à une boucle, des valeurs que je nomme n1, n2, n3, etc ...que je désire utiliser par la suite
Pas de problème si j'utilise ce type de code

Range("A1") = n1
Range("A2") = n2
Range("A3") = n3
etc ....

Mais comme j'ai un grand nombre de valeurs n"x", pour éviter d'écrire "x" lignes je voudrais utiliser une boucle du genre

For I = 1 to 250
     Range("A" & I) = nI
Next I

Evidemment le "nI" n'est pas reconnu. Quelle est la bonne syntaxe (écriture) pour que le nI puisse être les valeurs successives des n1, n2, n3, etc .... J'ai essayé Val(nI) mais ça ne marche pas.

Merci et bien cordialement

Salut Jacky,

les voies de VBA seront encore moins impénétrables quand tu nous auras expliqué comment tu calcules n1, n2... !?


A+

Bonsoir,

la seule façon (je crois) de rendre variable une variable sous VBA c'est de créer un tableau :
Dim N(1 to 100), permet de mettre en mémoire 100 variable de N : N1, N2 avec N(1), N(2)

Votre boucle devient donc :

For i = 1 to 100
    Range("A"&i)=N(i)
Next i

Maintenant reste à savoir d'où viennent les I afin de les mettre dans le tableau, par exemple s'il viennent du résultat d'une formule fonction de valeur de cellules de la colonne D :

For i= 1 to 100
    N(i) = Range("D"&i)+(i*5)
Next i

@ bientôt

LouReeD

Bonjour à tous,

et si on crée un tableau à 2 dimensions on peut l'écrire sans boucle :

Dim vn(1 To 100, 1 To 1) ' je préfère un nom a au moins 2 lettres
vn(2, 1) = 12 ' exemple
vn(4, 1) = 5 ' exemple
Range("A1").Resize(UBound(vn)) = vn

eric

Bonjour à vous trois et merci pour vos réponses.

Curulis57, mes valeurs n1, n2, n3, .... ne sont que les résultats obtenus en effectuant un dénombrement dans une liste de plus de 2500 nombres situés dans une colonne :
n1=nombre de 1 dans cette colonne
n2=nombre de 2 dans cette colonne
etc ...

Sinon, en effet j'avais bien pensé à stocker toutes ces valeurs dans un tableau comme vous me le préconnisez, mais j'espérais pouvoir ne pas "alourdir" mon code en évitant l'utilisation d'un tableau. Donc je vais procéder selon ma première idée, c'est à dire selon vos conseils. Un grand merci

Bon dimanche à vous trois

Jacky

C'est encore moi, tout simplement pour vous dire que l'utilisation d'un tableau est en effet la solution idéale. C'est ce que j'ai fait ...... et ça marche. Il m'a fallu tout simplement prendre un peu de patience pour remplir mon tableau

Encore merci à chacun d'entre vous

Bonjour

A priori ma vision de tableau n'était pas la bonne...

Pas grave ce sera pour plus tard...

@ bientôt

LouReeD

Salut LouReed

A priori ma vision de tableau n'était pas la bonne...

Pas du tout, comme je l'ai dit c'est la chose à laquelle j'avais pensé à priori et que finalement j'ai réalisée. J'espérais tout bêtement touver une solution sans tableau mais je pense que ce n'est pas possible !!

Bonne journée

Salut Jacky,
Salut l'équipe,

Il m'a fallu tout simplement prendre un peu de patience pour remplir mon tableau

2500 lignes doivent être intégrées dans un tableau en un claquement de doigt.
Qu'appelles-tu prendre patience, comment t'y prends-tu, que dois tu faire exactement ?


A+

Re,

au vu de ta description et en supposant tes valeurs en D, ceci devrait le faire :

Sub test()
    Dim nMax As Long, vn() As Long, i As Long
    nMax = 100 'compter nombres de 1 à 100
    ReDim vn(1 To nMax, 1 To 1)
    For i = 1 To nMax
        vn(i, 1) = Application.CountIf(Columns("D"), i)
    Next i
    [A1].Resize(nMax) = vn
End Sub

eric

2essai3.xlsm (46.52 Ko)

Re,

Je croyais que ce post pouvait être fermé et considéré comme résolu, mais non, il suscite encore des réactions intéressantes, c'est parfait.

Depuis nos derniers entretiens, j'ai réfléchi (eh oui ça m'arrive !) et je me suis demandé si on ne pouvait pas éviter le VBA et utiliser des formules. Le produit de mes réflexions m'ont amené au résultat que vous trouverez en pièce jointe .... mais, et oui il y a un mais, les résultats obtenus par formule sont différents de ceux obtenus en VBA ?????

Curulis 57

2500 lignes doivent être intégrées dans un tableau en un claquement de doigt.

Qu'appelles-tu prendre patience, comment t'y prends-tu, que dois tu faire exactement ?

en effet, un claquement de doigt (sur le clavier) peut suffir, je crois avoir exagéré en disant avoir perdu patience, mais le fait de tourner un peu en rond pendant un certain temps m'a fait perdre la tête (lol)

Bonsoir aussi (oui, ça se fait),

tu lis les propositions ou tu as posé ta question sans cette intention ?
eric

Bonsoir Eriiic

Bonsoir aussi (oui, ça se fait),

tu lis les propositions ou tu as posé ta question sans cette intention ?

Je ne comprends pas !!

Jacky

Salut Jacky,
Salut l'équipe,

avec des résultats équivalents à tes formules

Private Sub CommandButton1_Click()
'
Dim tTab, tOut, iIdx%
'
Application.ScreenUpdating = False
'
tTab = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
Range("H2:H21").Value = 0
tOut = Range("H2:H21").Value
'
For x = 1 To UBound(tTab, 1)
    iIdx = IIf(CDbl(tTab(x, 1)) / 5 - CInt(CDbl(tTab(x, 1)) / 5) > 0, Fix(CDbl(tTab(x, 1)) / 5) + 1, CInt(CDbl(tTab(x, 1)) / 5))
    tOut(iIdx, 1) = CInt(tOut(iIdx, 1)) + 1
Next
Range("H2").Resize(UBound(tOut, 1), 1).Value = tOut
'
Application.ScreenUpdating = True
'
End Sub
5jacky.xlsm (46.40 Ko)


A+

Bonsoir Cuulis57,

merci pour ce fichier que tu me fais parvenir et qui met en adéquation les deux méthode (formules et VBA).
Malheureusement au premier abord je ne comprends pas ton code
Je prendrai le temps pour le détailler et essayer de le comprendre ultérieurement
Encore merci et bonne soirée

Jacky

Je ne comprends pas !!

je t'ai fait une proposition à 12:39.
Tu pourrais au moins tester et faire un retour non ?
C'est la moindre des politesse.
Bref, pas inné pour certains....

Eriiic, désolé mais très involontairement, ta proposition faite à 12:39 m'a complètement échapée car j'étais pris dans l'ensemble de mes réflexions plus que nébuleuses.
Je te prie de bien vouloir accepter toutes mes excuses les plus sincères, car ce n(='est pas dans mes habitudes, et loin de là, d'être incorrect avec les personnes qui prennent le temps de se pencher sur mes questions, c'est inné chez moi. J'espère que ne m'en tiendras pas rigueur. Je vais dès que possible étudier ta proposition et de faire part de ce que j'en aurai compris
Bonne soirée

Bonjour Eric,

J'ai pris le temps d'étudier ta proposition de code.
Je me pose une petite question en ce qui concerne les résultats obtenus et inscrits colonne "A" (voir fichier joint - feuille 2)
Pourrais-tu m'expliquer la ligne : [A1].Resize(nMax) = vn, qui, selon moi, ne répond pas à ce que l'on attend
Encore merci et bonne journée

2essai3.xlsm (51.79 Ko)

Bonjour,

ne répond pas à ce que l'on attend

A aucun moment tu n'as décrit de façon explicite ton besoin exact.
Je me suis basé sur un de tes post avec :
n1=nombre de 1 dans cette colonne
n2=nombre de 2 dans cette colonne

Ce que fait ma proposition.
Ta formule fait autre chose, et tu as démarrer un autre topic avec une demande encore différente...

Avec les changements de paramètres que tu as fait, tu lui demandes de compter combien il y a de nombre de 1 à 10 dans D.
Il y a bien un seul 7 et un seul 10 dans D, notés 1 en A7 et A10
eric

PS : nMax est le nombre maxi dont tu veux connaitre le dénombrement. Si tu demandes de 1 à 10 il n'y a bien que 10 résultats à sortir. Il fallait laisser nMax à 100

Re,

Avec les changements de paramètres que tu as fait, tu lui demandes de compter combien il y a de nombre de 1 à 10 dans D.

Il y a bien un seul 7 et un seul 10 dans D, notés 1 en A7 et A10

OK, je comprends. Mon incompréhension était due au fait que je n'avais pas fait la relation entre les résultats de la colonne "A" avec la bande numérique (bleutée) à gauche. Donc si je ne me trompe pas, si par exemple il y a un 2 en "A" face au 7 de la bande numérique cela signifie que dans ma liste il y a 2 fois le nombre 7. Est ce bien cela ?

Une fois de plus désolé pour toute la confusion que j'ai pu apporter lors de ces échanges, mais je me suis moi même fourvoyé dans mes recherches car mes idées étaient pàlus que nébuleuses. Finalement ce que je désire réaliser se trouve "Feuil1" à ceci près que j'obtiens des résultats différents selon que j'utilise des formules ou le VBA
Encore merci
Jacky

Rechercher des sujets similaires à "recuperer valeur variable"