Probleme Code fonction While et if

Signaler
-
 Marg12 -
Bonjour à tous,

J'ai un problème, j'ai crée une boucle mais elle ne fonctionne pas
Pouvez vous m'aider s'il vous plait ?

Voici le code :
Private Sub Btn_recherche_Click()

'Choix des variables
    Dim i As Integer
    Dim n As Integer
    Dim compt As Integer

'Choix des variables texte
    Dim nom_lot As String
    Dim eqt_lot As String

    i = 0
    n = 0
    compt = 1

Dim reponse As String

reponse = MsgBox("Avez-vous fini l'analyse envrionnementale ?", vbOKCancel)

If reponse = 1 Then

'Aller sur la feuille active
    Sheets("AES").Activate

'vérification qu'il y a déjà des valeurs dans le AE

    While Sheets("AES").Cells(n + 8, 1) <> ""

                If Sheets("AES").Cells(compt + 7, 8) = Oui Then
        
                'Copie numero d'ordre
                Sheets("Bilan_AES").Cells(compt + 7, 1) = compt
                 
                'Activité / phase du cycle de vie
                Sheets("Bilan_AES").Cells(compt + 7, 2) = Sheets("AES").Cells(n + 2, 2)
                
                'Aspect
                Sheets("Bilan_AES").Cells(compt + 7, 3) = Sheets("AES").Cells(n + 2, 3)
                 
                'Mode normal
                Sheets("Bilan_AES").Cells(compt + 7, 4) = Sheets("AES").Cells(n + 2, 4)
                
                'Mode anormal
                Sheets("Bilan_AES").Cells(compt + 7, 5) = Sheets("AES").Cells(n + 2, 5)
                
                'Mode accidentel
                Sheets("Bilan_AES").Cells(compt + 7, 6) = Sheets("AES").Cells(n + 2, 6)
                
                'Conformité réglementaire
                Sheets("Bilan_AES").Cells(compt + 7, 7) = Sheets("AES").Cells(n + 2, 7)
                
                'AES
                Sheets("Bilan_AES").Cells(compt + 7, 8) = Sheets("AES").Cells(n + 2, 8)
                
                'Cotation (F,G et S)
                Sheets("Bilan_AES").Cells(compt + 7, 9) = Sheets("AES").Cells(n + 2, 9)
                Sheets("Bilan_AES").Cells(compt + 7, 10) = Sheets("AES").Cells(n + 2, 10)
                Sheets("Bilan_AES").Cells(compt + 7, 11) = Sheets("AES").Cells(n + 2, 11)
                
                'Copier formule de nombre à cotation
                Sheets("Bilan_AES").Cells(i + 8, 12) = "=(2*I" & i + 8 & ")+(3*J" & i + 8 & ")+K" & i + 8
                
                'Moyen de prévention
                Sheets("Bilan_AES").Cells(compt + 7, 13) = Sheets("AES").Cells(n + 2, 13)
                
                'Cotation M
                Sheets("Bilan_AES").Cells(compt + 7, 14) = Sheets("AES").Cells(n + 2, 14)
                
                'Copier formule de nombre à impact significatif
                Sheets("Bilan_AES").Cells(i + 8, 15) = "=L" & i + 8 & "*N" & i + 8
                
                'Formule action à faire ou pas
                '=SI(H8="Oui";"Oui";SI(O8>=108;"Oui";"Non"))
                Sheets("Bilan_AES").Cells(i + 8, 16).Formula = "=IF(H" & i + 8 & "=""Oui"",""Oui"",IF(O" & i + 8 & ">=45,""Oui"",""Non""))"
                
                'Action à metttr en place
                Sheets("Bilan_AES").Cells(compt + 7, 17) = Sheets("BDD").Cells(n + 2, 10)
                
                compt = compt + 1
            
            End If
        
    n = n + 1
    Wend
End If

'Aller sur la feuille active
    Sheets("Bilan_AES").Activate
    

End Sub


EDIT : Ajout des BALISES DE CODE

Configuration: Windows / Edge 88.0.705.63

2 réponses

Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021
3 276
Bonjour,
Déjà, merci d'utiliser les balises de code lorsque tu postes du code sur le forum.
Explications (à lire entièrement !) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, dans ton IF, si Oui est une chaine de texte et non le nom d'une variable... tu dois la mettre entre quotes
 If Sheets("AES").Cells(compt + 7, 8) = "Oui" Then

>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

ça copie une ligne même si elle comporte un oui ou un non...
J'ai compris le principe mais je n'arrive pas à l'écrire...

https://www.cjoint.com/data3/KBlqhgpqJ6V_Analyse-Environnementale-Vitrolles-V2.xlsm

Je te mets le lien au cas ou si tu peux maider a comprendre plus vite
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021
3 276 > Marg12
Ben là ta condition est bonne maintenant. que tu utilises le "n" (au lieu du compt).. tu rentres bien dans le IF

Par contre, tu écris les données en te basant sur ta variable (compt +10 )
et en effet, il faudrait incrémenter ta variable compt dans le if ..
>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

Donc je dois écrire compt = compt + 1 dans mon if ou je dois remplacer tous les compt par n pour l'incrémenter ?
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021
3 276 > Marg12
remettre compt =compt +1 dans ton if ....

