× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 MACRO pour importation depuis plusieurs classeurs
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
vg00
  Posté le 27/01/2010 @ 11:59 
Aller en bas de la page 
Nouvel astucien

Bonjour,
Je n'arrive pas à rédiger une macro
permettant de choisir un répertoire

ensuite venir recopier automatiquement dans un fichiers dans un tableau en colonne
les données de chaque fichier
la structure est identique pour chaque fichiers
L11 = Nom contact
M12 = Tel contact
M13 = Fax contact
L14 = Mail contact
si N16 est différent de vide alors N16 = Société
si N16 vide ou K16 sans les 16 premiers caractères = Société

passer au fichier excel suivant
en fin de traitement proposer la sauvegarde du fichier obtenu

Merci d'avance

Publicité
galopin01
 Posté le 27/01/2010 à 18:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,
C'est quoi exactement le problème ?
Choisir un répertoire ?
Parcourir le répertoire pour ouvrir chaque xls...
Ou faire faire tout le boulot à votre place ?
ici on aide (un peu), mais c'est pas une SSII gratuite !

Fournir le fichier avec l'état d'avancement de ton travail, c'est le meilleur moyen d'avoir une réponse.

Voici une routine qui permet d'explorer un répertoire et de sélectionner les fichier à traiter.
Sub test()
With Application.FileDialog(msoFileDialogOpen)
' Permet une multi sélection
.AllowMultiSelect = True
.Show
' Display paths of each file selected
For lngCount = 1 To .SelectedItems.Count
MsgBox .SelectedItems(lngCount)
' ici ton traitement
Next lngCount
End With
End Sub

en remplaçant (msoFileDialogOpen) par (msoFileDialogFolderPicker)

...on obtient une autre boite de dialogue qui permet de choisir un répertoire.
Ensuite il faut faire une boucle avec Dir pour ouvrir tous les .xls
Voir l'aide de Dir pour le traitement de cette boucle.

A+

vg00
 Posté le 28/01/2010 à 15:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Bonjour,

Mon code pour le moment c'est ça si quelqu'un veut l'amélioré

Option Explicit

Sub BoucleSurFichiers()
Dim Chemin As String
Dim Fichier As String
Dim premlign As Integer 'peut être "Long" si + de 32767 lignes à reporter

' Définit la première ligne innocupée
premlign = Range("a65536").End(xlUp).Row + 1

'Définit le répertoire contenant les fichiers
Chemin = "V:\COTATIONS\"

'Boucle sur tous les fichiers xls du répertoire.
Fichier = Dir(Chemin & "*.xls")

