Amélioration code

Bonjour,

j'aimerais tout d'abord remercier le forum pour votre aide.

Cela m'a permis de créer se petit fichier, qui je pense en code en fera bondir plus d'un, mais en à peine deux semaines de connaissance de VBA j'en suis peu fier.

Je reviens vers vous aujourd'hui pour savoir si de vrai programmeur VBA peuvent regarder se fichier et améliorer un peu son code, pour améliorer mes connaissances sur VBA

merci bien

Hello,

Je suis pas un expert en VBA mais je te fais quand même une proposition pour ton premier formulaire:

tu as 50 lignes pour faire le contour de tes cellules, tu pourrais (à adapter) simplifier ces lignes par:

Dim numLigne as Integer
Dim listeEdge as Variant : listeEdge = Array(xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop)
Dim unEdge as Variant

For numLigne = 1 to 3
For each unEdge in listeEdge
With Cells(numLigne,1).Borders(unEdge)
'tes modifs ....
.LineStyle = xlContinuous etc....
End With
next unEdge
next numLigne

je suppose que

With Cells(numLigne,1).Borders(unCote)

est en fait

With Cells(numLigne,1).Borders(unEdge)

joli code, je vais l'essayer

(Corrigé ^^ Merci Steelson pour l’œil expert )

Bonjour

j'ai pas été voir le code initiale mais pourquoi faire 4 passes pour faire les bordures d'une cellule ... moi j'utiliserais ceci

With Cells(numLigne,1).Borders
             .LineStyle = xlContinuous
             .Weight = xlThin
             .ColorIndex = xlAutomatic
End With

voir ceci pour éviter la boucle

numLigne=1
With Range(Cells(numLigne,1),Cells(numLigne+2,1)).Borders
             .LineStyle = xlContinuous
             .Weight = xlThin
             .ColorIndex = xlAutomatic
End With

fred

Bonjour,

Pourquoi ne pas mettre les données sous forme de tableau directement ?

(voir partie surlignée)

Cdlt.

Private Sub CommandButton1_Click()

    nom = variete.text
    For n = 1 To Sheets.Count
        If Sheets(n).Name = "récolte " & nom Then
            trouve = True
            MsgBox "la feuille existe déja"
            Exit For
        End If
    Next n

    If Not trouve Then
        If IsNumeric(famille.Value) Then
            If IsNumeric(sousfamille.Value) Then
                nom = variete.text
                Application.ScreenUpdating = False
                Sheets.Add After:=Sheets(Sheets.Count)
                ActiveSheet.Name = "récolte " & nom
                lig = 1
                With ActiveSheet
                    .Cells(1, 1).CurrentRegion.Offset(1).ClearContents
                    .Cells(1, 1) = "variete"
                    .Cells(1, 2) = "famille"
                    .Cells(1, 3) = "S/F"
                    .Cells(1, 4) = "Choix"
                    For i = 1 To famille.Value
                        For j = 1 To sousfamille.Value
                            lig = lig + 1
                            .Cells(lig, 1) = nom
                            .Cells(lig, 2) = "fam " & i
                            .Cells(lig, 3) = j
                        Next j
                    Next i
                   Dim lo As ListObject
                    Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).CurrentRegion, , xlYes)
                    With lo
                        .TableStyle = "TableStyleLight15"
                        .ShowTableStyleRowStripes = False
                        .ShowAutoFilterDropDown = False
                        .HeaderRowRange.Font.Color = vbRed
                        .HeaderRowRange.Font.Bold = True
                    End With             
               End With
            Else
                MsgBox "indiqué le nombre de sous famille"
            End If
        Else
            MsgBox "indiqué le nombre de famille et de sous famille"
        End If
    End If

End Sub

Bonjour,

pour le test d'existence de feuille pourquoi ne pas le faire par la gestion des erreurs ?

On Error Resume Next
Sheets("Récolte " & variete.Text).Activate
If Err > 0 Then GoTo suite
MsgBox "la feuille existe déja"
On Error Goto 0
Exit Sub
suite:
On Error Goto 0
' la suite du code avec création de la feuille

on appel la feuille avec le nom testé, si elle existe on l'affiche est on met un msgbox pour le signaler, si elle n'existe pas on passe à la suite du code qui contient les instructions de création.

Ca ne se joue pas à grand chose mais il y a qu'un seul appel de feuille plutôt qu'une boucle plus ou moins longue en fonction du nombre de feuille... non ?

@ bientôt

LouReeD

Merci beaucoup pour toutes vos réponses.

Bonjour,

Si ton sujet est clos, peux tu l'indiquer s'il te plait ?

MERCI BEAUCOUP

romainromain

Non je vais encore clore le sujet , car j'avais pas encore pu tester toutes les modifications.

LouReeD

Je ne suis pas encore habitué à la gestion des erreurs, mais c'est vrais que ton code simplifie cette programmation. Mais je n'arrive pas à traduire en français ce qu'elle fait exactement.

ce que je comprend de ta formule , est que : "si il y a une erreur sur l'activation de la nouvelle feuille, mettre le msg "la feuille existe déja".

Le

On error resume next 

sert à vérifier si il y a une erreur ??

Pk mettre

GoTo suite

après then ??

et pk après le exit Sub on doit remettre:

suite : 

On error Goto 0 

mais un gros merci pour ce code

Bonsoir,

On Error Resume Next = ici on demande à VBA de continuer l'exécution du code malgré la détection d'une erreur

Sheets("Récolte " & variete.Text).Activate = on active la feuille Récolte & variété.Text

If Err > 0 Then GoTo suite = si la variable VBA Err est supérieur à 0 cela signifiee que VBA a détecter une erreur lors de l'exécution du code hors il n'y a qu'une ligne de code d'exécutée : Sheets("Récolte " & variete.Text).Activate

donc la feuille n'existe pas "then" alors on va à l'étiquette du code qui s'appelle "suite"

s'il n'y a pas d'erreur donc Err = autre chose que supérieur à 0

MsgBox "la feuille existe déja" = on affiche le message "la feuille existe déjà" et en plus la feuille est activée pour le "prouver"

On Error Goto 0 = on réactive la gestion "normale" des erreurs par VBA

Exit Sub = on quitte la procédure puisque la feuille existe

suite: = étiquette dans le code qui porte le nom "suite", le code reprend ici car il y a eu une erreur = la feuille n'existe pas

On Error Goto 0 = on réactive la gestion "normale" des erreurs par VBA

' la suite du code avec création de la feuille = à partir d'ici la suite de votre code qui prend en compte le fait de créer une nouvelle feuille qui portera le nom de "Récolte & variété.Text"

Voilà en espérant que cela vous suffise pour comprendre

@ bientôt

LouReeD

cela m'aide à comprendre .

Merci encore.

je clos le sujet

Rechercher des sujets similaires à "amelioration code"