Affecter une action à plusieurs variables

Youri

XLDnaute Occasionnel
Bonjour à tous,

Comment faire pour exécuter une boucle de sorte à ce que celle-ci affecte une valeur non pas à une variable mais à plusieurs variables simultanément. Je m'explique, si par exemple je veux faire une boucle sur toutes les cellules dans Range("A1:A10") et que je souhaite que la boucle affecte l'adresse des cellules non vides à une série de variables, comment dois-je faire. Ca me paraît étrange de devoir faire pour chaque cellule la chose suivante :
Code:
If Range("A1").Value <> 0 And Range("A1").Value <> 1 Then MaVariable(1,1) = Range("A1").Address Else MaVariable(1,1) = 0
Pour déclarer plusieures variables, je sais comment faire :
Code:
Option Base 1
Dim MaVariable(1 To 10, 1 To 10) As Variant
Je vous remercie à l'avance,
Youri
 

Gorfael

XLDnaute Barbatruc
Re : Affecter une action à plusieurs variables

Youri à dit:
Bonjour à tous,

Comment faire pour exécuter une boucle de sorte à ce que celle-ci affecte une valeur non pas à une variable mais à plusieurs variables simultanément. Je m'explique, si par exemple je veux faire une boucle sur toutes les cellules dans Range("A1:A10") et que je souhaite que la boucle affecte l'adresse des cellules non vides à une série de variables, comment dois-je faire. Ca me paraît étrange de devoir faire pour chaque cellule la chose suivante :
Code:
If Range("A1").Value <> 0 And Range("A1").Value <> 1 Then MaVariable(1,1) = Range("A1").Address Else MaVariable(1,1) = 0
Pour déclarer plusieures variables, je sais comment faire :
Code:
Option Base 1
Dim MaVariable(1 To 10, 1 To 10) As Variant
Je vous remercie à l'avance,
Youri
Salut
P'vez répéter la question ?!? :confused:
Code:
Dim X as integer
Dim Y as integer
Dim MaVariable(1 To 10, 1 To 10)
................
for X=1 to ubound(MaVariable,1)
If Range("A" & x) <> 0 And Range("A" & X) <> 1 Then 
for Y=1 to ubound(MaVariable,2) 
     MaVariable(X,Y) = cells(x,Y)
Next Y
Else 
for Y=1 to ubound(MaVariable,2)
     MaVariable(X,Y) = 0
Next Y
next X
Comme je n'ai pas compris la question...
Pour X=1 jusqu'à max (indice 1) de MaVariable par pas de 1
si Ax <> 0 et 1 alors
Pour Y=1 jusqu'à max (indice 2) de MaVariable par pas de 1
MaVariable(X,Y) = cellule(ligne x,colonneY)
sinon
MaVariable(X,Y) =0

A+
 

Youri

XLDnaute Occasionnel
Re : Affecter une action à plusieurs variables

Re

Dans la même suite : voici un code que j'ai trouvé et qui est censé expliquer mon problème, ce code fonctionne :
Code:
Sub StoreWorksheetNames()
    Dim sheetNames() As String
    Dim totalSheets As Integer
    Dim sheet As Worksheet
    Dim i As Integer
    Dim strMessage As String
    totalSheets = ActiveWorkbook.Worksheets.Count
    ReDim sheetNames(totalSheets)
    For i = 1 To totalSheets
        sheetNames(i - 1) = ActiveWorkbook.Worksheets(i).Name
    Next
    strMessage = "Here are the worksheet names:" & vbCrLf
    For i = 0 To totalSheets - 1
        strMessage = strMessage & sheetNames(i) & vbCrLf
    Next
    MsgBox strMessage
End Sub
J'ai donc repris ce code et j'ai essayé de l'adapter à mes besoins mais le nouveau code ne fonctionne pas. Voici donc le code que j'ai écrit :
Code:
Option Explicit
Option Base 1
Sub test()
Dim MaVariable() As Variant
Dim MaVariable2() As Variant
Dim i As Integer
Dim nombrecellules As Integer
Dim strMessage As String
nombrecellules = Cells(1, 10).Count
ReDim MaVariable(nombrecellules)
ReDim MaVariable2(nombrecellules)
For i = 1 To nombrecellules
    MaVariable(i - 1) = Cells(1, i).Value
