Aide macro

Résolu
Gwen59000 Messages postés 52 Statut Membre -  
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Gwen59000 Messages postés 52 Statut Membre
     
    Bonjour,

    Personne pour m'aider ?
    0
  2. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Bonjour,
    la macro doit-elle juste créer une copie du fichier modele ou également inserer des données dans ce fichier ?
    0
  3. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  4. Gwen59000 Messages postés 52 Statut Membre
     
    Bonjour,

    La macro fonctionne mais nomme avec les cellule de la feuille 1 et non 2
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  7. Gwen59000 Messages postés 52 Statut Membre
     
    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
  8. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  9. Gwen59000 Messages postés 52 Statut Membre
     
    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
  10. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  11. Gwen59000 Messages postés 52 Statut Membre
     
    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
  12. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  13. Gwen59000 Messages postés 52 Statut Membre
     
    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
  14. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  15. Gwen59000 Messages postés 52 Statut Membre
     
    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
  16. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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