A voir également:
- VBA sous total (somme ; plage de donnée)
- Formule somme excel colonne - Guide
- Total uninstall - Télécharger - Divers Utilitaires
- Somme si couleur - Guide
- Total video converter - Télécharger - Conversion & Codecs
- Total adblock avis - Forum Mozilla Firefox
8 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
Voici mon code avec la partie en jaune qui bug et un tableau explicatif de ce que je souhaite réaliser
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 questionSub 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
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.
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é