Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 15h26   #1
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut problème fso move chaîne de caractères trop longue

Bonjour le forum,

J'essaie d'auitomatiser le déplacement de fichiers depuis un dossier source vers un dossier archive.

Pour ce faire.
1 - Je crée le répertore d'archives par la méthode fso édictée par Sylkiroad dans la FAQ créer un dossier
2 - J'utilise la méthode fso

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub DeplaceFichier(source As String, destin As String)
 
Dim objOFS As Variant
 
Set objOFS = CreateObject("Scripting.FileSystemObject")
 
If (objOFS.FileExists(source)) Then
        objOFS.MoveFile source, destin
End If
 
Set objOFS = Nothing
 
Exit Sub
Ici, l'argument source désigne le chemin complet du fichier à déplacer (Dossier + Nom + extension), l'argument destin celui du fichier cible.

Il se trouve que si la longueur de destin est supérieure à la limite - classique - de 255 caractères, alors le code retourne un bug
Citation:
Chemin introuvable
Ya-t-il un moyen de résoudre ce problème?

Par avance, je vous remercie.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h59   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 235
Points : 7 235
Bonjour,

Une solution serait de passer par les commandes DOS (MOVE)

http://support.microsoft.com/kb/466425/fr
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h46   #3
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut arborescence

Bonjour Jérôme.

Merci pour ta réponse.

Cette commande DOS move est bien effective, mais déplace seulement l'arborescence, comme semble-t-il indiqué par Microsoft.

Citation:
déplacement de l'arborescence du répertoire source vers le répertoire cible.
Or, une fois le répertoire créé par la méthode Mkdir, j''aurais souhaité copier l'ensemble des fichiers intégrés dans chaque arborescence.

Question connexe. Cette limite de longueur est elle prise en compte dans les versions d'Excel ultérieures à 2003?

Merci encore.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 12h17   #4
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut déplacement API

Bonjour à tous,

J'ai trouvé la solution sur la toile.
Elle réside en l'utilisation des
Citation:
API Windows
(???)

Voici le code (méthode : copie puis suppression du ficier origine)

NE ME DEMANDEZ PAS DE TRADUIRE!

Code :
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
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
 
Const FO_MOVE = 1
Const FO_COPY = 2
Const FO_DELETE = 3
Const FO_RENAME = 4
 
Const FOF_SILENT = 4
Const FOF_NOCONFIRMATION = 10
 
Private Declare Function SHFileOperationA Lib "Shell32.dll" _
(lpFileOp As SHFILEOPSTRUCT) As Long
 
Private Function CopieDossier(Source As String, Dest As String, _
Optional Action As Byte, Optional Animation As Boolean) As Boolean
Dim OpStruct As SHFILEOPSTRUCT
 
With OpStruct
.wFunc = Action
.pFrom = Source
.pTo = Dest
'POUR MESSAGE AVANT D'ÉCRASER : 4 AU LIEU DE 10
.fFlags = 10
End With
CopieDossier = IIf(SHFileOperationA(OpStruct), False, True)
End Function
 
'---------------------------------
Sub Test()
 
Dim Source As String
Dim Dest As String
 
Source = "lerépertoireorigine\*.*"
Dest = "lerépertoirecible\"
 
If CopieDossier(Source, Dest, FO_COPY, True) Then
Kill source
Else
MsgBox "Un problème fut rencontré."
End If
End Sub
Ici, les varaiables source et Dest désigne des dossiers. Elles peuvent aussi désigner des fichiers précis

Code :
1
2
Source = "lerépertoireorigine\lefichier.pdf"
Dest = "lerépertoirecible\lefichier.pdf"
Restriction rencontrée : les fichiers
Citation:
Thums.db
Si quelqu'un peut me désigner ce que ce type de fichier représente, alors qu'il n'hésite pas!
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 11
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h56.


 
 
 
 
Partenaires

Hébergement Web