Copier coller avec une somme de colonne grâce à un offset

Je tente de copier des données d'un tableau vers un nouveau.

Par contre, je dois additionné les valeurs positive dans toutes les colonnes par multiple de 5.
Mon index de colonne est J. Donc, je dois relever les valeurs dans (J,10), (J,15), (J,20), (J,25) etc.... (encadré en rouge dans le tableau)
Je n'arrive pas à formuler mon vba correctement
Mais de base ce code fonctionne pour copier qu'une seule colonne (sans addition).

 
Sub OnSite()

     Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, RgCible As Range
     Dim Données(), Résultats(), NewRés()
     Dim i As Long, j As Long, NbL As Long, NbC As Long
     Const NbColRés = 10

     Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
     Set Cible = ActiveWorkbook.Worksheets("ON SITE")

     Set RgSource = Source.Range("D12:BB1519") 'Plage contenant toutes les données
     Set RgCible = Cible.Range("A6")         '1ère cellule de la plage cible

     Application.ScreenUpdating = False

     'On nettoie la cible (valeurs et formats)
     RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear

     'on stocke dans un tableau de variables toutes les valeurs de la plage de données
     Données = RgSource.Value2

     'i : Index pour de décalage en ligne de la plage cible
     i = 0

     For j = 1 To UBound(Données, 1)  'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)

          If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
               If Données(j, 10) > 0 Then
                    'Ici Données(j, 10) est une valeur numérique supérieure à 0

                              'On incrémente i pour le prochain résultat
                              i = i + 1
                              'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
                              '————————————————————————————————————————————————————————————————————————————
                              'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
                              '————————————————————————————————————————————————————————————————————————————
                              ReDim Preserve Résultats(1 To NbColRés, 1 To i)
                              Résultats(1, i) = Données(j, 1)
                              Résultats(2, i) = Données(j, 2)
                              Résultats(3, i) = Données(j, 5)
                              Résultats(4, i) = Données(j, 4)
                              Résultats(5, i) = Données(j, 10)

               End If
          End If
     Next

     If i = 0 Then
    MsgBox "Aucune ligne ne correspond aux critères"
    Exit Sub

End If

     'On transpose les résultats pour passer dans un tableau en lignes, colonnes
     NbL = UBound(Résultats, 2) 'Nbre de lignes = dimension 2 du tableau Résultats
     NbC = UBound(Résultats, 1) 'Nbre de colonnes = dimension 1 du tableau Résultats
     'Nouveau tableau de Résultats
     ReDim NewRés(1 To NbL, 1 To NbC)
     'Transposition
     For i = 1 To NbL
          For j = 1 To NbC
               NewRés(i, j) = Résultats(j, i)
          Next j
     Next i

     'On attribue à la plage cible redimensionnée les résultats
     RgCible.Resize(NbL, NbC).Value2 = NewRés

     'On se positionne juste au dessus de la cellule cible (True : avec défilement d'écran)
     Application.Goto RgCible.Offset(-1, 0), True

     Application.ScreenUpdating = True

End Sub

Il me permets de transcrire les données de cette façon dans une nouvelle page "on site" comme ci-dessous.

image

