je suis dans le batiment, et je réalise un tableau personnel où j’aimerais réaliser la chose suivante:
mon tableau se présente de cette manière:
Ce que je voudrais faire c’est qu’à chaque fois qu’une désignation est tapé, et quelle est égale à une autre désignation de la meme colonne, la valeur du PU qui sera indiqué est automatiquement remplie.
Exemple:
Je tape dans désignation « peinture murs » et j’indique un montant PU de 25. Je voudrais que la prochaine fois que je tape « peinture murs » dans la colonne désignation le montant 25 se met automatiquement.
Et cela, pour n’importe quelle désignation qui serait taper plusieurs fois.
Je précise également que la valeur de PU peut changer tout le temps, et donc changer les autres valeurs en meme temps.
Etant novice en excel, cela me parait trés compliqué, il est toujours temps d’apprendre.
Bonjour,
avec votre fichier Excel (anonymiser) il serait plus simple de travail qu’avec une capture d’écran
en rajoutant éventuellement quelques données du résultat attendu
la colonne O est une colonne auxiliaire pour ajouter vos PU. Il y a 2 MFC, le rouge pour indiquer que ce n’est pas la première apparition de cette désignation, donc ce PU sert à rien et le vert pour indiquer que c’est la première apparition, mais il n’y a pas encore un PU.
Puis en colonne D, des formules qui recherchent leur PU dans colonne O. Nouveau Feuille de calcul Microsoft Excel (4).xlsx (32,6 Ko)
c’est presque cela, sauf que vous avez mis dans la colonne O des montants fixe.
Or, les montants diffèrent tout le temps, et je ne peux pas faire un tableau avec toutes les valeurs jusqu’à 100 000 ou plus.
Il faut qu’il prenne automatiquement la valeur que j’ai entrée dans PU pour la reporter automatiquement.
Monsieur JOHNNY,
Le report ce fait dans la colonne Total HT ce qui empeche le calcul de QUANTITE * PU.
Il faudrait que le report ce fasse dans la colonne PU.
Objectif:
si je tape dans A12 remplacement porte, quantité 1, pu 250, total ht va etre de 250.
si je tape dans A43 (par exemple) remplacement porte; quantité 2; il faut qu’il cherche si j’ai deja taper la meme chose dans A et qu’il reporte le 250 dans D43; et toal ht serait donc de 500.
ce que vous demandez n’est pas possible, soit la colonne D contient des chiffres fixes soit ce sont des formules, mais ne pas un mélange.
Ce que vous demandez, on peut faire cela avec des macros (VBA).
Si la colonne O est occupée, on peut prendre la colonne X(?).
a dommage. Je n’ai plus qu’à trouver une autre solution.
Non c’est pas un soucis la colonne O, X ou une autre. c’était une question de pratique afin d’armoniser le chiffrage suivant la personne qui l’utilise.
re,
en 2 mots, cela n’est pas possible
vous pouvez trouver cette macro dans le module de la feuille « Batiment »
Quand vous modifiez quelque chose dans la colonne A ou D (entre les lignes 11-…), la macro fait son boulot, vérifier s’on a déjà des lignes avec cette designation, des prix, etc
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cD, cPU, Dict, c, c1, UN As Range
Set cD = Range("Désignation")
Set cPU = Range("PU")
Set c = Intersect(Target, Union(cPU, cD))
If c Is Nothing Then Exit Sub
If c.Cells.Count > 1 Then MsgBox "plusieurs cellules sont modifiées en même temps, sorry": Exit Sub
Set Dict = CreateObject("scripting.dictionary") 'dictionaie avec les prix uniques de cette désignation
Set c1 = c.Offset(, -c.Column + cD.Column) 'désignation de cette ligne
Set c2 = c.Offset(, -c.Column + cPU.Column) 'prix de cette ligne
If c1.Value <> "" Then
For i = 1 To cD.Rows.Count
If cD.Cells(i, 1).Row <> c.Row And StrComp(cD.Cells(i, 1).Value, c1.Value, 1) = 0 Then
Set UN = Union(IIf(UN Is Nothing, cPU(i, 1), UN), cPU(i, 1)) 'toutes les cellules avec la même désignation
If cPU(i, 1) <> "" Then Dict(cPU.Cells(i, 1).Value) = Dict(cPU.Cells(i, 1).Value)
End If
Next
End If
' If Not UN Is Nothing Then MsgBox UN.Address
On Error GoTo Erreur:
Application.EnableEvents = False
If c.Column = cD.Column Then 'changement de désignation
If Dict.Count = 0 Then 'aucun prix connu
c2.ClearContents 'vider,on peut rien faire
ElseIf Dict.Count = 1 Then 'un prix unique connu
c2.Value = Dict.keys()(0) 'assigner ce prix unique
Else 'changement du prix
MsgBox Join(Dict.keys, vbLf) & vbLf & vbLf & "choississez un", vbInformation, UCase("plusieurs prix connu pour ") & c1.Value
End If
Else 'changement du prix
If c2.Value <> "" Then
If Not UN Is Nothing Then UN.Value = c2.Value 'le reste s'adapte au nouveau prix
s = "": If Not UN Is Nothing Then s = vbLf & "cellules similaires = " & UN.Address(0, 0)
If Dict.Count Then MsgBox "nouveau prix " & Format(c2.Value, "0.00€") & vbLf & "ancien était " & Format(Dict.keys()(0), "0.00€") & s, vbInformation, UCase("Désignation : " & c1.Value)
End If
End If
Erreur:
Application.EnableEvents = True
End Sub
bonsoir,
2 petits modifs dans la macro, mais comme votre nouvelle colonne « PU » est la colonne I, je pense que vous devez copier & coller cette macro dans votre fichier. Nouveau Feuille de calcul Microsoft Excel (5) (1).xlsm (43,6 Ko)