Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mettre une variable dans une macro?

4 réponses
Avatar
Uncas Cooper
Bonjour a tous,

Par avance merci de votre aide.

Voici la situation:
j'ai une macro Write_value()

j'ai une deuxieme macro boucle()

dans cette macro boucle si je fais:
Call write_value("Toto")

pas de probleme.

Mais si je fais quelque chose du genre:

toto = Cells(ligne, 1).Value & "-" & code_ISIC
Call write_value (Toto)

Impossible de "passer" ma variable Toto a l'autre macro, et je ne trouve
pas. Je dois declarer quelquechose? ou? Si je pointe sur la variable
toto est a l'air d'avoir la bonne valeur.

Merci beaucoup.

Uncas

pour info les deux subs sont ci dessous:
-------------------------------------------------------
Sub boucle_en_ligne()

Dim code_ISIC, clef As String
code_ISIC = "FR0004254035"

Dim ligne As Integer

Sheets(2).Select

For ligne = 3 To 100
clef = Cells(ligne, 1).Value & "-" & code_ISIC
clef = "cat"
Call write_value(clef)

Next

End Sub


--------------------------------------------------------
Public Sub write_value(key As String)

Sheets(1).Select
Cells.Find(what:=key).Offset(0, 3).Select
tempo = Selection.Value
Sheets(2).Cells(2, 2).Value = tempo

End Sub

4 réponses

Avatar
francois.forcet
Salut à toi

Pourquoi ne pas déclarer ta variable toto en variable Public en
mettant en tout début cette ligne :

Public toto

La valeur toto récupéré en 1° macro (toto = Cells(ligne, 1).Value &
"-" & code_ISIC )


sera reconduite dans la 2° macro sans utiliser la ligne : Call
write_value (Toto)

directement utilisable comme par exemple MsgBox(toto)

Seul impératif éxécuter la 1° macro avant d'éxécuter la 2° en mettant
en fin de 1° Macro la commande :

Run("2° Macro")

Celà devrait faire

Dis moi !!!!
Avatar
Uncas Cooper
Bonjour MichDenis,

pardon j'ai fait un coper coller un peu rapide.
Je n'active qu'une des deux lignes, l'autre je la mets en commentaire.
quand j'attribue "cat" a clef ça marche tout seul mais pas dans l'autre cas.

Merci pour la proposition je vais voir si je m'en sors



MichDenis escribió:
à quoi serve ces 2 lignes de code :

| clef = .Cells(ligne, 1).Value & "-" & code_ISIC
| clef = "cat"

Que veux-tu attribuer comme valeur à Clef ? Tu as droit à une valeur à la fois !

Dans cette procédure, Public Sub write_value(key As String), tu utilises
la méthode "Find". Cette dernière renvoie une erreur de type 91 lorssqu'elle
ne trouve pas donc tu dois utiliser avant ceci : On error resume next

Voici une façon de réécrire tes macros :

'----------------------------
Sub boucle_en_ligne()

Dim ligne As Integer
Dim code_ISIC As String, clef As String
code_ISIC = "FR0004254035"

With Sheets(2) 'Préférable d'inscrire son nom
For ligne = 3 To 100
clef = .Cells(ligne, 1).Value & "-" & code_ISIC
clef = "cat"
' à toi de déterminer où les données doivent être copiées.
.Cells(2, ligne) = Trouve_value(clef)
Next
End With
End Sub
'----------------------------

'----------------------------
Public Function Trouve_value(key As String)
On Error Resume Next
With Sheets("NomFeuille") 'nom feuille à déterminer
Trouve_value = .Cells.Find(what:=key).Offset(0, 3)
End With
End Function
'----------------------------




"Uncas Cooper" a écrit dans le message de news: %
Bonjour a tous,

Par avance merci de votre aide.

Voici la situation:
j'ai une macro Write_value()

j'ai une deuxieme macro boucle()

dans cette macro boucle si je fais:
Call write_value("Toto")

pas de probleme.

Mais si je fais quelque chose du genre:

toto = Cells(ligne, 1).Value & "-" & code_ISIC
Call write_value (Toto)

Impossible de "passer" ma variable Toto a l'autre macro, et je ne trouve
pas. Je dois declarer quelquechose? ou? Si je pointe sur la variable
toto est a l'air d'avoir la bonne valeur.

Merci beaucoup.

Uncas

pour info les deux subs sont ci dessous:
-------------------------------------------------------
Sub boucle_en_ligne()

Dim code_ISIC, clef As String
code_ISIC = "FR0004254035"

Dim ligne As Integer

Sheets(2).Select

For ligne = 3 To 100
clef = Cells(ligne, 1).Value & "-" & code_ISIC
clef = "cat"
Call write_value(clef)

Next

End Sub


--------------------------------------------------------
Public Sub write_value(key As String)

Sheets(1).Select
Cells.Find(what:=key).Offset(0, 3).Select
tempo = Selection.Value
Sheets(2).Cells(2, 2).Value = tempo

End Sub


Avatar
Uncas Cooper
ça a marché nickel, merci beaucoup!

C'est juste c'est la premiere fois que je mets a utiliser des variables
et je ne suis pas du tout a l'aise encore pour savoir comment je les
definis, quelles portee elles ont etc...


merci encore

uncas


escribió:
Salut à toi

Pourquoi ne pas déclarer ta variable toto en variable Public en
mettant en tout début cette ligne :

Public toto

La valeur toto récupéré en 1° macro (toto = Cells(ligne, 1).Value &
"-" & code_ISIC )


sera reconduite dans la 2° macro sans utiliser la ligne : Call
write_value (Toto)

directement utilisable comme par exemple MsgBox(toto)

Seul impératif éxécuter la 1° macro avant d'éxécuter la 2° en mettant
en fin de 1° Macro la commande :

Run("2° Macro")

Celà devrait faire

Dis moi !!!!


Avatar
Misange
Bonjour

alors cette page est pour toi !
http://www.excelabo.net/excel/macrosvariables.php

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Uncas Cooper a écrit :
ça a marché nickel, merci beaucoup!

C'est juste c'est la premiere fois que je mets a utiliser des variables
et je ne suis pas du tout a l'aise encore pour savoir comment je les
definis, quelles portee elles ont etc...


merci encore

uncas


escribió:
Salut à toi

Pourquoi ne pas déclarer ta variable toto en variable Public en
mettant en tout début cette ligne :

Public toto

La valeur toto récupéré en 1° macro (toto = Cells(ligne, 1).Value &
"-" & code_ISIC )


sera reconduite dans la 2° macro sans utiliser la ligne : Call
write_value (Toto)

directement utilisable comme par exemple MsgBox(toto)

Seul impératif éxécuter la 1° macro avant d'éxécuter la 2° en mettant
en fin de 1° Macro la commande :

Run("2° Macro")

Celà devrait faire

Dis moi !!!!