Ce que j'aimerais c'est modifier cette section du code pour me permettre d'additionnée des données à la colonne " Résultats(5, i) = Données(j, 10)" J'aimerais avoir une somme de toutes les colonnes " load" (en rouge dans l'image)" soit une formule qui me permets d'avoir " Résultats(5, i) = somme des Données(j, 10)+ offset 5....."

For j = 1 To UBound(Données, 1)  'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)

          If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
               If Données(j, 10) > 0 Then
                    'Ici Données(j, 10) est une valeur numérique supérieure à 0

                              'On incrémente i pour le prochain résultat
                              i = i + 1
                              'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
                              '————————————————————————————————————————————————————————————————————————————
                              'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
                              '————————————————————————————————————————————————————————————————————————————
                              ReDim Preserve Résultats(1 To NbColRés, 1 To i)
                              Résultats(1, i) = Données(j, 1)
                              Résultats(2, i) = Données(j, 2)
                              Résultats(3, i) = Données(j, 5)
                              Résultats(4, i) = Données(j, 4)
                              Résultats(5, i) = Données(j, 10)

Donc dans l'image ci-dessous, en rouge , ce sont les colonnes que je veut additionné, si les cellules contiennent quelque chose
En bleu, ce sont les autres informations qui doivent apparaître dans mon tableau lorsqu'il y a quelque chose dans la colonne load.

image

Finalement, dans mon tableau de résultats "on site". J'aimerais que la colonne quantity contiennent la somme de mes colonnes " loads" (en rouge)

Salut Caroline,

Des images, c'est bien (enfin, bof), un fichier (avec données non confidentielles), c'est 'achement mieux!

Sinon, une piste pour des données toutes les 5 lignes, c'est, dans ta boucle FOR, utiliser STEP.

For x = 1 TO 1000 Step 5

A+

Merci

Je vais essayer!

J'ai joint des images car je ne suis pas capable de joindre mon fichier il est beaucoup trop lourd

Alors, tu nous gardes 100-1000 lignes max tant que nous avons la structure principale, nous n'avons pas besoin de tout le fichier non plus!

Voici un aperç

21costing.zip (700.29 Ko)

u du document

Bonsoir Caroline,

Bon, fichier avec des #REF!, ce n'est pas l'idéal mais passons.
Par contre, relever les valeurs de [J10], [J15],..., comprends pas trop!

Ce ne serait pas plutôt :
- parcourir la colonne [J]
- si on relève une valeur positive, on additionne les valeurs de cette ligne dans les colonnes en rouge (qui, elles, sont espacées de 5)
- remettre tout ça dans 'on site' avec cette addition dans Qty et la valeur de [BE] pour la longueur

Ai-je bien compris le truc?

A+

Salut Caroline,

en supposant que j'aie vu juste, voici une macro qui devrait faire le boulot.
Je ne vérifie pas si la feuille 'On Site' existe!

Je n'ai pas testé : avec toutes ces cellules #REF! et N/A, c'était le plantage assuré!

Public Sub Costing()
'
Dim tTab, tData(), iIdx%
'
Application.ScreenUpdating = False
'
tTab = Range("A12:BE" & Range("J" & Rows.Count).End(xlUp).Row).Value
For x = 1 To UBound(tTab, 1)
    If tTab(x, 10) > 0 Then
        iIdx = iIdx + 1
        ReDim Preserve tData(5, iIdx)
        tData(0, iIdx - 1) = tTab(x, 4)
        tData(1, iIdx - 1) = tTab(x, 5)
        tData(2, iIdx - 1) = tTab(x, 8)
        tData(3, iIdx - 1) = tTab(x, UBound(tTab, 2))
        For y = 17 To UBound(tTab, 2) - 5 Step 5
            tData(4, iIdx - 1) = tData(4, iIdx - 1) + tTab(x, y)
        Next
    End If
Next
With Worksheets("On Site")
    If .Range("A6").Value <> "" Then .Range("A6:E" & .Range("A" & Rows.Count).End(xlUp).Row).Clear
    .Range("A6").Resize(iIdx, 5).Value = WorksheetFunction.Transpose(tData)
    .Activate
End With
'
Application.ScreenUpdating = True
'
End Sub

A+

Bonjour,

Je vous remercie mais ce n'est pas cela.

En modifiant mon document pour être capable de l'importer c'est sur que mes valeurs vont passer en #ref

Tel qu'expliqué dans mon 1er message "J" est uniquement une valeur de référence pour indiquer la colonne de départ qui est en réalité la colonne "D".

Mon code de base fonctionne bien quand on parle de juste une colonne, mais ce que je veux additionné les données de: données(J,10), données(J,15),données(J,20).....

Donc on part, de la colonne D et on décale de 10 cellules, ensuite on part de la colonne D et on décale de 15 cellules, et ensuite on part de la colonne D et on décale de 20 cellules et ainsi de suite. c'est pourquoi il est indiqué Données (j,10), Données (j,15), Données (j,20)

C'est pour ça que j'ai joint les images dans mon premier message pour que ce soit plus clair même si vous ne trouviez pas celà fameux ça l'aide beaucoup à la compréhension.

Salut Caroline,

déso, comprends pas! Faut dire que je suis immergé dans un projet autrement compliqué!
Sans doute ne suis-je pas assez attentif pour le tien!
Peux-tu me donner un fichier avec, sur la feuille 'On Site', un exemple du résultat attendu correspondant aux données de 'Shipping List' ?

Merci.

A+

rapport

bonjour Caroline90, c'est colonne 11 au lieu de 10, je crois (oubien on a une confusion avec le "offset")

7costing.zip (708.37 Ko)

Merci énormément sa fonctionne très bien

Je vais l'étudier pour le comprendre.

Rechercher des sujets similaires à "copier coller somme colonne offset"