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- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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-finEt 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