IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Sur base d'une valeur à "oui" créer une nouvelle ligne dans une autre feuille et y copier des données


Sujet :

Excel

  1. #41
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour casefayere, tu m'en veux pas d'avoir introduit mon nez dans votre discussion

    Voila encore une code amélioré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastLig As Long
     
    If Target.Count = 1 Then
       Application.ScreenUpdating = False
       LastLig = Cells(Rows.Count, 3).End(xlUp).Row
       If Not Intersect(Target, Range("C4:V" & LastLig)) Is Nothing Then
          If Target.Row = LastLig Then
             Application.EnableEvents = False
             Range("A" & Target.Row).Value = Target.Row - 3
             If Range("AL" & Target.Row).Value = 0 Then
                Range("X4:AK4").Copy Range("X" & LastLig)
                Range("X" & LastLig & ":AK" & LastLig).Value = "non"
             End If
             Application.EnableEvents = True
          End If
          Modifie Target
       ElseIf Not Intersect(Target, Range("X4:AK" & LastLig)) Is Nothing Then
          Range("AL" & Target.Row).Value = Application.CountIf(Range("X" & LastLig & ":AK" & LastLig), "oui")
          If Target.Value = "oui" Then
             Transfert Target
          Else
             Supprime Target
          End If
       End If
    End If
    End Sub
     
    'Sub de transfert
    Private Sub Transfert(Targ As Range)
    Dim LastLig As Long
     
    With Sheets("Liste des produits par client")
       .AutoFilterMode = False
       LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
       .Cells(LastLig, 1).Value = LastLig - 3
       .Range("B" & LastLig & ":C" & LastLig).Value = Range("C" & Targ.Row & ":D" & Targ.Row).Value
       .Range("D" & LastLig & ":F" & LastLig).Value = Range("G" & Targ.Row & ":I" & Targ.Row).Value
       .Range("G" & LastLig).Value = Cells(3, Targ.Column).Value
       .Range("M" & LastLig).Value = Range("A" & Targ.Row)
    End With
    End Sub
     
    'Sub de modification
    Private Sub Modifie(Targ As Range)
    Dim Plage As Range
    Dim Code As Long
     
    Code = Cells(Targ.Row, 1).Value
    With Sheets("Liste des produits par client")
       .AutoFilterMode = False
       Set Plage = .UsedRange
       If Plage.Rows.Count > 1 Then
          Plage.AutoFilter field:=13, Criteria1:=Code
          If Plage.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
             Range("C" & Targ.Row & ":D" & Targ.Row).Copy Plage.Offset(1, 1).Resize(Plage.Rows.Count - 1, 2).SpecialCells(xlCellTypeVisible)
             Range("G" & Targ.Row & ":I" & Targ.Row).Copy Plage.Offset(1, 3).Resize(Plage.Rows.Count - 1, 3).SpecialCells(xlCellTypeVisible)
          End If
       End If
       Set Plage = Nothing
       .AutoFilterMode = False
    End With
    End Sub
     
    'Sub de suppression
    Private Sub Supprime(Targ As Range)
    Dim Plage As Range
    Dim Prod As String
    Dim Code As Long
     
    Prod = Cells(3, Targ.Column).Value
    Code = Cells(Targ.Row, 1).Value
    With Sheets("Liste des produits par client")
       .AutoFilterMode = False
       Set Plage = .UsedRange
       If Plage.Rows.Count > 1 Then
          Plage.AutoFilter field:=13, Criteria1:=Code
          Plage.AutoFilter field:=7, Criteria1:=Prod
          If Plage.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
             .Range("A4:A" & Plage.Rows.Count + 4).SpecialCells(xlCellTypeVisible).EntireRow.Delete
          End If
       End If
       Set Plage = Nothing
       .AutoFilterMode = False
    End With
    End Sub
    j'ai caché la colonne AL parce que je récupère là bas le nombre de oui choisies par l'utilisateur

    ci-joint fichier à tester
    j'ai pris le N° client comme clef unique
    si on choisit un client et on lui affecte un produit, si on change les infos du clients (nom, prénom....) ceci se répercutera sur l'autre feuille.

    Il reste à gérer la mise à jour des n° des commandes de la feuille Liste des produits par client en cas de suppression.
    A tester le fichier, je vais l'enlever ce soir

  2. #42
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Bonjour mercatog,

    J'ai regardé à ton fichier. Je trouve la mise à jour en temps réel super pratique.

    Si j'encode 3 clients et leur attribue des produits. Le détail client se met à jour.

    Si je supprime les produits du premier client, il y a un souci dans la numérotation qui reste à 2. (colonne "A" de la feuille détail produit)

    Citation Envoyé par mercatog
    Il reste à gérer la mise à jour des n° des commandes de la feuille Liste des produits par client en cas de suppression.
    A tester le fichier, je vais l'enlever ce soir
    Je ne comprends pas ce que tu veux dire par "gérer la mise à jour des n° des commandes"

    Encore merci à vous deux pour votre aide précieuse

    Dans la feuille détail produit, est ce qu'on peut masqué la colonne code ou elle va être utilisée pour le publipostage qui vient après ?

  3. #43
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    re,

    Je viens de revenir :
    1 - Non bien sur je ne t'en veux pas mercatog, bien au contraire, quand on peux être plusieurs à apporter des idées.

    2 - j'ai regardé ton fichier et je pense qu'il est bien mieux élaboré que ma proposition.

    A Greg, je pense aussi qu'il va falloir gérer des numéros de commande si tu ne veux pas envoyer plusieurs fois les mêmes courriers, à moins que tu supprimes tout le publpostage effectué mais tu n'aurais plus de trace, d'autant plus qu'un même client peut avoir des commandes différentes

  4. #44
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux cacher aussi le colonne M de la 2ème feuille; et pour la mise à jour des n° de commande suite à une suppression, remplace la sub suppression par celle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    'Sub de suppression
    Private Sub Supprime(Targ As Range)
    Dim Plage As Range
    Dim Prod As String
    Dim Code As Long
     
    Prod = Cells(3, Targ.Column).Value
    Code = Cells(Targ.Row, 1).Value
    With Sheets("Liste des produits par client")
       .AutoFilterMode = False
       Set Plage = .UsedRange
       If Plage.Rows.Count > 1 Then
          Plage.AutoFilter field:=13, Criteria1:=Code
          Plage.AutoFilter field:=7, Criteria1:=Prod
          If Plage.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
             .Range("A4:A" & Plage.Rows.Count + 4).SpecialCells(xlCellTypeVisible).EntireRow.Delete
          End If
       End If
       Set Plage = Nothing
       .AutoFilterMode = False
       For Code = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
          .Cells(Code, 1) = Code - 3
       Next Code
    End With
    End Sub
    ci

  5. #45
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par casefayere
    A Greg, je pense aussi qu'il va falloir gérer des numéros de commande si tu ne veux pas envoyer plusieurs fois les mêmes courriers, à moins que tu supprimes tout le publpostage effectué mais tu n'aurais plus de trace, d'autant plus qu'un même client peut avoir des commandes différentes
    De ce coté la cela devrait aller car il s'agira d'un publipostage annuel (sauf la première année ou cela sera mensuel)

    Par contre, je ne vois toujours pas comment faire mon publipostage et indiquer à word de ne prendre en compte qu'une seul fois l'adresse du client mais bien de rassembler tout ses produits sur une meme page.

    Citation Envoyé par mercatog
    Tu peux cacher aussi le colonne M de la 2ème feuille; et pour la mise à jour des n° de commande suite à une suppression, remplace la sub suppression par celle ci
    Merci je vais essayer de faire ca :-)

  6. #46
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    envoies un modele word, ça aidera a voir tous les champs à inserer dans la fusion, j'ai une vague idée...

  7. #47
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Voici en gros le fichier de publipostage
    Fichiers attachés Fichiers attachés

  8. #48
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Je suis arrivé à faire mon publipostage.

    Il prend bien les infos dont j'ai besoin.

    Par contre, je n'arrive pas, même avec les filtres, à indiquer 1 fois le client et la liste de tout ses produits sur la même page.

    Expliqué autrement :

    Si Charles à 3 produits, dans la feuille "détail produit" j'ai 3 lignes et en appliquant un publipostage, j'ai 3 lettres.

    Alors que l'idéal pour moi serait d'avoir 1 lettre avec les 3 produits repris dessus.

    Vous avez des idées ?

  9. #49
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Mets ton code pour publipostage

  10. #50
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    je n'ai pas de code pour le publipostage (je sais pas programmer)

    j'utilise l'assistant de publipostage dans word pour créer le lien vers les colonnes excel

    J'ai essayé toutes les combinaisons de filtre possible dans word lors de mon publipostage mais impossible de regrouper les différents produits sur une même page.

    auriez vous une idée ?

  11. #51
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir Gregk, le forum
    C'est dommage, je n'ai plus le temps mais je m'en doutais, il faut réfléchir à ajouter une feuille qui reprend les commandes par client mais vu ton organisation actuelle, ce n'est pas évident car il faudrait remettre en entete tous les renseignements à publiposter nom, prenom, adresse, produits etc...

    bon courage

  12. #52
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Je ne suis pas contre mais je ne vois vraiment pas comment pouvoir faire cela

  13. #53
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    Que pensez vous pour résoudre ce problème d'essayer d'utiliser la formule : RECHERCHEV()

  14. #54
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ce n'est pas possible en publipostage...

    Idéalement, il faudrait travailler avec Access
    , logiciel grâce auquel ce genre de rapport est établi sans aucune ligne de code en cinq minutes chrono...

    Pour réaliser cela en Excel (sans publipostage Word), on pourrait essayer un tableau croisé dynamique, mais ce n'est pas le top.

    Hors programmation, pour le réaliser soit tout en Excel soit en utilisant Excel et Word, il n'y aura pas de salut sans programmation (assez lourde pour le deuxième cas, qui plus est), et en s'assurant d'abord d'une bonne organisation des données.

    Pour le faire tout en Excel, on pourrait s'orienter vers un filtre avancé programmé en VBA...

  15. #55
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    RECHERCHEV ne permet pas cela (voir mon tuto à ce sujet).

  16. #56
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    J'ai pensé créer un troisième onglet qui permettrait (avec une mise en page réalisée en excel) de copier les données relatif à un code id.

    Je devrais modifier les id à la mains pour imprimer mais cela me prendrait quand même beaucoup moins de temps.

    Exemple :

    Code id : "1" (à complété à la mains)

    Client : Toto xxx
    habitant : rue taratata
    à acheté :

    • 1/ bic; xxx
    • 2/ latte; xxx
    • 3/ colle; xxx



    Une fois le "code id" complété, il va me chercher les données dans la liste des produits et tout ce qui à un code id à "1" est copié dans cet onglet.

    C'est possible ?

    PS : je suis obligé de travailler avec un fichier excel

  17. #57
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    J'ai cru que cela pourrait fonctionner car nous avons dans le tuto une liste de client, ou va rechercher les données pour compléter la facture.

    Dans mon cas, je dois aller chercher les données du client (comme pour la facture), la lier (soit par le nom, soit par le code id unique) aux différents produits. Et l'imprimer pour chaque client.

  18. #58
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    RECHERCHEV() récupère UNE valeur (pas une liste de valeurs) en fonction d'une "clé" (une valeur unique, pour bien faire) se trouvant dans première colonne de la plage source (Il y a un schéma au début du tuto).

    Donc oui, tu peux récupérer les données signalétiques d'un client pour remplir l'entête de la facture, mais tu ne peux pas récupérer plusieurs lignes qui renseigneraient les produits achetés par le client.

    Pour récupérer plusieurs lignes correspondant à un ou plusieurs critères, tu dois passer par un filtre avancé, ce qui demande la mise en place d'une zone de critères et l'expression de critères dans cette zone, ainsi que d'une zone (sous forme de liste) pour la récupération des données.

    Comme dit plus haut, c'est possible, avec ou sans programmation.

  19. #59
    Membre habitué
    Inscrit en
    Janvier 2011
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 120
    Points : 129
    Points
    129
    Par défaut
    C'est une bonne nouvelle que je puisse le faire.

    Si le publipostage ne peut pas fonctionner et que je dois indiquer les "code id" à la mains ce n'est pas grave et que la "facture" se crée entièrement avec le détail des tout les produits ce n'est pas grave.

    Je sais que j'en demande beaucoup, mais vous pourriez m'aider à faire dans un 3ème onglet ce genre de code ?

    Merci

  20. #60
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Sous la condition que les données sont organisées sous forme de liste, voici une illustration de l'extraction de données via le filtre avancé.

    Les données sont organisées avec une ligne par article, et il y a une colonne qui reprend l'ID du client.



    Dans un nouvel onglet, on reprend l'intitulé de la colonne qui contient l'ID du client, et on indique en dessous l'ID pour lequel on veut récupérer les données.

    On reprend également, par exemple en-dessous, les intitulés des colonnes que l'on souhaite récupérer. Pour jouer avec le filtre avancé sur plusieurs feuilles, il faut procéder comme suit (sur base de mes illustrations):
    sélectionner A1:A2 de la plage de destination ;
    remplir le premier champ en allant sélectionner le tableau des données
    préciser comme plage de destination la plage A4:D5 (il n'est pas nécessaire de sélectionner plus de lignes, un message précisera si l'on veut étendre la plage)



    On obtient alors la liste des données correspondant au critère déterminé.



    C'est le principe, à adapter à ton cas, en notant bien que les données se trouvant sous la plage de restitution seront écrasées au moment de la récupération des données.

    Je précise que les modifications ne sont pas dynamiques, c'est-à-dire que la modification de la cellule A2 n'amène pas de modifications de la liste. Il faut recommencer le processus à chaque modification du critère.

Discussions similaires

  1. Forcer une nouvelle ligne dans une zone de texte
    Par nicolas2603 dans le forum IHM
    Réponses: 1
    Dernier message: 28/05/2008, 12h15
  2. Réponses: 3
    Dernier message: 05/05/2008, 12h00
  3. Réponses: 2
    Dernier message: 06/02/2007, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo