Alimenter un fichier type "Devis" en fonction d'autre onglet

Bonjour,

Je me permets de poster sur ce site car je ne vois pas comment résoudre (ni même débuter) une de mes problématiques.

J'ai vu des fichiers similaires sur ce forum mais débutant sur VBA, je ne vois pas comment les adapter.

Voici mon besoin (en PJ le fichier excel):

Ce fichier excel a pour but d'alimenter un devis pour nos clients en fonction de quantité renseignée.

L'onglet n°1 "Resume" correspond à l'endroit où toute les informations doivent être regroupées.

Les autres onglets me servent à définir les catégories des éléments choisis.

Je recherche donc un code VBA qui quand je rentre une quantité (dans les cellules oranges) m'affiche uniquement le nom de l'item ainsi que la quantité souhaitée dans l'onglet "Resume".

Petite difficulté supplémentaire, je recherche un code également qui affiche le nom de la catégorie (nom de l'onglet) avant l'ensemble des items et des quantités (et que celle-ci n'apparaisse pas si aucune quantité n'est renseignée).

En vous remerciant d'avance pour votre aide.

Cordialement,

Gabriel

Bonjour,

à tester,

note/ il faut adapter au bonne colonne

correction

Sub Construction_resume()
Dim Ws As Worksheet 'DŽclare la variable objet Worksheet
Dim i As Long

For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Resume" Then 'Si la feuille ne comporte pas ces deux nom alors
        For i = 2 To Ws.Cells(Rows.Count, "F").End(xlUp).Row
            If Ws.Cells(i, "F") = 1 Then
               With Sheets("Resume")
                   rw = Sheets("Resume").Cells(Rows.Count, "A").End(xlUp).Row + 1
                   .Cells(rw, "A") = Ws.Cells(i, "E").Value
                   .Cells(rw, "B") = Ws.Cells(i, "F").Value
                   .Cells(rw, "C") = Ws.Cells(i, "G").Value
                   .Cells(rw, "E") = Ws.Name
               End With
            End If
        Next i
    End If
Next Ws
End Sub

Bonjour i20100,

Tout d'abord merci pour ton aide.

J'ai mis en bas de mon message la macro avec mes quelques modifications (je n'ai pas eu à faire grand chose, encore merci).

La macro fonctionne et me donne toutes mes quantités quand celle-ci sont strictement supérieur à zéro.

Mais comment faire pour que le nom de la feuille n'apparaisse pas à chaque ligne ? Le nom de ma feuille étant ma catégorie, je voudrais savoir comment faire pour :

- Quand une quantité est présente dans la feuille, que le nom de la feuille s'affiche dans le resume et que ensuite l'ensemble des éléments souhaités se place en dessous. Exemple :

Inverter

Exemple n°1 3

Exemple n°2 1

Battery

Exemple n°1 6

Exemple n°2 2

- Et surtout que quand une quantité n'est pas souhaité dans la feuille que le nom de la catégorie n'apparaisse pas dans le resumé vu que aucun n'article n'est souhaité.

J'espère que tu vois mon besoin. Si non, n'hésite pas à me le dire.

Encore merci pour votre temps!

Sub Construction_resume() Dim Ws As Worksheet 'Declare la variable objet Worksheet Dim i As Long 'Declare la variable en nombre entier 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris en compte. 'ThisWorkbook correspond à l'objet classeur contenant la macro For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Resume" Then 'Si la feuille ne comporte pas ces deux nom alors For i = 2 To Ws.Cells(Rows.Count, "F").End(xlUp).Row If Ws.Cells(i, "F") > 0 Then 'Modification du "=1" par ">0" pour avoir toute les quantités With Sheets("Resume") rw = Sheets("Resume").Cells(Rows.Count, "A").End(xlUp).Row + 1 .Cells(rw, "A") = Ws.Cells(i, "D").Value 'Remplacement du E par D .Cells(rw, "B") = Ws.Cells(i, "F").Value '.Cells(rw, "C") = Ws.Cells(i, "G").Value .Cells(rw, "E") = Ws.Name End With End If Next i End If Next Ws End Sub

re,

à tester,

Sub Construction_resume()
Dim Ws As Worksheet 'DŽclare la variable objet Worksheet
Dim i As Long
Dim n As Integer
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Resume" Then 'Si la feuille ne comporte pas ces deux nom alors
        For i = 2 To Ws.Cells(Rows.Count, "F").End(xlUp).Row
            If Ws.Cells(i, "F") > 0 Then
               With Sheets("Resume")
                rw = Sheets("Resume").Cells(Rows.Count, "A").End(xlUp).Row + 1
                   If n = 0 Then
                      .Cells(rw, "A") = Ws.Name
                      n = 1
                      rw = rw + 1
                   End If
                   .Cells(rw, "A") = Ws.Cells(i, "D").Value
                   .Cells(rw, "B") = Ws.Cells(i, "F").Value
               End With
            End If
        Next i
    End If
    n = 0
Next Ws
End Sub

Un grand merci i20100, ton code répond parfaitement à ma demande !

Rechercher des sujets similaires à "alimenter fichier type devis fonction onglet"