VBA sous total (somme ; plage de donnée)
Fermé
LeChapelain100
-
6 oct. 2021 à 15:37
yg_be Messages postés 21303 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mars 2023 - 7 oct. 2021 à 17:02
yg_be Messages postés 21303 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mars 2023 - 7 oct. 2021 à 17:02
A voir également:
- VBA sous total (somme ; plage de donnée)
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
- Erreur 1004 vba ✓ - Forum VB / VBA
- Somme si couleur - Guide
- Total adblock avis - Forum Internet / Réseaux sociaux
8 réponses
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
6 oct. 2021 à 15:48
6 oct. 2021 à 15:48
bonjour,
montre-nous ton code, ce sera peut-être plus concret.
si ce n'est pas évident dans le code, dis-nous en plus à propos de la hiérarchie de la désignation.
montre-nous ton code, ce sera peut-être plus concret.
si ce n'est pas évident dans le code, dis-nous en plus à propos de la hiérarchie de la désignation.
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
Modifié le 6 oct. 2021 à 16:01
Modifié le 6 oct. 2021 à 16:01
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
6 oct. 2021 à 16:03
6 oct. 2021 à 16:03
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
6 oct. 2021 à 16:05
6 oct. 2021 à 16:05
Voici mon code avec la partie en jaune qui bug et un tableau explicatif de ce que je souhaite réaliser
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
6 oct. 2021 à 16:12
6 oct. 2021 à 16:12
merci de partager le texte du code, pas une image, et de tenir compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
6 oct. 2021 à 16:38
6 oct. 2021 à 16:38
Sub copier_coller_celluleProgap_DPGS2()
'nommination les valiables pour le nom du fichier et des onglets.
Dim wk_fichier As Workbook
Dim ws_BASE As Worksheet
Dim ws_GO As Worksheet
Dim lstrw_BASE As Long, lstrw_GO As Long 'création de 2 variables signifiant dernière ligne (last row)de la feuille BASE et feuille GO qui est un nombre entier (long)
'définition des valiables pour le nom du fichier et des onglets.
Set wk_fichier = ActiveWorkbook
Set ws_BASE = wk_fichier.Worksheets(1) 'je raccroche l'onglet feuil1 avec ce fichier. Le 1 dans les () correspond à la position de l'onglet.
Set ws_GO = wk_fichier.Worksheets(5)
'identifier la dernière ligne colonne A de la feuille BASE, ma variable lstrw = à la celule ...
lstrw_BASE = ws_BASE.Cells(Rows.Count, 1).End(xlUp).Row
'commencer la boucle à la ligne 19 car avant c'est du bla bla
For i = 19 To lstrw_BASE
'identifier le type (C1 S1 L1...) et si = à S1, copier coller à l'onglet GO, si la valeur de la feuille Base et de la cellule qui se trouve en ligne i et colone A
If ws_BASE.Cells(i, 1) = "S1" Then
'identifier la dernière ligne colonne A de la feuille GO, ma variable lstrw = à la celule ...
'End(xlUp) pour dire que je remonte pour voir la dernière ligne complétée et .row car je cherche des lignes
lstrw_GO = ws_GO.Cells(Rows.Count, 1).End(xlUp).Row
'copier coller de la cellule
ws_GO.Cells(i, 1) = ws_BASE.Cells(i, 13) 'la cellule A1 (1,1) de la feuiller GO = à la celule A1 de la feuille BASE
End If
Next
For i = 19 To lstrw_BASE
'identifier le type (C1 S1 L1...) et si = à P1, copier coller à l'onglet GO, si la valeur de la feuille Base et de la cellule qui se trouve en ligne i et colone A
If ws_BASE.Cells(i, 1) = "P1" Then
'identifier la dernière ligne colonne A de la feuille GO, ma variable lstrw = à la celule ...
'End(xlUp) pour dire que je remonte pour voir la dernière ligne complétée et .row car je cherche des lignes
lstrw_GO = ws_GO.Cells(Rows.Count, 1).End(xlUp).Row
'copier coller de la cellule
ws_GO.Cells(i, 2) = ws_BASE.Cells(i, 13) 'la cellule A1 (1,1) de la feuiller GO = à la celule A1 de la feuille BASE
² ws_GO.Cells(i, 8) = "=SUBTOTAL(9,R[1]C:R[j]C)"
j = "=COUNTIF(R[1]C[-4]:R[2]C[-5],"""")"
End If
Next
For i = 19 To lstrw_BASE
'identifier le type (C1 S1 L1...) et si = à L1, copier coller à l'onglet GO, si la valeur de la feuille Base et de la cellule qui se trouve en ligne i et colone A
If ws_BASE.Cells(i, 1) = "L1" Then
'identifier la dernière ligne colonne A de la feuille GO, ma variable lstrw = à la celule ...
'End(xlUp) pour dire que je remonte pour voir la dernière ligne complétée et .row car je cherche des lignes
lstrw_GO = ws_GO.Cells(Rows.Count, 1).End(xlUp).Row
'copier coller de la cellule
ws_GO.Cells(i, 3) = ws_BASE.Cells(i, 13) 'la cellule A1 (1,1) de la feuiller GO = à la celule A1 de la feuille BASE
ws_GO.Cells(i, 8) = "=PRODUCT(RC[-2]:RC[-1])"
ws_GO.Cells(i, 14) = ws_BASE.Cells(i, 6)
ws_GO.Cells(i, 16) = ws_BASE.Cells(i, 8)
End If
Next
For i = 19 To lstrw_BASE
'copier coller de la cellule unité
ws_GO.Cells(i, 5) = ws_BASE.Cells(i, 5) 'la cellule A1 (1,1) de la feuiller 2 = à la celule A1 de la feuille 1
Next
End Sub
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
6 oct. 2021 à 17:13
6 oct. 2021 à 17:13
Je ne comprends pas bien comment l'onglet BASE est organisé, et à quoi correspondent les types, qui semblent être tous copiés dans l'ordre de leur type.
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
7 oct. 2021 à 09:51
7 oct. 2021 à 09:51
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
7 oct. 2021 à 10:56
7 oct. 2021 à 10:56
Je ne comprends pas comment le code parvient à créer l'autre onglet à partir de l'onglet base. Crée-t-il réellement l'onglet tel que tu le montres en #2?
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
7 oct. 2021 à 14:19
7 oct. 2021 à 14:19
Non l'onglet GO est déjà créé dans mon Excel. C’est un onglet avec un gabarit standard que l'on utilise pour nos devis. Je viens juste récupérer les donner de l'onglet BASE pour les coller dans l'onglet GO sauf que pour le montant je dois rentrer des formules différentes en fonction du titre ou de l'article. C'est pourquoi je voulais optimiser cette manipulation.
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
7 oct. 2021 à 15:03
7 oct. 2021 à 15:03
Cela devient de moins en moins clair.
Si le gabarit est standard, pourquoi ne pas utiliser des formules fixes, pourquoi utiliser du VBA pour créer ces formules?
Si le gabarit est standard, pourquoi ne pas utiliser des formules fixes, pourquoi utiliser du VBA pour créer ces formules?
LeChapelain100
Messages postés
7
Date d'inscription
mercredi 6 octobre 2021
Statut
Membre
Dernière intervention
7 octobre 2021
7 oct. 2021 à 15:31
7 oct. 2021 à 15:31
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
Modifié le 7 oct. 2021 à 17:19
Modifié le 7 oct. 2021 à 17:19
L'onglet BASE serait-il alors spécifique à chaque projet?
L'image en #2 est-elle cohérente avec l'image en #8?
Le code existant transfère, ligne par ligne, les données de BASE vers GO. Il fait cela d'abord pour les tous les titres, puis pour les tous les sous-titres, puis pour tous les articles.
Si je comprends bien le contexte et l'objectif, je suggère d'exécuter ceci après avoir excécuté le code existant:
EDIT: code corrigé
L'image en #2 est-elle cohérente avec l'image en #8?
Le code existant transfère, ligne par ligne, les données de BASE vers GO. Il fait cela d'abord pour les tous les titres, puis pour les tous les sous-titres, puis pour tous les articles.
Si je comprends bien le contexte et l'objectif, je suggère d'exécuter ceci après avoir excécuté le code existant:
Option Explicit
Private Sub st()
Const cg As Long = 7
Dim wbase As Worksheet, wgo As Worksheet
Dim ligs As Long, ligp As Long
Dim curl As Long
Dim forms As String
Set wbase = ThisWorkbook.Sheets("base")
Set wgo = ThisWorkbook.Sheets("go")
curl = 19
ligs = 0
ligp = 0
Do While True
wgo.Cells(curl, 1) = wbase.Cells(curl, 1)
Select Case wbase.Cells(curl, 1)
Case "S1":
If ligs > 0 Then
wgo.Cells(ligs, cg).FormulaLocal = forms
End If
forms = ""
ligs = curl
If ligp > 0 Then
wgo.Cells(ligp, cg).FormulaLocal = "=sum(g" + CStr(ligp + 1) + ":g" + CStr(curl - 1) + ")"
End If
ligp = 0
Case "P1":
If ligp > 0 Then
wgo.Cells(ligp, cg).FormulaLocal = "=sum(g" + CStr(ligp + 1) + ":g" + CStr(curl - 1) + ")"
End If
ligp = curl
If forms = "" Then
forms = "=g" + CStr(curl)
Else
forms = forms + "+g" + CStr(curl)
End If
Case "":
If ligp > 0 Then
wgo.Cells(ligp, cg).FormulaLocal = "=sum(g" + CStr(ligp + 1) + ":g" + CStr(curl - 1) + ")"
End If
If ligs > 0 Then
wgo.Cells(ligs, cg).FormulaLocal = forms
End If
Exit Do
End Select
curl = curl + 1
Loop
End Sub
EDIT: code corrigé