Macro condition qui plante

Bonjour et bonnes fêtes de fin d'années à tous !

J'ai une macro qui me permet de définir la durée de validité des différents documents, ces documents sont valables 6 mois, si fonction de si le document en valable ou non la macro inscrira " A JOUR " " PAS A JOUR " ou " A METTRE A JOUR" chaque document étant indépendant en fonction de la colonne la valeur peut varier. Cependant ma macro a tendance a planter un fois sur deux en gros. parfois elle m'inscrit la bonne valeur parfois elle prend la valeur " a jour " et la copie dans les autres colonnes sans que cette valeur soit la bonne.

je vous joins ma macro ainsi que mon fichier, merci de votre aide les amis

Sub maj_des_documents() ' macro qui calcule la validité du document
    Dim maj() As Integer, aj, n%, i%, k%
    With ActiveSheet
        For k = 13 To 29 ' numéro des colonnes
            i = .Cells(.Rows.Count, k).End(xlUp).Row
            If i > n Then n = i
        Next k
        ReDim maj(16, n - 1) ' 16 = 29 - 13
        For i = 2 To n
            For k = 13 To 29
                Select Case .Cells(i, k).Value
                    Case Is > Date
                        maj(k - 13, i - 2) = 0 ' 13 = N° 1er colonne
                    Case Is > Date - 31
                        maj(k - 13, i - 2) = 1 ' 13 = N° 1er colonne
                    Case Else
                        maj(k - 13, i - 2) = 2 ' 13 = N° 1er colonne
                End Select
            Next k
        Next i
        aj = Split("A JOUR;A METTRE A JOUR;PAS A JOUR", ";")
        For i = 2 To n
            For k = 31 To 47
                .Cells(i, k).Value = aj(maj(k - 31, i - 2))
            Next k ' = formule du concatener
            '.Cells(i, 48).Value = .Cells(1, 48) & " est " & .Cells(i, 31)
            '.Cells(i, 49).Value = .Cells(1, 49) & " est " & .Cells(i, 32)
            '.Cells(i, 50).Value = .Cells(1, 50) & " est " & .Cells(i, 33)
            '.Cells(i, 51).Value = .Cells(1, 51) & " est " & .Cells(i, 34)
            '.Cells(i, 52).Value = .Cells(1, 52) & " est " & .Cells(i, 35)
            '.Cells(i, 53).Value = .Cells(1, 53) & " est " & .Cells(i, 36)
            '.Cells(i, 54).Value = .Cells(1, 54) & " est " & .Cells(i, 37)
            '.Cells(i, 55).Value = .Cells(1, 55) & " est " & .Cells(i, 38)
            '.Cells(i, 56).Value = .Cells(1, 56) & " est " & .Cells(i, 39)
            '.Cells(i, 57).Value = .Cells(1, 57) & " est " & .Cells(i, 40)
            '.Cells(i, 58).Value = .Cells(1, 58) & " est " & .Cells(i, 41)
            '.Cells(i, 59).Value = .Cells(1, 59) & " est " & .Cells(i, 42)
            '.Cells(i, 60).Value = .Cells(1, 60) & " est " & .Cells(i, 43)
            '.Cells(i, 61).Value = .Cells(1, 61) & " est " & .Cells(i, 44)
            '.Cells(i, 62).Value = .Cells(1, 62) & " est " & .Cells(i, 45)
            '.Cells(i, 63).Value = .Cells(1, 63) & " est " & .Cells(i, 46)
            '.Cells(i, 64).Value = .Cells(1, 64) & " est " & .Cells(i, 47)
        Next i
    End With
End Sub

Bonsoir,

En refaisant une autre procédure, j'obtiens les mêmes résultats.

Un peu moins de lignes de code, cf procédure :

Public Sub MAJ2()

A tester.

Bonne soirée

Bouben

Merci merci beaucoup c'est ce que je cherchais. Je viens de voir que j'ai oublié de préciser un truc la fin de mon code était aussi a prendre en compte car je voulais aussi concaténer c'est valeur maintenant je souhaite rajouté cette partie de mon code

 .Cells(i, 48).Value = .Cells(1, 48) & " est " & .Cells(i, 31)
            .Cells(i, 49).Value = .Cells(1, 49) & " est " & .Cells(i, 32)
            .Cells(i, 50).Value = .Cells(1, 50) & " est " & .Cells(i, 33)
            .Cells(i, 51).Value = .Cells(1, 51) & " est " & .Cells(i, 34)
            .Cells(i, 52).Value = .Cells(1, 52) & " est " & .Cells(i, 35)
            .Cells(i, 53).Value = .Cells(1, 53) & " est " & .Cells(i, 36)
            .Cells(i, 54).Value = .Cells(1, 54) & " est " & .Cells(i, 37)
            .Cells(i, 55).Value = .Cells(1, 55) & " est " & .Cells(i, 38)
            .Cells(i, 56).Value = .Cells(1, 56) & " est " & .Cells(i, 39)
            .Cells(i, 57).Value = .Cells(1, 57) & " est " & .Cells(i, 40)
            .Cells(i, 58).Value = .Cells(1, 58) & " est " & .Cells(i, 41)
            .Cells(i, 59).Value = .Cells(1, 59) & " est " & .Cells(i, 42)
            .Cells(i, 60).Value = .Cells(1, 60) & " est " & .Cells(i, 43)
            .Cells(i, 61).Value = .Cells(1, 61) & " est " & .Cells(i, 44)
            .Cells(i, 62).Value = .Cells(1, 62) & " est " & .Cells(i, 45)
            .Cells(i, 63).Value = .Cells(1, 63) & " est " & .Cells(i, 46)
            .Cells(i, 64).Value = .Cells(1, 64) & " est " & .Cells(i, 47)

à ton code

Finalement je vais conserver simplement ton code mais je veux intégrer

With Worksheets("Base de données")

pour activité ta macro a partir d'un bouton sur une autre cellule mais rien ne se passe

Bonjour,

Perso, je n'aime pas utiliser le "With", le code devient rapidement illisible.

Je préconise de déclarer un objet qui représente l'onglet, et préfixer ensuite tout avec cet objet.

    'V0.2
    Dim oSh As Worksheet

    Set oSh = Worksheets("Base de données")
    'V0.2-fin

Et pour la suite :

    'Range("xxxx") = ...
    oSh.Range("xxxx") = ...

Exemple en PJ à tester

Bonne journée

Bouben

Merci merci beaucoup je connaissais pas cette méthode, tu m'as été d'un très grand secours, je te souhaite de très bonnes fêtes de fin d'année Bouben

Rechercher des sujets similaires à "macro condition qui plante"