Do While Len(Fichier) > 0
If Fichier <> "Extraction cotations.xls" Then
Range("a" & premlign) = Fichier
Range("b" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R11C12")
Range("c" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R12C13")
Range("d" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R13C13")
Range("e" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R14C12")
Range("f" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C14")
Range("g" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C11")


premlign = premlign + 1
End If
Fichier = Dir()
Loop

End Sub

en fait je voudrais

améliorer ces deux ligne

Range("f" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C14")
Range("g" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C11")

Range("f" .... si R16C14<>"" alors R16C14 sinon R16C1 sans les 10 premiers caractères

Merci d'avance

galopin01
 Posté le 28/01/2010 à 15:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Non testé bien sur...

...
Range("e" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R14C12")

Var = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C14")
VarAlt = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C1")
Range("f" & premlign) = IIf(Var <> "", Var, Right(Len(VarAlt) - 16))

Range("g" & premlign) = ExecuteExcel4Macro("'" & Chemin & "[" & Fichier & "]Feuil1'!R16C11")
...

A+

vg00
 Posté le 28/01/2010 à 16:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

manque pas un Dim Var et un Dim VarAlt ?

A l'aide

galopin01
 Posté le 28/01/2010 à 17:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

C'est pas interdit surtout si tu as mis Option Explicit

Var peut être n'importe quoi. En revanche VarAlt doit être un String.

A+

vg00
 Posté le 28/01/2010 à 21:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Bonsoir,

Merci de ka réponse rapide

Donc j'en déduit que j'ajoute

Dim VarAlt as String

Dim Var as ??? je ne sais pas

j'essaye demain avec ta réponse si possible car je ne sais pas quoi mettre à la place des ???

Merci d'avance

Bérylion
 Posté le 28/01/2010 à 22:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut

essaie avec variant pour voir...

{#}

vg00
 Posté le 28/01/2010 à 22:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Tu veux dire que j'aurai des problème en mettant vatiant et que je ne vais jamais m'en sortir aie aie aie

je vais pleurer alors

Publicité
Bérylion
 Posté le 29/01/2010 à 00:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

c'est le Option Explicit qui pose probleme (ou pas !!)

sans ça, tes variables non déclarées seraient de type variant par défaut...

mais tu peux aussi essayer en virant Option Explicit

on fait comme on aime, a dit le shadok (salut à toi - ça faisait longtemps)


galopin01
 Posté le 29/01/2010 à 01:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

si c'est l'adresse email ça a des chances d'être un string...

vg00
 Posté le 29/01/2010 à 08:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Sauf quje m'y connait tellement pas que je ne maîtrise pas à quoi sert le option explicit

Si je peut être éclairé je me coucherait moins bête ce soir

vg00
 Posté le 29/01/2010 à 08:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Bonjour,

j'ai un peu tout essayer et j'ai toujours une erreur sur cette ligne

à priori au niveau du Right (Erreur de compilation / Argument non facultatif)

Range("f" & premlign) = IIf(Var <> "", Var, Right(Len(VarAlt) - 16))

Au secours

galopin01
 Posté le 29/01/2010 à 11:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Sorry,

Range("f" & premlign) = IIf(Var <> "", Var, Right(VarAlt,Len(VarAlt) - 16))

A+

galopin01
 Posté le 29/01/2010 à 11:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Option Explicit oblige à déclarer toutes les variables...

YAPA de touche F1 sur ton PC ?

Parce que -pour tous les mots de VBA- si tu positionnes le curseur à l'intérieur du mot (ou si tu sélectionnes le mot) la touche F1 te renvoie une aide en général fort explicite, avec exemples, liens hypertextes et tout le tremblement... C'est le meilleur moyen de progresser avec VBA !

A+



Modifié par galopin01 le 29/01/2010 11:40
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
79,99 €Imprimante Laser HP LaserJet Pro M15w (monochrome, USB, WiFi) à 79,99 €
Valable jusqu'au 26 Septembre

Boulanger propose actuellement l'imprimante Laser monochrome HP LaserJet Pro M15w à 79,99 € alors qu'on la trouve ailleurs à partir de 99 €. Cette imprimante peut être utilisée sans fil via le WiFi ou bien directement connectée à votre ordinateur via son port USB. Elle est fournie avec un toner de démarrage (500 pages). Comptez 56,99 € pour le toner de remplacement HP officiel (1000 pages) ou 32,89 € pour les 2 toners de remplacement compatibles chez Amazon (1000 pages chacun)


> Voir l'offre
104,99 €SSD SanDisk Ultra 3D 1 To à 104,99 €
Valable jusqu'au 26 Septembre

Amazon fait une belle promotion sur le SSD SanDisk Ultra 3D d'une capacité de 1 To qui passe à 104,99 € livré gratuitement. On le trouve ailleurs autour de 130 €. Une bonne affaire pour ce SSD performant qui offre des débits de 560 Mo/s en lecture et 530 Mo/s en écriture. Cette version est garantie 3 ans.


> Voir l'offre
8,99 €Chargeur USB RavPower 3 ports à 8,99 € avec le code G24HDML8
Valable jusqu'au 25 Septembre

Amazon fait une offre éclair sur le chargeur USB RavPower 3 ports USB qui passe à 8,99 € au lieu de 15 € grâce au code promo G24HDML8. Ce chargeur vous permettra une recharge rapide de tous vos appareils à travers ses 3 ports (30W, 6A max). 


> Voir l'offre

Sujets relatifs
macro pour comparer 2 listes
Creation d' une boucle macro dans fichier EXCEL pour impression
Macro pour word 2013
Macro pour raccourci impression
Macro pour ouverture d'un fichier Excel
Macro pour créer un Gencode sur Excel - EAN 18
macro pour trier un tableau et effacer les lignes sans saisie
Variable exterieure pour un macro
Fence pour plusieurs bureaux ?
Passer plusieurs variables dans une autre macro excel VBA
Plus de sujets relatifs à MACRO pour importation depuis plusieurs classeurs
 > Tous les forums > Forum Bureautique