Extraction à l'intérieur d'une BD

Bonjour,

voici ma question:

Dans la BD ci-dessous, je désire extraire les lignes associées aux clients ayant fait 2 achats (donc ne pas tenir compte de ceux en ayant fait 1 seul achat seulement). Par la suite, je voudrais créer une colonne intitulée même magasin avec réponse oui/non, afin de savoir si le même client a réalisé ses 2 achats dans le même # de magasin ou pas... Je ne peux pas faire le tout manuellement car j'ai plus de 4400 clients...

Merci
magasin achat Client ID
8 01 2756 1
8 02 2756 1
10 01 2758 2
4 01 2759 3
7 02 2759 3
5 01 2760 4
5 01 2761 5
6 02 2761 5
6 01 2762 6
4 01 2763 7
4 01 2764 8
4 01 2765 9
4 02 2765 9
3 01 2766 10
6 02 2766 10
8 01 2767 11
8 01 2768 12


6 réponses

  1. Modérateur
    Bonjour ,

    1- j'ai testé une modification de ton message. C'était juste pour vérifier.
    Ton tableau correspond toujours?

    2- Tu dis :
    je désire extraire les lignes associées aux clients ayant fait 2 achats (donc ne pas tenir compte de ceux en ayant fait 2)

    Soit on en tiens compte soit pas... Faut savoir.

    0
    1. Oui pardon. Ne pas tenir compte de ceux ayant fait 1 seul achat seulement.
      0
    2. Modérateur
      @chaïIl faut que tu sois beaucoup (beaucoup, beaucoup...) plus clair.

      1- je désire extraire les lignes associées aux clients...
      • Que désires tu extraire?

      Toutes les valeurs de la ligne? Le numéro de ligne? Une seule valeur le n° du client?
      • Ou extraire cette (ces) donnée(s)?

      Autre feuille? => son nom?
      Ailleurs dans la même feuille? => ou?

      2- Comment le client 2756 a pu faire 1 achat puis 2 achats dans le magasin 8?
      Soit il n'en a fait qu'un, soit 2, soit 3... Non?
      0
    3. @pijaku1) Je désire extraire toute les valeurs de la ligne sur une autre feuille. Peut importe le nom de la feuille.

      2) En fait, dans la colonne achat on y retrouve 1 et 2 comme valeur. Le client peut avoir fait un seul achat, ex: 2758. Donc, pour ce numéro de client, on retrouve seulement une ligne associé à son numéro (avec 1 dans la colonne achat). Cependant, pour un autre client ex: 2756, on retrouve 2 lignes associées à ce numéro de client. Ainsi, il a donc fait un premier achat au magasin 8 et un second achat au magasin 8.

      Ainsi, dans l'extraction le client 2758 n'apparaîtrait pas car il a fait un seul achat tandis que pour le client 2756 dans l'extraction on retrouverait les deux lignes associées à chacun de ses achats puisqu'il en a fait 2.
      0
    4. Est-ce plus clair?
      0
  2. Bonjour à tous les deux

    C'est clair
    Une autre question. To tableau est il trié selon la colonne client comme dans ton exemple?

    Cdlmnt
    0
    1. Oui affirmatif!!
      0
    2. Modérateur
      @chaïJe viens de comprendre...
      Donc oui, c'est plus clair!

      Salut ccm81, tu prends le relais?
      0
  3. Un exemple à adapter via une macro
    https://www.cjoint.com/?3CrqJnHwdxG

    mes excuses (et salutations) à pijaku pour l'incruste

    Cdlmnt
    0
    1. Modérateur
      Pas de quoi s'excuser, c'est avec plaisir.
      0
    2. Bonjour merci beaucoup pour l'aide.
      Cependant, j'éprouve quelques petits problèmes. Je n'arrive pas à rouler la macro. J'ai changé les constantes. Cependant si le nom de mes colonnes diffères, dois-je les changer également à droite? Ex: Const cosceauFS = 25 ' colonne achat (ici achat doit devenir sceau?)

      ' constantes à modifier selon ta configuration
      Const FS = "BD" ' nom feuille soource
      Const lidebFS = 2 ' premier ligne données
      Const codebFS = 1 ' premiere colonne données
      Const nbco = 37 ' nombre de colonnes tableau
      Const copermisFS = 26 ' colonne client
      Const cosceauFS = 25 ' colonne achat

      Const FB = "Doubles abbatages seulement" ' feuille but
      Const lidebFB = 2 ' premiere ligne
      Const codebFB = 1 ' première colonne
      0
  4. 1. Je n'arrive pas à rouler la macro.
    que veux tu dire par là ?

    2. Cependant si le nom de mes colonnes diffères, dois-je les changer également à droite? Ex:
    Const cosceauFS = 25 ' colonne achat
    (ici achat doit devenir sceau?)


    Non seul le n° intervient, tout ce qu'il y a après l'apostrophe est un commentaire pour éclairer le programmeur et n'est pas "vu" par vba
    Par contre, dans la procedure les noms des constantes doivent aussi changer
    Donc Edition puis
    Remplacer coachetFS par cosceauFS et remplacer tout
    0
    1. Je veux dire que la macro lorsque je l'applique à mon projet ne fonctionne pas... j'ai des message d'erreur...

      même en remplacant les noms de colonnes...
      0
    2. J'ai toujours le même message d'erreur: erreur d'exécution '9'. L'indice n'appartient pas à la sélection....
      0
  5. J'ai toujours le même message d'erreur: erreur d'exécution '9'. L'indice n'appartient pas à la sélection....
    Quand tu obtiens ce message d'erreur, tu vérifies l'état des variables (en passant le curseur dessus)
    Vérifies que les noms des feuilles sont corrects (attention aux espaces)

    Envoies un extrait (50 lignes) de ton vrai ficier au format excel 2003 sur cjoint.com et joins le lien à ton prochain message
    0
    1. Je vérifie mais rien.... Peut-être verra tu une erreur:

      Désolé...

      ' constantes à modifier selon ta configuration
      Const FS = "BD"   ' nom feuille soource
      Const lidebFS = 2     ' premier ligne données
      Const codebFS = 1     ' premiere colonne données
      Const nbco = 37        ' nombre de colonnes tableau
      Const copermisFS = 26  ' colonne client
      Const cosceauFS = 25   ' colonne achat
      
      Const FB = "Feuil4"   ' feuille but
      Const lidebFB = 2     ' premiere ligne
      Const codebFB = 6     ' première colonne
      
      Public Sub Transfert()
      Dim lifinFS As Long, TFS, nbliFS As Long, plageFS As Range, co As Long, liFS As Long
      Dim client As String, achat As Long, nbachat As Long
      Dim TFB, nbliFB As Long, liFB As Long
      Dim t As Single
      t = Timer
      lifinFS = Sheets(FS).Cells(Rows.Count, codebFS).End(xlUp).Row
      Set plageFS = Sheets(FS).Range(Cells(lidebFS, codebFS), Cells(lifinFS, codebFS + nbco - 1))
      TFS = plageFS
      nbliFS = plageFS.Rows.Count
      nbliFB = Application.WorksheetFunction.SumIf(Columns(cosceauFS), ">=2")
      ReDim TFB(1 To nbliFB, 1 To nbco)
      liFS = 1
      liFB = 1
      On Error GoTo fin
      Do
        achat = TFS(liFS, cosceauFS)
        While achat = 1
          liFS = liFS + 1
          achat = TFS(liFS, cosceauFS)
        Wend
        client = TFS(liFS, copermisFS)
        nbachat = 1
        For co = 1 To nbco
          TFB(liFB, co) = TFS(liFS - 1, co)
        Next co
        liFB = liFB + 1
        While TFS(liFS, copermisFS) = client
          For co = 1 To nbco
            TFB(liFB, co) = TFS(liFS, co)
          Next co
          liFS = liFS + 1
          liFB = liFB + 1
        Wend
      Loop Until liFS >= nbliFS
      fin:
      Sheets(FB).Cells(lidebFB, codebFB).Resize(nbliFB, nbco) = TFB
      MsgBox " temps mis " & Timer - t & " sec"
      End Sub
      0
  6. Difficile de te répondre
    Sur quelle ligne se produit l'erreur, quelles sont les valeurs des variables qui interviennent dans cette ligne

    Je t'ai demandé un extrait du fichier au format excel 2003, sans ça on va tourner en rond

    Cdlmnt
    0