Modification macro avec condition

salut

je veux ajouter au macro une option

c'est que la colonne E des feuilles (feui2 et feui3 et feui4 et feui5 et feui6 et recapitulatif ) se remplissent à partir de colonne F la feuille (KIT) à condition la référence de deux parties soit identique colonne B.

EXEMPLE cellule B5 feuille2 se rempli de la feuille kit cellule F7 et F18 (VOIR LES COMMENTAIRES DANS LE FICHIER)

cordialement

20document-v1.zip (245.76 Ko)

Bonjour,

Pourquoi ne pas utiliser tout simplement la fonction RECHERCHEV() plutôt que cette "usine à gaz" de code VBA

Du grand n'importe nawak

salut

comme j'ai commencé le projet avec les macro je veux le terminer avec des petites modifications

merci

Salut tout le monde

la colonne E des feuilles (feui2 et feui3 et feui4 et feui5 et feui6 et recapitulatif ) se remplissent à partir de colonne F la feuille (KIT) à condition la référence de deux parties soit identique colonne B.

pour mieux expliquer je vous donne un exemple

dans la( feuille KIT) la référence 222 est relié aux quantité des cellules B7 et B18 qui correspondent aux quantités (10+15)=25
si j'inscrit la référence 222 dans la cellule B5 (feuil2) la cellule qui l'a correspond E5 doit se remplir à partir de la (feuille) kit la quantité kit qui correspond la reference 222 dans ce cas la quantité qui la correspond =25. selon ci-joint

merci d'avance

11document-v1.zip (267.45 Ko)

Bonjour,

Votre macro modifiée:

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
    Dim fbdd As Worksheet, ShKit As Worksheet
    Dim i As Long
    Dim cell As Range
    Application.ScreenUpdating = False
    Set ShKit = Sheets("KIT")
    Set fbdd = Sheets("Base de Donné")
    On Error GoTo Sortie 'pour remettre EnableEvents à True
    Application.EnableEvents = False
    If Target.Count > 1 Then GoTo Sortie 'pour remettre EnableEvents à True
    If sh.Name <> fbdd.Name Then
         If Not Intersect(Target, sh.Range("B4:B" & sh.Range("B" & sh.Rows.Count).End(xlUp).Row)) Is Nothing Then
              Set cell = fbdd.Range("C2:C" & fbdd.Range("C" & Rows.Count).End(xlUp).Row).Find(Target, lookat:=xlWhole)
              If cell Is Nothing Then
                   MsgBox "Cette référence ne figure pas dans la Bas de données", 16
                   GoTo Sortie 'pour remettre EnableEvents à True
              End If

              Cells(Target.Row, 4).ClearContents
              For i = 2 To fbdd.Range("B" & Rows.Count).End(xlUp).Row
                   If UCase(fbdd.Range("C" & i)) = UCase(Target.Value) Then
                        sh.Cells(Target.Row, 4) = sh.Cells(Target.Row, 4) + fbdd.Range("H" & i)
                   End If
              Next i
              sh.Cells(Target.Row, 3) = cell.Offset(0, -1)
              sh.Cells(Target.Row, 5).FormulaR1C1 = "=SUMIF(KIT!C2,RC2,KIT!C6)"
              sh.Cells(Target.Row, 5).Value = sh.Cells(Target.Row, 5).Value
         End If
    End If

Sortie:
    Application.EnableEvents = True
    Set ShKit = Nothing
    Set fbdd = Nothing
End Sub

Cdlt

Salut

merci beaucoup pour tes efforts .après avoir testé le macro j'ai constaté qu'il ya 2 problemes s'il serait possible de les régler.

1)'es quantites dans les cellules colonnes E (feuil 2 3 4 5 6 récapitulatif) n'apparaissent pas automatiquement !!je dois aller à la cellule et fait double clique afin que la quantité s'affiche!! ( elles doivent s'afficher automatiquement lorsque j'ouvre le fichier)

2) lorsque je fais une modification de quantité dans les quantité colonne F(feuille KIT) exemple F18 (je change de quantité) j'ai constaté que

la quantité se modifie pas dans la colonne E feuille 2 exemple E5.

cordialement

Votre problème est mal posé dès le départ, ce que j'avais compris, c'est que la quantité dans les feuilles 2 à 6 se remplissaient lorsque vous saisissiez une référence dans la feuille active. sinon, il est inutile de passer par une macro puisqu'il faut qu'il y a ait en permanence une formule pour être réactive à la moindre modification.

Donc dans chaque feuille et en colonne E , écrivez cette formule:

=SOMME.SI(KIT!$B:$B;$B3;KIT!$F:$F)

Et pour que cela soit parfait, il faut convertir tous les tableaux de ces feuilles en tableaux structurés:

Important: quand une solution par formule existe, il faut la privilégier par rapport au VBA

Cdlt

Salut

j'ai ajouté la formule dans tous les colonne E .ca marche bien dans tous les feuille sauf la feuille récapitulatif !! jai constaté quand j'inserit la formulle dans la cellule E3 et je passe à une autre faille et je reviens à la feuille récapitulatif la formulle disparait !! elle doit arder toujours la formulle constante. voir fichier ci-joint.

merci

6document-v1.zip (249.57 Ko)

C'est normal, dans la macro "Alert2Recap" il y a ceci:

image

salut

comment je le modifie?! j'ai besoin de remplir la colonne E (soit avec la formule ou un macro)

merci infiniment

Bonjour,

J'ai ajouté la macro "Workbook_Open" pour que les formules se créent à l'ouverture du fichier.

Cdlt

Salut Arturo83

j'ai mit ton macro workbook dans mon fichier ci-joint et j'ai fait un test lorsque j'ouvre le fichier je trouve la formule dans les feuille et ainsi feuille Récapitulatif.

et lorsque je passe de la feuille Récapitulatif à une autre feuille et je reviens à la feuille Récapitulatif la formule disparait !!

pourtant les autres feuilles gardent la formule (marche bien).

je vous remercie beaucoup

6document-v1.zip (324.86 Ko)

re,

je pense qu'il faut repenser le total, c'est une usine à gaz.

9document-v10-2.zip (253.04 Ko)

et lorsque je passe de la feuille Récapitulatif à une autre feuille et je reviens à la feuille Récapitulatif la formule disparait !!

si vous aviez testé le fichier que j'avais joint, vous auriez vu que cela marchait bien, en fait, j'ai oublié de vous dire que j'avais ajouté la ligne suivante en fin de macro "Alerte2Recap"

Range(Sheets("récapitulatif").Cells(3, "E"), Sheets("récapitulatif").Cells(1000, "E")).FormulaR1C1 = "=IF(RC[-3]="""","""",SUMIF(KIT!C2,RC2,KIT!C6))"

salut

perfect ca marche bien

merci infiniment pour ton aide

bye

Rechercher des sujets similaires à "modification macro condition"