C'est toi qui a écrit ce code ou pas ???
J'ai l'impression que tu ne sais pas du tout comment il est sensé fonctionner....
>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

Je le remet à la fin oui,
Non j'ai participé à l'écriture et on ne m'a pas très bien expliqué justement même si je posais des questions et je l'ai repris pour une autre macro mais elle ne fonctionne pas comme je les souhaiterais
J'ai comporis le principe mais je pense que je n'ai aps les bases
Bonjour,

Pouvez vous m'aider s'il vous plait ?
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021
3 276
Qu'est-ce qui te manque désormais ?
Tu as remis l'incrémentation de ta variable compt dans ton IF ou pas ?

Montres nous ici ton code modifié ( en utilisant les balises de code )
>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

Le code ne fonctionne toujours pas comme je le souhaiterais
J'ai remis l'incrémentation dans ma variable à la fin
En faisant le pas à pas je vois qu'il rentre correctement dans mon if quand les lignes possède un "oui" mais il ne copie pas les bonnes lignes j'ai du rater un truc

Private Sub Btn_recherche_Click()

'Choix des variables
    Dim i As Integer
    Dim n As Integer
    Dim compt As Integer

'Choix des variables texte
    Dim nom_lot As String
    Dim eqt_lot As String

    i = 0
    n = 0
    compt = 1

Dim reponse As String

reponse = MsgBox("Avez-vous fini l'analyse envrionnementale ?", vbOKCancel)

If reponse = 1 Then

'Aller sur la feuille active
    Sheets("AES").Activate

'vérification qu'il y a déjà des valeurs dans le AE

    While Sheets("AES").Cells(n + 8, 1) <> ""

        If Sheets("AES").Cells(n + 8, 8) = "Oui" Then
        
                'Copie numero d'ordre
                Sheets("Bilan_AES").Cells(compt + 10, 1) = compt
                 
                'Activité / phase du cycle de vie
                Sheets("Bilan_AES").Cells(compt + 10, 2) = Sheets("AES").Cells(n + 7, 2)
                
                'Aspect
                Sheets("Bilan_AES").Cells(compt + 10, 3) = Sheets("AES").Cells(n + 7, 3)
                 
                'Mode normal
                Sheets("Bilan_AES").Cells(compt + 10, 4) = Sheets("AES").Cells(n + 7, 4)
                
                'Mode anormal
                Sheets("Bilan_AES").Cells(compt + 10, 5) = Sheets("AES").Cells(n + 7, 5)
                
                'Mode accidentel
                Sheets("Bilan_AES").Cells(compt + 10, 6) = Sheets("AES").Cells(n + 7, 6)
                
                'Conformité réglementaire
                Sheets("Bilan_AES").Cells(compt + 10, 7) = Sheets("AES").Cells(n + 7, 7)
                
                'AES
                Sheets("Bilan_AES").Cells(compt + 10, 8) = Sheets("AES").Cells(n + 7, 8)
                
                'Cotation (F,G et S)
                Sheets("Bilan_AES").Cells(compt + 10, 9) = Sheets("AES").Cells(n + 7, 9)
                Sheets("Bilan_AES").Cells(compt + 10, 10) = Sheets("AES").Cells(n + 7, 10)
                Sheets("Bilan_AES").Cells(compt + 10, 11) = Sheets("AES").Cells(n + 7, 11)
                
                'Copier formule de nombre à cotation
                Sheets("Bilan_AES").Cells(i + 11, 12) = "=(2*I" & i + 11 & ")+(3*J" & i + 11 & ")+K" & i + 11
                
                'Moyen de prévention
                Sheets("Bilan_AES").Cells(compt + 10, 13) = Sheets("AES").Cells(n + 7, 13)
                
                'Cotation M
                Sheets("Bilan_AES").Cells(compt + 10, 14) = Sheets("AES").Cells(n + 7, 14)
                
                'Copier formule de nombre à impact significatif
                Sheets("Bilan_AES").Cells(i + 11, 15) = "=L" & i + 11 & "*N" & i + 11
                
                'Formule action à faire ou pas
                '=SI(H8="Oui";"Oui";SI(O8>=108;"Oui";"Non"))
                Sheets("Bilan_AES").Cells(i + 11, 16).Formula = "=IF(H" & i + 8 & "=""Oui"",""Oui"",IF(O" & i + 8 & ">=45,""Oui"",""Non""))"
                
                'Action à mettre en place
                Sheets("Bilan_AES").Cells(compt + 10, 17) = Sheets("AES").Cells(n + 7, 17)
                
     compt = compt + 1
     
            End If
        
    n = n + 1
    Wend
End If

'Aller sur la feuille active
    Sheets("Bilan_AES").Activate
    

End Sub
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021
3 276 > Marg12
C'est normal que tu essaies de récupérer les données qui se trouvent à la ligne n + 7
Alors que la vérification du oui se fait sur la ligne n+8 ?
>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

Non ce n'etait pas normal et c'etait ça l'erreur merci beaucoup pour toute votre aide vraiment c'est super gentil...
>
Messages postés
31451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 février 2021

Merci pour votre patience et votre aide