Aide macro

Résolu/Fermé
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010 - 4 févr. 2010 à 09:20
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 5 févr. 2010 à 15:47
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
A voir également:

15 réponses

Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 08:26
Bonjour,

Personne pour m'aider ?
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 08:56
Bonjour,
la macro doit-elle juste créer une copie du fichier modele ou également inserer des données dans ce fichier ?
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 09:24
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 11:10
Bonjour,

La macro fonctionne mais nomme avec les cellule de la feuille 1 et non 2
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 11:13
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 11:22
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 11:45
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 11:52
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 12:10
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 14:07
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 14:26
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 14:32
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 14:59
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
Gwen59000 Messages postés 51 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 19 avril 2010
5 févr. 2010 à 15:18
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
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
5 févr. 2010 à 15:47
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