Boucle If V.s. For

Bonjour,

J’ai un petit soucis par rapport à la programmation VBA !

Est-ce qu’on a le droit de programmer comme suivant :

[/code]

For i=1 to 10

If

Instruction A

NEXT

else

Instruction B

end if

[/code]

en gros c'est ca l'idée de mon programme, sauf que ca marche pas.

est ce qu'il y a un autre moyen de faire le meme programme avec autre instruction.

merci d'avance.

Bonjour,

Tu ne peux pas faire commencer un If dans une boucle, et le terminer en dehors de la boucle, ton cas s'écrirait plus:

Sub test()
For i = 1 To 10
    If True Then
        'Instruction A
    Else
        'Instruction B
    End If
Next i
End Sub

justement j'en ai besoin au milieu de la premiere boucle.

est ce que je peux faire autrement ?

Re,

Je ne comprends pas bien, pourquoi dois tu faire sortir ton test de ta première boucle? j'imagine que tu ne peux pas nous mettre ton vrai code pour qu'on voit ce que tu essayes de faire?

Bonjour, salut Ausecour !

Je me permet d'intervenir car ce sujet fait écho à celui-ci :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=127320&p=780611#p780611

Je rejoins les commentaires de @Ausecour, il serait judicieux de détailler ce que tu souhaites faire. Tu ne peux pas imbriquer les 2 structures tel que dans ton premier message...

Edit : ce serait plutôt quelque chose du genre ?

If Condition1 Then
    For i=1 to 10
        Instruction A
    Next i
Else
    Instruction B
End if

Merci pour vos reponses multiples,

je souhaite depuis un logiciel de 3D, verifier grace à ce programme VBA si la reference generée existe deja dans la base de donnée :

si oui incrementer de 1 et verifier egalement s'elle existe aussi

si non enregistrer la reference non existante dans la base de donées.

voila le code :

Sub test_incrementation_ref()

'-----------------------------------------------------------------------------------declaration des variables pour la connexion avec la BBD'
                Dim cn As ADODB.Connection
                Dim Server_Name As String
                Dim Database_Name As String
                Dim User_ID As String
                Dim Password As String
                Dim SQLStr As String
                Dim rs As ADODB.Recordset

cout_estime = 100
'-----------------------------------------------------------------------------------declaration des variables fde test pour la reference

projet = 3659
gabarit = 5

ref_incomplete = projet & " " & gabarit

'-------------------------------------------------------------------------------Boucle de recherche des references existantes dans la BDD
            For i = 0 To 999

                            If i Like "##" Then
                            ref = ref_incomplete & "0" & i & "_V0"

                            ElseIf i Like "#" Then
                            ref = ref_incomplete & "00" & i & "_V0"

                            End If

                                    numero = ref

                                    '********* Requet SQL *********'

                                    SQLStr = "select* from table01 where Numero = '" & numero & "'"

                                        Server_Name = "127.0.0.1"
                                        Database_Name = "base"
                                        User_ID = "root"
                                        Password = "m02pas"

                                        Set rs = New ADODB.Recordset
                                        Set cn = New ADODB.Connection

                                    '*** connexion ***
                                        cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"
                                        rs.Open SQLStr, cn, adOpenStatic

                                                        '--------------------------------------------------------------------------------------------si la ref existe dans la BDD / table01
                                                        If Not rs.EOF Then

                                                                rs.Close
                                                                Set rs = Nothing
                                                                cn.Close
                                                                Set cn = Nothing

            Next

                                                         Else

                                                                rs.Close
                                                                Set rs = Nothing
                                                                cn.Close
                                                                Set cn = Nothing

                                                                GoTo InsertRef

                                                         End If

                                                        '--------------------------------------------------------------------------------------si la ref n'existe pas dans la BDD / table01

Exit Sub

InsertRef:

                                                            Set rs = New ADODB.Recordset
                                                            Set cn = New ADODB.Connection

                                                            '********* Requet SQL *********'
                                                            SQLStr = "insert into table01 (Numero,Cout_estime) values('" & numero & "','" & cout_estime & "')"

                                                            '*** connexion ***
                                                            cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"

                                                            rs.Open SQLStr, cn, adOpenStatic

                                                             'rs.Close
                                                             Set rs = Nothing
                                                             cn.Close
                                                             Set cn = Nothing

                                                            MsgBox "mise à jour reussit" & ref & "ajoutée à la base table01"

End Sub

merci d'avance

Personnellement, je ne comprends pas grand chose à ton code, je pense que la présence d'espaces à tout va et les soucis d'indentation ne facilitent pas le lecture.

En faisant abstraction de ça, tu peux interrompre une boucle FOR avant d'atteindre le dernier élément. Exemple :

For i = 1 To 1000
    If Elément(i) = ElémentCherché Then
        Trouvé = True
        Exit For
    End If
Next i
If Trouvé Then InstructionA

c'est le NEXT là qui me pose probleme :

screenshot 1

merci d'avance

je testerai ta solution Pedro22 et je te tiens au courant.

