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. 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
    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,
        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. 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,
            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,

              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,
                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,

                  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,
                    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
                      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
                        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. Bonjour,

                          La macro fonctionne mais nomme avec les cellule de la feuille 1 et non 2
                          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. 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. Bonjour,

                                Personne pour m'aider ?
                                0