[Catégorie modifiée .Net -> VBA] Variable nom dynamique boucle for

yokulan Messages postés 37 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 juillet 2012 - 17 janv. 2012 à 10:47
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 janv. 2012 à 11:18
Bonjour,

Je recherche la façon de pouvoir concaténer un nombre à un nom de variable pour utiliser dans une boucle for. Actuellement je fonctionne comme ceci:

If SommeP1 > 0 Or tbx_qte1.Text > 0 Then 'Si heures P1 ou Quantités Alors
                NumLigne = GetLastLigne("POSTE1", "A200")
                sheet = wbExcel.Worksheets.Item("POSTE1")
                sheet.Range("A" & NumLigne).Value = datepicker.Value
                sheet.Range("E" & NumLigne).Value = SommeP1
                sheet.Range("B" & NumLigne).Value = tbx_qte1.Text
            End If
            '-- POSTE2 --
            If SommeP2 > 0 Or tbx_qte2.Text > 0 Then
                NumLigne = GetLastLigne("POSTE2", "A200")
                sheet = wbExcel.Worksheets.Item("POSTE2")
                sheet.Range("A" & NumLigne).Value = datepicker.Value
                sheet.Range("E" & NumLigne).Value = SommeP2
                sheet.Range("B" & NumLigne).Value = tbx_qte2.Text
            End If


Je voudrais obtenir un truc du genre:
For i=1 to 2
If SommeP & i > 0 Or tbx_qte & i.Text > 0 Then 'Si heures P1 ou Quantités Alors
                NumLigne = GetLastLigne("POSTE" & i, "A200")
                sheet = wbExcel.Worksheets.Item("POSTE" & i)
                sheet.Range("A" & NumLigne).Value = datepicker.Value
                sheet.Range("E" & NumLigne).Value = SommeP & i
                sheet.Range("B" & NumLigne).Value = tbx_qte & i.Text
            End If
next


Merci pour votre aide

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
17 janv. 2012 à 10:54
Bonjour,

Avant toute autre chose : Si tu développes sous VBA/Excel, il te faut poster dans la section adéquate (Langages dérivés > VBA) et non da ns la présente !
Nous te serions reconnaissant de bien vouloir observer cette discipline à l'avenir (c'est important)
les expressions telles que celle-ci :
sheet = wbExcel.Worksheets.Item("POSTE" & i)
sont correctes
Il nous est par contre impossible de vérifier le bien fondé de celle-ci :
NumLigne = GetLastLigne("POSTE" & i, "A200")

sans connaître le code exact (entête comprise) de ta fonction Numligne !
______________




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
yokulan Messages postés 37 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 juillet 2012
17 janv. 2012 à 10:56
Désolé j'ai oublié de donner le code de la fonction. Sinon je code sous VB.NET et non VBA.
Voici le code de la fonction GetLastLigne():

    Function GetLastLigne(ByVal feuille As String, ByVal dernierecellule As String)
        Dim lastligne As Integer = 0
        sheet = wbExcel.Worksheets.Item(feuille)
        lastligne = sheet.Range(dernierecellule).End(Excel.XlDirection.xlUp).Row
        If feuille = "POINTAGES" Then
            If lastligne = 11 Then
                lastligne = lastligne + 2
            Else
                lastligne = lastligne + 1
            End If
        ElseIf feuille "POSTE1" Or feuille "POSTE2" Or feuille = "POSTE3" Or feuille = "POSTE4" Or feuille = "POSTE5" Or feuille = "POSTE6" Then
            If lastligne = 9 Then
                lastligne = lastligne + 2
            Else
                lastligne = lastligne + 1
            End If
        ElseIf feuille = "DETAIL" Then
            lastligne = lastligne + 1
        End If
        Return lastligne
    End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
17 janv. 2012 à 11:13
je ne vois alors pas pourquoi cela ne marcherait pas. Encore que tu devrais typer ta fonction (elle ne l'est pas) et retourne donc un Variant !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
17 janv. 2012 à 11:18
Elle devrait être typée en string et sa valeur utilisée ainsi :

sheet.Range("E" + NumLigne).Value = SommeP & i
sheet.Range("B" + NumLigne).Value = tbx_qte & i.Text

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0