Calculs Excel sur des centaines de lignes

Bonjour à toutes et à tous.

Je viens à vous aujourd’hui car je travaille sur un fichier Excel plutôt complexe, et j’essaye d’avoir de l’aide concernant la méthode utilisée.

Je vais tout d’abord essayer de vous expliquer son fonctionnement :

Dans la première feuille (ici appelée « Données à rentrer »), l’utilisateur rentre les valeurs dans les différentes cases (celles en verte). Une fois les données rentrées, le fichier excel calcul le résultat voulu en fonction d’un arbre de décision que j’ai créé à part (je vous en parle juste après).

Actuellement, je fais les calculs cellule par cellule (en effet, pour chaque « composant » rentré sur la première feuille, une réponse différente va apparaître), et on peut voir sur la feuille « Calculs techno conseillée » que les calculs dans les cellules excels sont très longs, mais surtout sont répétés à chaque cellule (j’ai limité le nombre de cellules pour ne pas avoir un temps de calcul trop élevé).

Ces calculs dépendent d’un arbre que j’ai créé manuellement (voir dans la feuille "Arbre de décisions" du fichier excel).

Une fois les calculs réalisés par le classeur, le résultat apparaît sur chaque ligne dans la feuille « Résultats ».

Mes questions sont les suivants :

-Au lieu de réécrire le calcul dans chaque ligne de mon classeur, est-ce qu’il y a un moyen de réaliser le calcul seulement lorsque l’utilisateur rentre des valeurs dans la ligne associée sur la première feuille ?

-Aussi, mes calculs que je réalise dans les cellules excel (avec des fonctions relativement simples), peuvent-ils être réalisés d’une autre manière (VBA ?), en sachant que je suis un novice sur VBA ?

-Et enfin, pensez-vous que créer un arbre comme celui montré plus haut mais directement sur Excel pourrait servir à alléger mes calculs et à être plus lisible ? Je parle par exemple d’un arbre fonctionnant comme un graphcet, qui s’incrémente à chaque fois qu’une cellule est remplie sur la première feuille ?

J’espère avoir été clair sur mes demandes, et je sais qu’elles ne sont pas simples…

Je vous remercie par avance pour votre aide.

Bonne fin de journée.

Cordialement,

-_Loki

Bonjour et sur le forum,

Je vais essayer d'apporter des réponses à tes questions:

-Au lieu de réécrire le calcul dans chaque ligne de mon classeur, est-ce qu’il y a un moyen de réaliser le calcul seulement lorsque l’utilisateur rentre des valeurs dans la ligne associée sur la première feuille ?

Oui c'est possible, mais par formule pas vraiment, quand tu veux recalculer ton classeur où une feuille, toutes les formules de la feuille vont être recalculées, même celles qui n'ont pas bougé... En revanche en VBA tu peux intercepter la modification d'une cellule


-Aussi, mes calculs que je réalise dans les cellules excel (avec des fonctions relativement simples), peuvent-ils être réalisés d’une autre manière (VBA ?), en sachant que je suis un novice sur VBA ?

Elles peuvent être faites en VBA ça c'est sûr.


-Et enfin, pensez-vous que créer un arbre comme celui montré plus haut mais directement sur Excel pourrait servir à alléger mes calculs et à être plus lisible ? Je parle par exemple d’un arbre fonctionnant comme un graphcet, qui s’incrémente à chaque fois qu’une cellule est remplie sur la première feuille ?

Hum... Je ne vois pas vraiment comment çe pourrait allégrer tes calculs

Bonjour Ausecour, et merci pour ta réponse.

Je me suis mis à faire ma feuille sous VBA.

J'ai trouvé un moyen d'automatiser le calcul seulement pour les cellules qui sont remplies dans ma première feuille avec un "For ... To... qui va chercher le nombre de cellule remplies sur la première feuille.

Laisse tomber pour mon histoire de Graphcet, j'étais en plein délire, ça ne pourra jamais être moins lourd

Sinon, j'ai un souci sur mon VBA, j'ai cherché par tous les moyens d’où pouvait venir mon erreur, calculé puis recalculé le nombre de If et End Ifn mais j'ai le message "Else sans If" qui apparaît au lancement de ma macro...

J'ai pourtant bien fait attention à ne pas faire d'oubli ou d'erreur de syntaxes, je l'ai surement loupée...

Est-il possible de m'aider sur cette erreur?

Attention, le code est assez long...

Merci d'avance.

Bonne journée.

