Copier des données sur un autre onglet

Bonjour,

Je souhaite recopier des données dans un autre onglet.

L'onglet pca est un onglet ou il y a des extractions.

Je souhaite recopier sur la feuil2 les cellules que j'ai besoin en cherchant que les magasins de la base.

Dans la mesure du possible, dans l'onglet pca un magasin apparaît en plusieurs ligne, serait-il possible de faire la somme de MT CDES AUTO ENVOYEES et MT CDES MANU ENVOYEES.

Merci de votre aide.

12david4.zip (201.93 Ko)

Cordialement.

Bonjour,

les cellules que j'ai besoin en cherchant que les magasins de la base

Comment pourrions-nous savoir "de quelles cellules tu aurais besoin" ?

Comment reconnaît-on les "magasins de la base" ? Par leur nom, leur numéro, ... ?

Si pour un même magasin, les montants concernent des rayons différents, qu'est-on supposé calculer ?

Illustre par un ou deux exemples le résultat attendu (avec des explications sur le "cheminement", si tu veux qu'on puisse t'aider).

Pour le reste, peut-être que la fonction SOMME.SI pourrait t'être utile ... tu as déjà testé ?

Bonjour,

Je souhaite rechercher les cellules de l’onglet feuil2 dans l’oglet Pca.

Les entêtes sont les mêmes dans les deux onglets.

On peux reconnaître les magasins par leurs codes.

Je souhaite avoir la somme par magasin peu importe les rayons.

Merci d’avance.

Cordialement

Bonsoir dadou482,

Salut U. Milité,

Un essai,

il faut convertir les données des colonnes N et Q de la feuille ""PCA" au format nombre si tu veux les additionner

Option Explicit
Sub test()
Dim a, i As Long, j As Byte, w(), e, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    Application.ScreenUpdating = False
    a = Sheets("base").Range("a1").CurrentRegion.Value
    For i = 1 To UBound(a, 1)
        dico(a(i, 1)) = Empty
    Next
    With Sheets("PCA").Range("A1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                            .Rows.Count & ")"), Array(1, 2, 6, 7, 8, 14, 17))
    End With
    For i = 2 To UBound(a, 1)
        If dico.exists(a(i, 1)) Then
            If IsEmpty(dico(a(i, 1))) Then
                ReDim w(1 To UBound(a, 2))
                For j = 1 To UBound(a, 2)
                    w(j) = a(i, j)
                Next
            Else
                w = dico(a(i, 1))
                w(UBound(w) - 1) = w(UBound(w) - 1) + a(i, 6)
                w(UBound(w)) = w(UBound(w)) + a(i, 7)
            End If
            dico(a(i, 1)) = w
        End If
    Next
    For Each e In dico.keys
        If IsEmpty(dico(e)) Then dico.Remove e
    Next
    If dico.Count > 0 Then
        With Sheets("Feuil2").Cells(1).CurrentRegion
            With .Offset(1)
                .ClearContents
                .Resize(dico.Count, 7).Value = Application.Index(dico.items, 0, 0)
            End With
        End With
    End If
    Application.ScreenUpdating = True
    Set dico = Nothing
End Sub

Mais bon, j'ai un doute quant à la valeur à afficher dans la colonne "Nom Rayon" en "feuil2" puisque la macro ne renvoie qu'une ligne par magasin

La colonne "Nom rayon" est donc inutile

klin89

Bonjour,

La macro m’annonce une erreur pouvez vous m'aider ?

6doc2.docx (16.96 Ko)

Merci d'avance

Bonjour,

Salut Klin89

Il faut peut-être que tu prennes le temps de lire intégralement et attentivement les messages qui te sont adressés ... Je parle du mien, bien sûr, mais aussi de celui de Klin89: en faisant ce qu'il préconise, j'obtiens des résultats sans qu'un message d'erreur s'affiche, lorsque j'exécute son code!

Merci,

Je viens de réussir par contre j'ai un dernier souci.

La macro calcul la somme de tous les magasin de l'onglet PCA.

Or je souhaitais qu'il cherche et calcul la somme des magasins de l'onglet BASE.

Merci énormément de votre aide, ce forum est super !!!

Re dadou482

Une variante :

Option Explicit
Sub test()
Dim a, e, w(), i As Long, j As Byte, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    Application.ScreenUpdating = False
    a = Sheets("base").Range("a1").CurrentRegion.Value
    For i = 1 To UBound(a, 1)
        dico(a(i, 1)) = VBA.Array(a(i, 1), a(i, 2), Empty, Empty, Empty, Empty, Empty)
    Next
    With Sheets("PCA").Range("A1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                                               .Rows.Count & ")"), Array(1, 2, 6, 7, 8, 14, 17))
    End With
    For i = 2 To UBound(a, 1)
        If dico.exists(a(i, 1)) Then
            w = dico(a(i, 1))
            If IsEmpty(dico(a(i, 1))(2)) Then
                w(2) = a(i, 3): w(3) = a(i, 4): w(4) = a(i, 5)
            End If
            w(5) = w(5) + a(i, 6)
            w(6) = w(6) + a(i, 7)
            dico(a(i, 1)) = w
        End If
    Next
    If dico.Count > 0 Then
        With Sheets("Feuil2").Cells(1).CurrentRegion
            With .Offset(1)
                .ClearContents
                .Resize(dico.Count, 7).Value = Application.Index(dico.items, 0, 0)
            End With
            .Parent.Activate
        End With
    End If
    Application.ScreenUpdating = True
    Set dico = Nothing
End Sub

Champion du monde

klin89

Bonjour,

Merci énormément klin89

C'est super !!!!

Bonjour dadou482, le forum,

si tu veux remercier Klin89 pour la super solution qu'il t'a trouvée, regarde ce que tu peux faire dans le coin bas droit de son post précédent.

tu peux aussi passer le sujet en résolu : toujours sur le même post, dans le coin haut droit, clique sur le bouton

dhany

Bonjour,

Merci pour l’info je viens de le faire....

Cordialement.

merci beaucoup, et bonne continuation !

dhany

Re bonjour,

Merci à vous aussi !

Cordialement

Rechercher des sujets similaires à "copier donnees onglet"