Remonter les valeurs d'un tableau d'1 ligne
Bonjour a tous,
Cela fait plusieurs jours que j'essai de faire des progra VBA pour améliorer les fichiers de l'entreprise mais je bloque sur plusieurs sujets...
L'un d'eux est la création d'un tableau avec enregistrement automatique des valeurs (en appuyant sur un bouton).
La copie marche super mais je voulais bloquer la saisie dans le tableau à un nombre x de valeur pour pas surcharger le graphe qui est lié.
Et là.... Voici le code qui pose problème c'est a partir de " If Not IsEmpty(Range("N12")) Then" je pense....
Private Sub CommandButton1_Click()
If Range("D9") = "" Or Range("D10") = "" Or Range("D11") = "" Or Range("J9") = "" Or Range("J10") = "" Or Range("J11") = "" Or Range("D13") = "" Then
MsgBox ("il manque des valeurs")
If Range("D9") = "" Then
Range("D9").Interior.ColorIndex = 6
Else
Range("D9").Interior.ColorIndex = 0
End If
If Range("D10") = "" Then
Range("D10").Interior.ColorIndex = 6
Else
Range("D10").Interior.ColorIndex = 0
End If
If Range("D11") = "" Then
Range("D11").Interior.ColorIndex = 6
Else
Range("D11").Interior.ColorIndex = 0
End If
If Range("J9") = "" Then
Range("J9").Interior.ColorIndex = 6
Else
Range("J9").Interior.ColorIndex = 0
End If
If Range("J10") = "" Then
Range("J10").Interior.ColorIndex = 6
Else
Range("J10").Interior.ColorIndex = 0
End If
If Range("J11") = "" Then
Range("J11").Interior.ColorIndex = 6
Else
Range("J11").Interior.ColorIndex = 0
End If
If Range("D13") = "" Then
Range("D13").Interior.ColorIndex = 6
Else
Range("D13").Interior.ColorIndex = 0
End If
Else
Range("D9").Interior.ColorIndex = 0
Range("D10").Interior.ColorIndex = 0
Range("D11").Interior.ColorIndex = 0
Range("J9").Interior.ColorIndex = 0
Range("J10").Interior.ColorIndex = 0
Range("J11").Interior.ColorIndex = 0
Range("D13").Interior.ColorIndex = 0
If Range("M7") = "" Then
Range("M7") = Now()
Else
ListObjects(1).ListRows.Add.Range(1, 1).Value = Now()
End If
If Not IsEmpty(Range("N12")) Then
Range("M8:T8") = Range("M7:T7")
Range("M9:T9") = Range("M8:T8")
Range("M10:T10") = Range("M9:T9")
Range("M11:T11") = Range("M10:T10")
Range("M12:T12") = Range("M11:T11")
Range("M13:T13") = Range("M12:T12")
Range("M14:T14") = Range("M13:T13")
Else
DLT = Range("M15").End(xlUp).Row
Range("N" & DLT) = Range("D12")
Range("O" & DLT) = Range("J12")
Range("P" & DLT) = "47.35"
Range("Q" & DLT) = "47.32"
Range("R" & DLT) = "46.9"
Range("S" & DLT) = "46.87"
Range("T" & DLT) = Range("D13")
'Remise à zéro
Range("D9:D11") = ""
Range("J9:J11") = ""
Range("D13") = ""
End If
End If
End Sub
j'espère avoir été assez clair sinon hésitez pas à poser des questions.
Ci-joint le fichier en question
Merci beaucoup d'avance!
Bonjour,
Essaie ceci :
Private Sub CommandButton1_Click()
Dim rng As Range, n As Long, DLT As Long
With ActiveSheet
Set rng = .Range("D9:D11,D13,J9:J11")
n = Application.CountA(rng)
If n <> 7 Then MsgBox ("il manque des valeurs"), 64, "Information"
rng.Interior.ColorIndex = xlColorIndexNone
rng.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 6
If .Range("M7") = "" Then
.Range("M7") = Now()
Else
.ListObjects(1).ListRows.Add.Range(1, 1).Value = Now()
End If
If Not IsEmpty(Range("N12")) Then
.Range("M8:T8") = .Range("M5:T5")
.Range("M9:T9") = .Range("M8:T8")
.Range("M10:T10") = .Range("M9:T9")
.Range("M11:T11") = .Range("M10:T10")
.Range("M12:T12") = .Range("M11:T11")
.Range("M13:T13") = .Range("M12:T12")
.Range("M14:T14") = .Range("M13:T13")
Else
DLT = .Range("M15").End(xlUp).Row
.Range("N" & DLT) = .Range("D12")
.Range("O" & DLT) = .Range("J12")
.Range("P" & DLT) = "47.35"
.Range("Q" & DLT) = "47.32"
.Range("R" & DLT) = "46.9"
.Range("S" & DLT) = "46.87"
.Range("T" & DLT) = .Range("D13")
'Remise ? z?ro
rng.Value = ""
End If
End With
End Sub
Bonjour,
Merci pour votre réponse!
Y a juste une erreur d'exécution 1004 sur "rng.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 6"
désolé du dérangement
C'est encore moi.
J'ai fait plusieurs test avec votre code et y a pas que cette anomalie.
Quand il manque une valeur, le message apparaît bien mais la suite du code se lance quand même et copie les valeurs. Du coup la moyenne se retrouve faussé et le graphe par la même occasion.
Et si toutes les valeurs sont présentes, là le code ne fonctionne pas.
Re,
Déjà bravo pour le programme vous avez fait en 5 lignes ce que je fais en 20
J'ai refait un test en changeant quelques ligne. On se rapproche de ce que je cherche et je vais essayer d'être un peu plus précis dans ma demande
Private Sub CommandButton1_Click()
Dim rng As Range, n As Long, DLT As Long
With ActiveSheet
Set rng = .Range("D9:D11,D13,J9:J11")
n = Application.CountA(rng)
If n <> 7 Then MsgBox ("il manque des valeurs"), 64, "Information"
rng.Interior.ColorIndex = 6
If .Range("M7") = "" Then
.Range("M7") = Now()
DLT = .Range("M15").End(xlUp).Row
.Range("N" & DLT) = .Range("D12")
.Range("O" & DLT) = .Range("J12")
.Range("P" & DLT) = "47.35"
.Range("Q" & DLT) = "47.32"
.Range("R" & DLT) = "46.9"
.Range("S" & DLT) = "46.87"
.Range("T" & DLT) = .Range("D13")
Else
.ListObjects(1).ListRows.Add.Range(1, 1).Value = Now()
Range("M22:T22").Delete
End If
If Not IsEmpty(Range("N12")) Then
Range("M7:T7").Delete Shift:=xlUp
'Remise ? z?ro
rng.Value = ""
End If
End With
End Sub
en gros :
- je veux qu'à chaque appuie sur les bouton les valeurs s'enregistre dans le tableau a coté (colonne M à T) (ça c'est bon)
- Au bout de 5 ou 6 valeurs (Ligne M13) le tableau arrête de "grandir" (j'y arrive pas, les valeurs se suppriment et le programme continue d'écrire en M14, M15, etc)
- A partir de ce moment, à chaque appuie sur le bouton, les valeurs écrase la première ligne (M7) pour avoir le dernier enregistrement (en M13) avec tous les autres (M8 à M13 qui passeront de M7 à M12) pour garder un historique des mesures. (ça j'y arrive pas)
- Dernier problème : le format de la feuille ne doit pas changer (en tête en pied de page) et à chaque enregistrement il y a création de ligne donc le pied de page disparait. (d'où la ligne delete M22:T22) mais c'est pas top.
Voilà vous savez tout...
Merci encore !!
Public i As Integer
Private Sub CommandButton1_Click()
'Bouton enregistrer les valeurs
If Range("D9") = "" Or Range("D10") = "" Or Range("D11") = "" Or Range("J9") = "" Or Range("J10") = "" Or Range("J11") = "" Or Range("D13") = "" Then
MsgBox ("il manque des valeurs")
If Range("D9") = "" Then
Range("D9").Interior.ColorIndex = 6
Else
Range("D9").Interior.ColorIndex = 0
End If
If Range("D10") = "" Then
Range("D10").Interior.ColorIndex = 6
Else
Range("D10").Interior.ColorIndex = 0
End If
If Range("D11") = "" Then
Range("D11").Interior.ColorIndex = 6
Else
Range("D11").Interior.ColorIndex = 0
End If
If Range("J9") = "" Then
Range("J9").Interior.ColorIndex = 6
Else
Range("J9").Interior.ColorIndex = 0
End If
If Range("J10") = "" Then
Range("J10").Interior.ColorIndex = 6
Else
Range("J10").Interior.ColorIndex = 0
End If
If Range("J11") = "" Then
Range("J11").Interior.ColorIndex = 6
Else
Range("J11").Interior.ColorIndex = 0
End If
If Range("D13") = "" Then
Range("D13").Interior.ColorIndex = 6
Else
Range("D13").Interior.ColorIndex = 0
End If
Else
Range("D9").Interior.ColorIndex = 0
Range("D10").Interior.ColorIndex = 0
Range("D11").Interior.ColorIndex = 0
Range("J9").Interior.ColorIndex = 0
Range("J10").Interior.ColorIndex = 0
Range("J11").Interior.ColorIndex = 0
Range("D13").Interior.ColorIndex = 0
If Not IsEmpty(Range("M13")) Then decallage
'End If
For i = 7 To 13
If Range("M" & i) = "" Then ecriture_ligne
Next i
End If
End Sub
Private Sub decallage()
'Remonter les valeurs du tableau d'une ligne
Range("M7:T12") = Range("M8:T13").Value
Range("M13:T13") = ""
End Sub
Sub ecriture_ligne()
Range("M" & i) = Now()
Range("N" & i) = Range("D12")
Range("O" & i) = Range("J12")
Range("P" & i) = "47,35"
Range("Q" & i) = "47,32"
Range("R" & i) = "46,9"
Range("S" & i) = "46,87"
Range("T" & i) = Range("D13")
i = 13
'Effacer les valeurs
Range("D9:D11") = ""
Range("J9:J11") = ""
Range("D13") = ""
End Sub
C'est bon j'ai trouvé la solution par moi même désolé du dérangement.
Je met mon code plus haut si ça intéresse quelqu'un
Merci