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

Macros et VBA Excel Discussion :

Copier ligne saisie par un formulaire vers une autre feuille selon le nomclient


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 51
    Points
    51
    Par défaut Copier ligne saisie par un formulaire vers une autre feuille selon le nomclient
    Bonjour tout le monde,
    Ne sachant pas comment faire, je me tourne encore une fois vers vous.

    En fait j'ai crée une formulaire qui me permet de saisir mes lignes de clients dans une feuille d'un fichier. Dans ce fichier il y'a une case "Nomclient" et une feuille a part pour chaque client. j'aimerais avoir une macro qui, à chaque fois qu'une nouvelle ligne de client est saisie, copiera cette ligne pour la classer dans la feuille du client concerné.

    Merci beaucoup d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comment est créée la feuille pour chaque nouveau client ?

    Si vous avez du code pour cette création, ce serait bien de le mettre en ligne.

    Cordialement.

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Merci Kergresse. En fait je connais la liste de mes clients et du coup j'ai déja ajouté à la main une feuille pour chaque client. C'est vrai que c'est beaucoup plus pratique d'avoir une macro qui l'ajoute, mais je crois que ça je pourrais le faire. Mon plus grand probléme c'est l'ajout des ligne dans la feuille concernée.
    Encore merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le fichier ci-joint contient une feuille Client et une feuille Modèle client. Dans l'exemple que j'ai pris, les informations à transférer sur une nouvelle feuille client vont de la colonne 1 à la colonne 9. La colonne I (donc la dernière information saisie pour qualifier un client) est une zone nommée "DerniereColonneInfo".

    Une solution possible selon deux méthodes :

    • Par une macro évènementielle sur la saisie d'une info sur la dernière colonne sur la feuille clients.
    • Par une macro classique présente dans le module_Client de VBA.


    Le déclenchement de l'une ou l'autre macro crée une nouvelle feuille depuis la feuille Modèle client et copie la ligne pour le dernier client créé.

    Si le nombre de clients devient important (ce que je vous souhaite), il peut être fastidieux de rechercher la bonne feuille. Les macros génèrent deux liens hypertextes pour naviguer de la feuille des clients à la feuille pour un client et vice-versa.

    La feuille modèle est, bien sûr, à adapter à votre feuille client actuelle.

    Si votre saisie est réalisée depuis un UserForm (votre message n'est pas clair), la saisie sur la dernière colonne déclenchera la copie sur la nouvelle feuille. Dans ce cas, il faut redéfinir la zone nommée pour que cela corresponde à votre code déjà existant.


    La macro événementielle sur la feuille client :

    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
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal DerniereInfoClient As Range)
     
    Dim ShClients As Worksheet
    Dim ShNouveauClient As Worksheet
    Dim ShModele As Worksheet
     
    Dim CelluleClient As Range
     
    Dim NomNouvelleFeuille As String
    Dim NomFeuilleClient As String
     
       If DerniereInfoClient.Count > 1 Then Exit Sub
     
     
     '  On Error Resume Next
       If Not Application.Intersect(DerniereInfoClient, Range("ColonneDerniereInfo")) Is Nothing Then
     
             ' Identification de la feuille Clients
             Set ShClients = Sheets("Clients")
             NomFeuilleClient = "'" & ShClients.Name & "'"  ' Pour les liens hypertextes
     
             Set CelluleClient = ShClients.Cells(DerniereInfoClient.Row, 1)
             CelluleClient.Hyperlinks.Delete
     
             Set ShModele = Sheets("Modèle client")
     
             ' Création d'une nouvelle feuille client à partir du modèle
             ShModele.Copy after:=Sheets(Sheets.Count)  ' On place la nouvelle feuille en dernier
             Set ShNouveauClient = ActiveSheet
             ShNouveauClient.Name = CelluleClient & "(" & Sheets.Count & ")"
             NomNouvelleFeuille = "'" & ShNouveauClient.Name & "'"
     
             ' Copie des informations de la feuille clients sur la nouvelle feuille client
             Range(ShClients.Cells(CelluleClient.Row, 1), ShClients.Cells(CelluleClient.Row, DerniereInfoClient.Column)).Copy
     
             ShNouveauClient.Cells(2, 1).Select
             ShNouveauClient.Paste
             ' On crée un lien hypertexte entre la nouvelle feuille client et le client de la feuille des clients
             ShNouveauClient.Hyperlinks.Add Anchor:=ShNouveauClient.Range("A2"), Address:="", SubAddress:=NomFeuilleClient & "!A" & CelluleClient.Row, TextToDisplay:=CelluleClient.Value
             ' Crée un lien hypertexte du client de la feuille clients avec la nouvelle feuille
             ShClients.Hyperlinks.Add Anchor:=CelluleClient, Address:="", SubAddress:=NomNouvelleFeuille & "!A2", TextToDisplay:=CelluleClient.Value
     
             ShClients.Activate
             CelluleClient.Offset(1, 0).Select
     
             Set ShModele = Nothing
             Set CelluleClient = Nothing
             Set ShNouveauClient = Nothing
             Set ShClients = Nothing
     
       End If
     
     
    End Sub

    La macro dans le module standard :

    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
    Option Explicit
     
    Sub CreationNouveauClient()
     
     
    Dim ShClients As Worksheet
    Dim ShNouveauClient As Worksheet
    Dim ShModele As Worksheet
     
     
    Dim CelluleClient As Range
     
    Dim NomNouvelleFeuille As String
    Dim NomFeuilleClient As String
    Dim DerniereLigneClients As Long
    Dim DerniereColonneACopier As Long
     
     
             ' Identification de la feuille Clients
             Set ShClients = Sheets("Clients")
             NomFeuilleClient = "'" & ShClients.Name & "'"  ' Pour les liens hypertextes
             DerniereLigneClients = ShClients.Cells(ShClients.Rows.Count, 1).End(xlUp).Row
             DerniereColonneACopier = 9 ' A définir
     
             Set CelluleClient = ShClients.Cells(DerniereLigneClients, 1)
             CelluleClient.Hyperlinks.Delete
     
             Set ShModele = Sheets("Modèle client")
     
              ' Création d'une nouvelle feuille client à partir du modèle
             ShModele.Copy after:=Sheets(Sheets.Count)  ' On place la nouvelle feuille en dernier
            ' Création d'une nouvelle feuille client
           '  Sheets.Add after:=Sheets(Sheets.Count)  ' On place la nouvelle feuille en dernier
             Set ShNouveauClient = ActiveSheet
             ShNouveauClient.Name = CelluleClient & "(" & Sheets.Count & ")"  ' A modifier si besoin, mais attention à l'homonymie des clients
             NomNouvelleFeuille = "'" & ShNouveauClient.Name & "'"   ' Pour les liens hypertextes
     
             ' Copie des informations de la feuille clients sur la nouvelle feuille client
             Range(ShClients.Cells(CelluleClient.Row, 1), ShClients.Cells(CelluleClient.Row, DerniereColonneACopier)).Copy
     
             ShNouveauClient.Cells(2, 1).Select
             ShNouveauClient.Paste
     
             ' On crée un lien hypertexte entre la nouvelle feuille client et le client de la feuille des clients
             ShNouveauClient.Hyperlinks.Add Anchor:=ShNouveauClient.Range("A1"), Address:="", SubAddress:=NomFeuilleClient & "!A" & CelluleClient.Row, TextToDisplay:=CelluleClient.Value
             ' Crée un lien hypertexte du client de la feuille clients avec la nouvelle feuille
             ShClients.Hyperlinks.Add Anchor:=CelluleClient, Address:="", SubAddress:=NomNouvelleFeuille & "!A1", TextToDisplay:=CelluleClient.Value
     
             ShClients.Activate
             CelluleClient.Offset(1, 0).Select
     
             Set ShModele = Nothing
             Set CelluleClient = Nothing
             Set ShNouveauClient = Nothing
             Set ShClients = Nothing
     
     
    End Sub
    Cordialement.

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    OH KERGRESSE. c'est super gentil de ta part, je ne sais même pas comment te remercier. bref merci beaucoup. je vais adapter la macro, la tester et je reviendrai vers toi pour te dire si c'est bon
    A+

    Salut KERGRESSE.
    j'ai adapté le code; il marche mais il y'a un soucis car il me crée toujours une nouvelle feuille même si c'est le même client. j'aimerais qu'il me copie la ligne sur la feuille du client si ce dernier existe déja (sans créer une nouvelle feuille)
    Merci

    Précision: je saisie à l'aide d'un userform

  6. #6
    Invité
    Invité(e)
    Par défaut
    Paster,

    Une solution serait de faire le lien hypertexte sur une colonne de la feuille des clients indiquant le nom de l'onglet client en correspondance.

    Un nouvel onglet ne serait ajouté que s'il n'existe pas dans le fichier. Cela éviterait également d'inclure un numéro d'ordre au nom de l'onglet créé comme actuellement. Dans le cas contraire, l'onglet client serait seulement mis jour.

    Cordialement.

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Merci KERGRESSE. Mais je n'arrive pas à appliquer ton idée. ne serait il pas possible de faire une sorte de condition du genre
    ah non file c'est pour un fichier. excusez moi

  8. #8
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Salut KERGRESSE, salut tout le monde,
    je peine toujours à trouver une soulution à mon problème. la macro de KERGRESSE(que je remercie encore) me cré tout le temps une nouvelle feuille alors que je veux qu'elle me place la ligne copiée dans la feuille du client concerné si cette feuille existe déja.
    Est ce que quelqu'un à une solution?
    Merci

Discussions similaires

  1. [XL-2010] Copier plage de cellules vers une autre feuille selon un critère dans une boucle
    Par klash384 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2015, 17h53
  2. [XL-2013] Copier lignes vers une autre feuille si une cellule = à
    Par antgrandj dans le forum Excel
    Réponses: 10
    Dernier message: 19/06/2014, 18h37
  3. [XL-2007] Copier ligne suite a une condition vers une autre feuille
    Par Pexou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/11/2013, 10h43
  4. [XL-2007] Excel 2007 Copier Coller une ligne vers une autre feuille
    Par fcjunic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/02/2013, 21h54
  5. [XL-2007] copier une ligne d'une feuille vers une autre feuille
    Par scarfunk dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/05/2010, 22h18

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