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 !