merci

Re,

si je ne me trompe pas, son code corrigé donne:

Print
Sub test_incrementation_ref()
'-----------------------------------------------------------------------------------declaration des variables pour la connexion avec la BBD'
Dim cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Dim fin As Boolean

cout_estime = 100
'-----------------------------------------------------------------------------------declaration des variables fde test pour la reference
projet = 3659
gabarit = 5
ref_incomplete = projet & " " & gabarit
'-------------------------------------------------------------------------------Boucle de recherche des references existantes dans la BDD
For i = 0 To 999
    If i Like "##" Then
        ref = ref_incomplete & "0" & i & "_V0"
    ElseIf i Like "#" Then
        ref = ref_incomplete & "00" & i & "_V0"
    End If
    numero = ref

    '********* Requet SQL *********'
    SQLStr = "select* from table01 where Numero = '" & numero & "'"
    Server_Name = "127.0.0.1"
    Database_Name = "base"
    User_ID = "root"
    Password = "m02pas"
    Set rs = New ADODB.Recordset
    Set cn = New ADODB.Connection

    '*** connexion ***
    cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"
    rs.Open SQLStr, cn, adOpenStatic

    '--------------------------------------------------------------------------------------------si la ref existe dans la BDD / table01
    fin = rs.EOF
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

    '--------------------------------------------------------------------------------------si la ref n'existe pas dans la BDD / table01
    If fin Then
        Set rs = New ADODB.Recordset
        Set cn = New ADODB.Connection

        '********* Requet SQL *********'
        SQLStr = "insert into table01 (Numero,Cout_estime) values('" & numero & "','" & cout_estime & "')"

        '*** connexion ***
        cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"

        rs.Open SQLStr, cn, adOpenStatic

         'rs.Close
         Set rs = Nothing
         cn.Close
         Set cn = Nothing

        MsgBox "mise à jour reussit" & ref & "ajoutée à la base table01"
    End If

Next i
End Sub

Ce n'est peut-être pas ce que tu veux, mais ça correspond à ce que tu as écris, ce que je ne comprends pas d'ailleurs, c'est que, si tu atteins la fin du fichier, tu fermes tout, si tu n'atteins pas la fin du fichier, tu fermes tout...

Merci à vous tous

vos commentaires m'ont trop aidé.

finalement c'etait le exit for qui me fallait.

voila le code qui fonctionne :

Sub test_incrementation_ref()

'-----------------------------------------------------------------------------------declaration des variables pour la connexion avec la BBD'
                Dim cn As ADODB.Connection
                Dim Server_Name As String
                Dim Database_Name As String
                Dim User_ID As String
                Dim Password As String
                Dim SQLStr As String
                Dim rs As ADODB.Recordset

'-----------------------------------------------------------------------------------declaration des variables fde test pour la reference

projet = 3659
gabarit = 5

ref_incomplete = projet & " " & gabarit

'-------------------------------------------------------------------------------Boucle de recherche des references existantes dans la BDD
            For i = 0 To 999

                            If i Like "##" Then
                            ref = ref_incomplete & "0" & i & "_V0"

                            ElseIf i Like "#" Then
                            ref = ref_incomplete & "00" & i & "_V0"

                            End If

                                    numero = ref

                                    '********* Requet SQL *********'

                                    SQLStr = "select* from table01 where Numero = '" & numero & "'"

                                        Server_Name = "127.0.0.1"
                                        Database_Name = "base"
                                        User_ID = "root"
                                        Password = "m02pas"

                                        Set rs = New ADODB.Recordset
                                        Set cn = New ADODB.Connection

                                    '*** connexion ***
                                        cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"
                                        rs.Open SQLStr, cn, adOpenStatic

                                                        '--------------------------------------------------------------------------------------------si la ref existe dans la BDD / table01
                                                        If Not rs.EOF Then

                                                                rs.Close
                                                                Set rs = Nothing
                                                                cn.Close
                                                                Set cn = Nothing

                                                         Else

                                                                rs.Close
                                                                Set rs = Nothing
                                                                cn.Close
                                                                Set cn = Nothing

                                                                                   '--------------------------------------------------------------------------------------si la ref n'existe pas dans la BDD / table01

                                                                                    Set rs = New ADODB.Recordset
                                                                                    Set cn = New ADODB.Connection

                                                                                    '********* Requet SQL *********'
                                                                                    SQLStr = "insert into table01 (Numero,Cout_estime) values('" & numero & "','" & cout_estime & "')"

                                                                                    '*** connexion ***
                                                                                    cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";Trusted_Connection=yes;"

                                                                                    rs.Open SQLStr, cn, adOpenStatic

                                                                                     'rs.Close
                                                                                     Set rs = Nothing
                                                                                     cn.Close
                                                                                     Set cn = Nothing

                                                                                    MsgBox "mise à jour reussit" & ref & "ajoutée à la base table01"

                                                                                    Exit For

                                                         End If

                           Next

End Sub
Rechercher des sujets similaires à "boucle"