Aide macro

Résolu
Bonjour,

J'ai un classeur excel (\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Base de données\Données Affrètement\Base de données Affrètement.xls) dans lequel se trouve ma liste de clients dans la Feuil2 de la cellule C3 à la cellule C1001.
Je recherche une macro pouvant copier le classeur (\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\Modèle.xls) et le renommer dans le même répertoire par le nom du client dans le classeur précédent en C3 et ainsi de suite tout jusqu'au client en C1001 tout en sachant que s'il existe déjà abandonner et passer au suivant.

Merci pour votre aide,

Gwénaël
Configuration: Windows XP Internet Explorer 7.0

15 réponses

  1. Bonjour,

    Personne pour m'aider ?
    0
    1. Contributeur
      Bonjour,
      la macro doit-elle juste créer une copie du fichier modele ou également inserer des données dans ce fichier ?
      0
      1. Contributeur
        Re,
        tu peux essayer comme ceci:
        Sub crea_fichiers()
        
        Set fso = CreateObject("Scripting.FileSystemObject")
        
        For Each c In Sheets(1).Range("C3:C1001")
            
            ficdest = "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\" & CStr(c.Value) & ".xls"
            
            If Not fso.FileExists(pficdest) Then
                fso.CopyFile "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\Modèle.xls", ficdest
            End If
        
        Next c
        
        End Sub
        0
        1. Bonjour,

          La macro fonctionne mais nomme avec les cellule de la feuille 1 et non 2
          0
          1. Contributeur
            Bonjour,
            autant pour moi (j'avais fais des tests avec ma feuille 1):
            For Each c In Sheets(1).Range("C3:C1001") à remplacer par :
            For Each c In Sheets(2).Range("C3:C1001")
            0
            1. Re
              la j'ai un message d'erreur : erreur d'execution '5' : argument ou appel de procedure incorrect.

              ligne soulignee : fso.CopyFile "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\Modèle.xls", ficdest

              Merci pour le temps que tu me consacres,
              0
              1. Contributeur
                Re,
                cela pourrait etre du à un nom non-conforme dans ta plage C3:C1001, pourrais-tu stp mettre un exemple de fichier sur cjoint.com et poster le lien (un fichier avec juste les valeurs en C suffirait pour tester) ? sans pouvoir tester c'est difficle de trouver d'où vient l'erreur....
                0
                1. Re,

                  Je crois savoir, il y a des cellules vides ainsi que des noms de clients avec des caractères particuliers comme :
                  - * ; . etc..
                  Il y t'il un moyen de ne pas creer de ficher quand la cellule est vide et de ne pas tenir compte des caractères spéciaux ?
                  0
                  1. Contributeur
                    Re,
                    Pour les cellules vides c'est tres simple, il suffit de modifier le code comme ceci :
                    Sub crea_fichiers()
                    
                    Set fso = CreateObject("Scripting.FileSystemObject")
                    
                    For Each C In Sheets(1).Range("C3:C1001")
                        If Not IsEmpty(C) Then
                            ficdest = "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\" & CStr(C.Value) & ".xls"
                            
                            If Not fso.FileExists(pficdest) Then
                                fso.CopyFile "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\Modèle.xls", ficdest
                            End If
                        End If
                    Next C
                    
                    End Sub 

                    par contre pour ce qui est des caracteres spéciaux, tu devais avoir des noms de clients ds la plage, ce'st étrange.... je proposerais bien de nettoyer la plage excel avant mais ça effacerait les caractères interdits de ton fichier Excel, est-ce OK ?
                    0
                    1. Re,

                      Voici quelques un de mes clients en exemple :

                      A.D.C.
                      BROWAEYS-BRAME
                      CALLENS & LESAGE
                      D.H.L. FREIGHT (FRANCE)
                      ELBOMA - KOMA

                      Le problème est que d'autres de mes classeurs utilisent cette même colonne, donc si je change ces noms mes autres fichiers seront inutiles.

                      je crois bien qu'il va falloir que j'abandonne ce projet
                      0
                      1. Contributeur
                        Re,
                        en fait ça dépend, si un fichier avec le nom sans le caractere qui coince ne te gene pas, on peut modifier le code....les caractères non-autorisés pour les noms de fichiers sont : / \ : * ? " < > |
                        0
                        1. Re,

                          Si mon fichier dans la feuille 2 colonne c3 à c1001 n'est pas modifié et que c'est seulement les noms donnés aux fichiés dans le répertoire notes, c'est parfait !
                          0
                          1. Contributeur
                            Re,
                            comme ça ça devrait le faire, on traite juste le nom de fichier, pas de modif de la cellule excel :
                            Sub crea_fichiers()
                            
                            Set fso = CreateObject("Scripting.FileSystemObject")
                            
                            For Each C In Sheets(1).Range("C3:C1001")
                                If Not IsEmpty(C) Then
                                    ficdest = "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\" & ConvertToFilename(CStr(C.Value)) & ".xls"
                                    
                                    If Not fso.FileExists(pficdest) Then
                                        fso.CopyFile "\\Serveur3\dserveur\Récapitulatif Clients Lesquin\Notes Affrètement\Modèle.xls", ficdest
                                    End If
                                End If
                            Next C
                            
                            End Sub
                            
                            Function ConvertToFilename(ByVal fname As String)
                            
                            fname = Replace(fname, "/", "")
                            fname = Replace(fname, "\", "")
                            fname = Replace(fname, ":", "")
                            fname = Replace(fname, "*", "")
                            fname = Replace(fname, "?", "")
                            fname = Replace(fname, """", "")
                            fname = Replace(fname, "<", "")
                            fname = Replace(fname, ">", "")
                            fname = Replace(fname, "|", "")
                            
                            ConvertToFilename = fname
                            End Function
                            0
                            1. C'est absolument parfait, Bravo et merci encore.
                              Te sers tu d'un bouquin pour toutes ces lignes de codes? En existe t'il avec des exemples de lignes en fonction
                              de différents cas ?

                              A+
                              0
                              1. Contributeur
                                Re,
                                de rien :)
                                pour ce qui est des bouquins, oui j'en ai utilisé au début, un pour m'initier (tres leger, genre enregistrement automatique de macros et compréhension des "basiques", mais je ne connaissais pas du tout la programmation encore) puis un qui était un peu plus "poussé"...mais bon maintenant c juste l'expérience, l'utilisation de l'aide vba (la touche F1 est mon amie) et quelques recherches sur google :)...
                                0