Private Sub Calcul_Machine() 'Machine de pose privilégiée
 Dim Result_calcul_machine As String
 Dim Colle As String
 Dim PAB As String
 Dim Vis_Sans_Fin As Boolean
 Sheets("Données à rentrer").Activate
 For i = 3 To 400
    If Sheets("Données à rentrer").Range("Gi") <> "" And Sheets("Données à rentrer").Range("Hi") = "" Then
        Vis_Sans_Fin = Application.VLookup(Sheets("Données à rentrer").Range("Gi"), Sheets("Base de données").Range("A3:A26")) 'Enregistrement de la valeur 0 ou 1 pour la compatibilité de la colle avec la vis sans fin
    End If
    If Sheets("Données à rentrer").Range("Bi") <> "" And Sheets("Données à rentrer").Range("Fi") <> "" And Sheets("Données à rentrer").Range("Ci") <> "" Then
                                        '*****************************************************************************************************************************
        If Sheets("Données à rentrer").Range("Fi") = Sheets("Données à rentrer").Range("R3") Then 'Type de composant CMS

            If Sheets("Données à rentrer").Range("Ei") = "" Then 'CMS Machine privilégiée AUCUNE
                If Sheets("Résultats").Range("H3") <= Sheets("Base de données").Range("AB2") Then 'Valeur A1 du tableau "conditions"
                    If Sheets("Résultats").Range("I3") <= Sheets("Base de données").Range("AB8") Then 'Valeur A7 du tableau "conditions"
                        With Sheets("Calculs machine pose")
                            .Range("Ci") = "Manuel"
                            .Range("Di") = "Attention si la pose de la colle est en auto, la passer en manuel sauf cas exceptionnel"
                            .Range("Di").Color = RGB(255, 0, 0)
                    ElseIf Sheets("Résultats").Range("I3") > Sheets("Base de données").Range("AB7") Then 'Valeur A6 du tableau "Conditions"
                        If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                            If Vis_Sans_Fin = 1 Then
                                Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                            ElseIf Vis_Sans_Fin = 0 Then
                                Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                            End If
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                            Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                            Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                        End If
                    End If
                ElseIf Sheets("Résultats").Range("H3") > Sheets("Base de données").Range("AB3") Then 'Valeur A2 du tableau "Conditions"
                    If Sheets("Résultats").Range("I3") <= Sheets("Base de données").Range("AB4") Then 'Valeur A3 du tableau "Conditions"
                        If Sheets("Résultats").Range("H3") <= Sheets("Base de données").Range("AB9") Then 'Valeur A8 du tableau "Conditions"
                            With Sheets("Calculs machine pose")
                            .Range("Ci") = "Manuel"
                            .Range("Di") = "Attention si la pose de la colle est en auto, la passer en manuel sauf cas exceptionnel"
                            .Range("Di").Color = RGB(255, 0, 0)
                        ElseIf Sheets("Résultats").Range("H3") > Sheets("Base de données").Range("AB6") Then 'Valeur A5 du tableau "Conditions"
                            If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                                If Vis_Sans_Fin = 1 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                                ElseIf Vis_Sans_Fin = 0 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                                End If
                            ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                                Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                            ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                                Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                            End If
                        End If
                    ElseIf Sheets("Résultats").Range("I3") > Sheets("Base de données").Range("AB5") Then 'Valeur A4 du tableau "Conditions"
                        If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                                If Vis_Sans_Fin = 1 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                                ElseIf Vis_Sans_Fin = 0 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                                End If
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                                Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                                Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                        End If
                    End If
                End If
            ElseIf Sheets("Données à rentrer").Range("Ei") = Sheets("Données à rentrer").Range("S3") Then 'CMS machine privilégiée Amadyne
                If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                     With Sheets("Calculs machine pose")
                        .Range("Ci") = "Amadyne"
                        .Range("Di").Color = RGB(255, 0, 0)
                        .Range("Di") = "Attention, les sérigraphie est faite sur une autre machine dans une autre salle, risques ++"
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Or Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                End If
            ElseIf Sheets("Données à rentrer").Range("Ei") = Sheets("Données à rentrer").Range("S4") Then 'CMS machine privilégiée Datacon
                If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                    With Sheets("Calculs machine pose")
                        .Range("Ci") = "Datacon"
                        .Range("Di").Color = RGB(255, 0, 0)
                        .Range("Di") = "Attention, les sérigraphie est faite sur une autre machine dans une autre salle, risques ++"
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                    Sheets("Calculs machine pose").Range("Ci") = "Datacon"
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                    If Vis_Sans_Fin = 1 Then
                        Sheets("Calculs machine pose").Range("Ci") = "Datacon"
                    ElseIf Vis_Sans_Fin = 0 Then
                        With Sheets("Calculs machine pose")
                        .Range("Ci") = "Amadyne"
                        .Range("Di").Color = RGB(255, 0, 0)
                        .Range("Di") = "L'utilisation de la datacon est impossible car la colle est incompatible avec la vis sans fin"
                    End If
                End If
            ElseIf Sheets("Données à rentrer").Range("Ei") = Sheets("Données à rentrer").Range("S5") Then 'CMS machine privilégiée MyData
                If Sheets("Résultats").Range("Ci") = Sheets("Résultats").Range("N3") Or Sheets("Résultats").Range("Ci") = Sheets("Résultats").Range("N4") Then
                    Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Résultats").Range("N5") Then
                    With Sheets("Calculs machine pose")
                        .Range("Ci") = "Datacon"
                        .Range("Di").Color = RGB(255, 0, 0)
                        .Range("Di") = "Attention, le dispensing est fait sur une autre machine et dans une autre salle, risques ++"
                End If
            End If
                                        '*****************************************************************************************************************************
        ElseIf Sheets("Données à rentrer").Range("Fi") = Sheets("Données à rentrer").Range("R4") Then 'Type de composant PUCE

            If Sheets("Données à rentrer").Range("Ei") = "" Then 'PUCE Machine privilégiée AUCUNE
                If Sheets("Résultats").Range("H3") <= Sheets("Base de données").Range("AE2") Then 'Valeur A9 du tableau "conditions"
                    If Sheets("Résultats").Range("I3") <= Sheets("Base de données").Range("AE8") Then 'Valeur A15 du tableau "conditions"
                        With Sheets("Calculs machine pose")
                            .Range("Ci") = "Manuel"
                            .Range("Di") = "Attention si la pose de la colle est en auto, la passer en manuel sauf cas exceptionnel"
                            .Range("Di").Color = RGB(255, 0, 0)
                    ElseIf Sheets("Résultats").Range("I3") > Sheets("Base de données").Range("AE7") Then 'Valeur A14 du tableau "Conditions"
                        If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                            If Vis_Sans_Fin = 1 Then
                                Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                            ElseIf Vis_Sans_Fin = 0 Then
                                Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                            End If
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                            Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                            Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                        End If
                    End If
                ElseIf Sheets("Résultats").Range("H3") > Sheets("Base de données").Range("AE3") Then 'Valeur A10 du tableau "Conditions"
                    If Sheets("Résultats").Range("I3") <= Sheets("Base de données").Range("AE4") Then 'Valeur A11 du tableau "Conditions"
                        If Sheets("Résultats").Range("H3") <= Sheets("Base de données").Range("AE9") Then 'Valeur A16 du tableau "Conditions"
                            With Sheets("Calculs machine pose")
                            .Range("Ci") = "Manuel"
                            .Range("Di") = "Attention si la pose de la colle est en auto, la passer en manuel sauf cas exceptionnel"
                            .Range("Di").Color = RGB(255, 0, 0)
                        ElseIf Sheets("Résultats").Range("H3") > Sheets("Base de données").Range("AE6") Then 'Valeur A13 du tableau "Conditions"
                            If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                                If Vis_Sans_Fin = 1 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                                ElseIf Vis_Sans_Fin = 0 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                                End If
                            ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                                Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                            ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                                Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                            End If
                        End If
                    ElseIf Sheets("Résultats").Range("I3") > Sheets("Base de données").Range("AE5") Then 'Valeur A12 du tableau "Conditions"
                        If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                                If Vis_Sans_Fin = 1 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne ou Datacon"
                                ElseIf Vis_Sans_Fin = 0 Then
                                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                                End If
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                                Sheets("Calculs machine pose").Range("Ci") = "MYDATA"
                        ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                                Sheets("Calculs machine pose").Range("Ci") = "Datacon ou Amadyne"
                        End If
                    End If
                End If
            ElseIf Sheets("Données à rentrer").Range("Ei") = Sheets("Données à rentrer").Range("S3") Then 'PUCE machine privilégiée Amadyne
                If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                    With Sheets("Calculs machine pose")
                            .Range("Ci") = "Amadyne"
                            .Range("Di") = "Attention, la sérigraphie est faite sur une autre machine dans une autre salle, risques ++"
                            .Range("Di").Color = RGB(255, 0, 0)
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Or Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                    Sheets("Calculs machine pose").Range("Ci") = "Amadyne"
                End If
            ElseIf Sheets("Données à rentrer").Range("Ei") = Sheets("Données à rentrer").Range("S3") Then 'PUCE machine privilégiée Datacon
                If Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N3") Then
                    With Sheets("Calculs machine pose")
                            .Range("Ci") = "Datacon"
                            .Range("Di") = "Attention, la sérigraphie est faite sur une autre machine dans une autre salle, risques ++"
                            .Range("Di").Color = RGB(255, 0, 0)
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N4") Then
                    Sheets("Calculs machine pose").Range("Ci") = "Datacon"
                ElseIf Sheets("Résultats").Range("Ci") = Sheets("Données à rentrer").Range("N5") Then
                    If Vis_Sans_Fin = 1 Then
                        Sheets("Calculs machine pose").Range("Ci") = "Datacon"
                    ElseIf Vis_Sans_Fin = 0 Then
                        With Sheets("Calculs machine pose")
                            .Range("Ci") = "Datacon"
                            .Range("Di") = "L'utilisation de la datacon est impossible car la colle est incompatible avec la vis sans fin"
                            .Range("Di").Color = RGB(255, 0, 0)
                    End If
                End If
            End If
        End If
    End If
 Next
 Calcul_colle
End Sub

Re bonjour.

J'ai trouvé mon erreur (enfin...).

J'avais complètement oublié les End With...

Cordialement,

-_Loki

Re,

En effet, ça saute presque aux yeux pourtant

Les tabulations ça sert aussi à ça, un conseil pour ne pas oublier, quand tu commences à écrire With quelque chose, pense tout de suite à écrire la ligne du End With, idem pour les If, les While, les Do etc...

Rechercher des sujets similaires à "calculs centaines lignes"