Next
For i = 1 To nombrecellules
    MaVariable2(i - 1) = Cells(1, i).Address
Next
For i = 1 To nombrecellules
        strMessage = strMessage & MaVariable(i) & MaVariable2(i) & vbCrLf
Next
MsgBox strMessage
End Sub
Enorme merci à vous si vous pouvez me conseiller car là je suis vraiment perdu. Quoique je fasse, j'ai une erreur : Erreur d'exécution 9 : L'indice n'appartient pas à la sélection.

Merci à l'avance,
Youri

Edit : Bonjour Gorfael, on était en train d'écrire nos messages en même temps.
 
Dernière édition:

Youri

XLDnaute Occasionnel
Re : Affecter une action à plusieurs variables

J'ai adapté mon code grâce à Gorfael et ça fonctionne. Merci beaucoup à toi Gorfael. Par contre, je ne comprend toujours pas comment le code ci-dessus qui permet d'afficher les noms des onglets...
Code:
Option Explicit
Option Base 1
Sub test()
Dim MaVariable(10) As Variant
Dim MaVariable2(10) As Variant
Dim i As Integer
Dim strMessage As String
For i = 1 To 10
    If Cells(1, i).Value <> 0 And Cells(1, i).Value <> "" Then
    MaVariable(i) = Cells(1, i).Value
    Else
    MaVariable(i) = 0
    End If
Next
For i = 1 To 10
    If Cells(1, i).Value <> 0 And Cells(1, i).Value <> "" Then
    MaVariable2(i) = Cells(1, i).Address
    Else
    MaVariable2(i) = 0
    End If
Next
For i = 1 To 10
        strMessage = strMessage & MaVariable(i) & MaVariable2(i) & vbCrLf
Next
MsgBox strMessage
End Sub

Youri
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Affecter une action à plusieurs variables

Youri à dit:
J'ai adapté mon code grâce à Gorfael et ça fonctionne. Merci beaucoup à toi Gorfael. Par contre, je ne comprend toujours pas comment le code ci-dessus qui permet d'afficher les noms des onglets...
....Youri
Salut à tous
Je suppose que c'est de ce code que tu parles :
Code:
[LEFT]Sub StoreWorksheetNames()
   Dim sheetNames() As String
   Dim totalSheets As Integer
   Dim sheet As Worksheet
   Dim i As Integer
   Dim strMessage As String
   totalSheets = ActiveWorkbook.Worksheets.Count
   ReDim sheetNames(totalSheets)
   For i = 1 To totalSheets
       sheetNames(i - 1) = ActiveWorkbook.Worksheets(i).Name
   Next
   strMessage = "Here are the worksheet names:" & vbCrLf
   For i = 0 To totalSheets - 1
       strMessage = strMessage & sheetNames(i) & vbCrLf
   Next
   MsgBox strMessage[/LEFT]

End Sub
ou comment noyer le poisson pour justifier ses compétences :D :​
Code:
[LEFT]Option Base 1 'fait commencer les indices à 1 => voir aide Excel
 
[LEFT]sub test()
Dim X as integer
dim Nom_F() as string
dim Msg_Txt as string[/LEFT]
 
[LEFT]redim Nom_F(thisworkbook.sheets.count)
'redéfinir l'indice de la variqble au nombre de feuille du classeur[/LEFT]
 
[LEFT]for X=1 to ubound(Nom_F)
'pour x=1 jusqu'au plus grand indice de nom_F (nombre de feuille)
nom_F(X)=sheets(x).name
'Nom_F(x)=nom de la feuille de n° d'index=X
msg_txt=msg_txt &  heets(x).name & chr(13)
'on charge la variable texte avec son ancienne valeur, le nom de la
'feuille X et un passage à la ligne
next X[/LEFT]
 
[LEFT]Msgbox("Noms des feuilles : " & chr(13) & msg_txt)
'on affiche la boîte de dialogue

end sub[/LEFT]



[/LEFT]
 

Discussions similaires

Réponses
25
Affichages
854
Réponses
16
Affichages
499

Statistiques des forums

Discussions
312 345
Messages
2 087 464
Membres
103 548
dernier inscrit
civpol