Excel/VBA : Problème avec la fonction "remplacer" et d'importation de fichier
Dernière réponse : dans Programmation
Bonjour,
1) Comme indiqué dans le titre j'ai un problème avec la fonction "remplacer" d'Excel. Je voudrais remplacer dans les nombres, les points par des virgules. Le souci est que, quand le nombre a plus de 6 chiffres, au lieu de remplacer le point par une virgule, il met un espace.
En gros Excel fait ça :
486.48 > 486,48 (Le nombre contient moins de 6 chiffres, c'est OK)
486.489 > 486 489 (6 chiffres : il considère que le point est un séparateur de millier)
La question est donc, comment faire pour qu'il remplace juste les points par des virgules au-delà de 6 chiffres ?
2) Le second problème qui me turlupine est que j'aimerais importer un fichier (.DAT) dans la feuille Excel qui est ouverte. Etant donné que l'on doit pouvoir choisir le fichier .DAT que l'on souhaite importer, la fonction "importer des données" ne me convient pas. J'ai essayé également de le faire par le biais "d'ouvrir", mais il me place le fichier dans une autre classeur.
Par exemple, je souhaiterais avoir un commandButton qui ouvre la fenêtre "ouvrir", on choisit le document et qu'Excel place le fichier choisit dans la feuille, ensuite d'autres feuilles dans ce classeur récupèrent les données pour effectuer des calculs. Est ce que c'est réalisable ?
J'espère que j'ai été clair.
Philou250
1) Comme indiqué dans le titre j'ai un problème avec la fonction "remplacer" d'Excel. Je voudrais remplacer dans les nombres, les points par des virgules. Le souci est que, quand le nombre a plus de 6 chiffres, au lieu de remplacer le point par une virgule, il met un espace.
En gros Excel fait ça :
486.48 > 486,48 (Le nombre contient moins de 6 chiffres, c'est OK)
486.489 > 486 489 (6 chiffres : il considère que le point est un séparateur de millier)
La question est donc, comment faire pour qu'il remplace juste les points par des virgules au-delà de 6 chiffres ?
2) Le second problème qui me turlupine est que j'aimerais importer un fichier (.DAT) dans la feuille Excel qui est ouverte. Etant donné que l'on doit pouvoir choisir le fichier .DAT que l'on souhaite importer, la fonction "importer des données" ne me convient pas. J'ai essayé également de le faire par le biais "d'ouvrir", mais il me place le fichier dans une autre classeur.
Par exemple, je souhaiterais avoir un commandButton qui ouvre la fenêtre "ouvrir", on choisit le document et qu'Excel place le fichier choisit dans la feuille, ensuite d'autres feuilles dans ce classeur récupèrent les données pour effectuer des calculs. Est ce que c'est réalisable ?
J'espère que j'ai été clair.
Philou250
Autres pages sur : excel vba probleme fonction remplacer importation fichier
Lassé par la pub ? Créez un compte
Salut,
Primo, pour tes petits problèmes d'Excel, tu vas aller lire la doc, ici on traite de choses sérieuses : de programmation
(Les gens du Monde de Windows t'aideront à mettre en forme tes cellules.)
Secondo, ahhhh, enfin un peu de programmation
Pour accéder aux boîtes de dialogue d'Excel, c'est facile : utilise Application.Dialogs().
Evidemment, il faut préciser la boîte (il en existe au moins 250). Essaie avec xlDialogOpen par exemple.
Autre possibilité, utiliser Application.GetOpenFilename, ça peut être plus simple.
Primo, pour tes petits problèmes d'Excel, tu vas aller lire la doc, ici on traite de choses sérieuses : de programmation
(Les gens du Monde de Windows t'aideront à mettre en forme tes cellules.)
Secondo, ahhhh, enfin un peu de programmation
Pour accéder aux boîtes de dialogue d'Excel, c'est facile : utilise Application.Dialogs().
Evidemment, il faut préciser la boîte (il en existe au moins 250). Essaie avec xlDialogOpen par exemple.
Autre possibilité, utiliser Application.GetOpenFilename, ça peut être plus simple.
zeb a édité ce message
Donc si j'ai bien compris je dois taper ça :
Ce code m'ouvre bien un fichier, mais Excel me le place dans un autre classeur au lieu de me le mettre dans la feuille qui est censé recevoir le fichier.
Du coup est-il possible d'ouvrir un fichier et de le mettre dans une feuille spécifique dans un classeur ?
Private Sub CommandButton4_Click()
openfile = Application.Dialogs(xlDialogOpen).Show("*.dat")
End Sub
Ce code m'ouvre bien un fichier, mais Excel me le place dans un autre classeur au lieu de me le mettre dans la feuille qui est censé recevoir le fichier.
Du coup est-il possible d'ouvrir un fichier et de le mettre dans une feuille spécifique dans un classeur ?
Philou250 a édité ce message
Je n'y avais pas pensé ^^
Donc j'ai fais l'enregistreur de macro qui m'a donné ça :
1) Par contre, quand je lance la macro, ça bug. Apparamment ça serait à cause du Cells.select, pourquoi ?
2) Sinon y aurait t'il un moyen de remplacer le chemin "O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT" par un chemin nom déterminé pour pouvoir choisir le fichier que l'on souhaite prendre ?
Donc j'ai fais l'enregistreur de macro qui m'a donné ça :
Private Sub CommandButton4_Click()
Workbooks.OpenText Filename:= _ "O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT", Origin:=437 _
, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _ Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1)), _ DecimalSeparator:=".", ThousandsSeparator:=",", TrailingMinusNumbers:= _
True
Worksheets("070906-01_").Activate
Cells.Select
Selection.Copy
Windows("Rapport Multipass 2004 MàJ 2011").Activate
Range("A1").Select
ActiveSheet.Paste
Windows("070906-01").Activate
ActiveWindow.Close
End Sub
1) Par contre, quand je lance la macro, ça bug. Apparamment ça serait à cause du Cells.select, pourquoi ?
2) Sinon y aurait t'il un moyen de remplacer le chemin "O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT" par un chemin nom déterminé pour pouvoir choisir le fichier que l'on souhaite prendre ?
Philou250 a édité ce message
lol
Bon, on va commencer par la fin. Concernant le point 2. relis mon premier message, jusqu'à la fin !!!!!
Ensuite, il est où ton bouton ButtonCommand4 ?
Réponds-moi qu'il est dans une feuille du classeur Rapport Multipass 2004 MàJ 2011...
..
Bon, alors l'enregistreur de macro est gentil, mais il programme plus salement que toi - sauf que toi, tu as une excuse, tu es novice.
Alors on va le corriger. Pas le novice, n'aies crainte, le code de l'enregistreur.
Tout d'abord, on ne va plus JAMAIS considérer le moindre objet actif ou sélectionner. On va explicitement les nommer. Tu vas voir, ça va tout changer.
Ensuite, on ne va rien sélectionner sans en avoir besoin.
Enfin, on va respecter les données de l'utilisateur. Ce qui nous interdit de copier quoi que ce soit dans le presse-papier. (Imagine que tu aies fais une macro en Excel et une autre en Word pour tes utilisateurs. Si les deux fonctionnent en même temps et se servent du presse-papier comme variable temp'. T'imagine le bordel ???
)
Regarde :
Bon, c'est pas mal, sauf que les ingénieurs de Microsoft n'ont pas fini le boulot. Le modèle objet du VBA/Excel est inachevé. Ainsi, la méthode OpenText() ne renvoie pas le classeur ouvert. Pauv's types.
Donc la ligne 9 est boguée. Donc, on va ruser. Quand on ouvre un fichier dans un nouveau classeur Excel, il est le dernier des classeurs ouverts. Ainsi :
Bon, on va commencer par la fin. Concernant le point 2. relis mon premier message, jusqu'à la fin !!!!!
Ensuite, il est où ton bouton ButtonCommand4 ?
Réponds-moi qu'il est dans une feuille du classeur Rapport Multipass 2004 MàJ 2011...
..
Bon, alors l'enregistreur de macro est gentil, mais il programme plus salement que toi - sauf que toi, tu as une excuse, tu es novice.
Alors on va le corriger. Pas le novice, n'aies crainte, le code de l'enregistreur.
Tout d'abord, on ne va plus JAMAIS considérer le moindre objet actif ou sélectionner. On va explicitement les nommer. Tu vas voir, ça va tout changer.
Ensuite, on ne va rien sélectionner sans en avoir besoin.
Enfin, on va respecter les données de l'utilisateur. Ce qui nous interdit de copier quoi que ce soit dans le presse-papier. (Imagine que tu aies fais une macro en Excel et une autre en Word pour tes utilisateurs. Si les deux fonctionnent en même temps et se servent du presse-papier comme variable temp'. T'imagine le bordel ???
)Regarde :
'// Pas bon '// Tu sélectionnes toutes les cellules (de quelle feuille ?) Cells.Select '// Tu copies la sélection dans le presse-papier Selection.Copy '// Tu choisis une autre fenêtre (!) que tu actives Windows("Rapport Multipass 2004 MàJ 2011").Activate '// Tu choisis une cellule de la feuille active (et si entre temps elle a changé ?) Range("A1").Select '// Tu colles dans la feuille active ActiveSheet.Paste
'// BON (ou presque) ' // Soit les feuilles de départ et d'arrivée. Dim wb_Data As Workbook Dim ws_Data As Worksheet Dim ws_Rapport As Worksheet Set wb_Data = Workbooks.OpenText(Filename:="O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT", .....) Set ws_Data = wb_Data.Worksheets(1) ' // Facile, il ne devrait y en avoir qu'une. Set ws_Rapport = Me '// ça, ça vaut si le bouton est dans la feuille vers lquelle tu veux copier. ws_Data.Copy Destination:=ws_Rapport.Range("A1")
Bon, c'est pas mal, sauf que les ingénieurs de Microsoft n'ont pas fini le boulot. Le modèle objet du VBA/Excel est inachevé. Ainsi, la méthode OpenText() ne renvoie pas le classeur ouvert. Pauv's types.
Donc la ligne 9 est boguée. Donc, on va ruser. Quand on ouvre un fichier dans un nouveau classeur Excel, il est le dernier des classeurs ouverts. Ainsi :
Workbooks.OpenText Filename:="O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT", ..... Set wb_Data = Workbooks(Workbooks.Count)
zeb a édité ce message
Mon ButtonCommand4 est bien dans la feuille qui est sencée recevoir le fichier.
Donc j'ai écrit ça : (Si j'ai bien compris)
Mais quand je l'éxecute, Excel buterais sur le "Filename" et le "Destination" (Ils sont affiché en jaune après avoir cliqué sur debug).
(Peut être que ça ne marche pas car j'ai Microsoft Office 2007 et peut être que le VBA est différent entre les versions)
Du coup en spammant le bouton F1, j'ai essayé de comprendre quelques trucs et en essayant de remplacer le "Filename" et le "Destination" j'ai écrit ça :
Evidemment ça ne marche pas ^^, il m'ouvre bien le fichier que je veux mais il ne me le place pas dans la bonne feuille, cependant il me copie le code VBA dans cette feuille ! Je suppose que c'est à cause du "PasteSpecial" mais je ne sais pas comment le remplacer.
Donc j'ai écrit ça : (Si j'ai bien compris)
Private Sub CommandButton4_Click()
Dim wb_Data As Workbook
Dim ws_Data As Worksheet
Dim ws_Rapport As Worksheet
set wb_Data =Workbooks.OpenText Filename:="O:\bigblue\01- Suivi Banc mpass\Data\data 2 mgL\070906-01.DAT"
Set ws_Data = wb_Data.Worksheets(1)
Set ws_Rapport = Me
ws_Data.Copy Destination:=ws_Rapport.Range("A1")
End Sub
Mais quand je l'éxecute, Excel buterais sur le "Filename" et le "Destination" (Ils sont affiché en jaune après avoir cliqué sur debug).
(Peut être que ça ne marche pas car j'ai Microsoft Office 2007 et peut être que le VBA est différent entre les versions)
Du coup en spammant le bouton F1, j'ai essayé de comprendre quelques trucs et en essayant de remplacer le "Filename" et le "Destination" j'ai écrit ça :
Dim wb_Data As Workbook
Dim ws_Data As Worksheet
Dim ws_Rapport As Worksheet
openfile = Application.Dialogs(xlDialogOpen).Show("*.dat")
Set wb_Data = Workbooks(Workbooks.Count)
Set ws_Data = wb_Data.Worksheets(1)
Set ws_Rapport = Me
ws_Data.Copy
ws_Rapport.range("A1").pastespecial
End Sub
Evidemment ça ne marche pas ^^, il m'ouvre bien le fichier que je veux mais il ne me le place pas dans la bonne feuille, cependant il me copie le code VBA dans cette feuille ! Je suppose que c'est à cause du "PasteSpecial" mais je ne sais pas comment le remplacer.
Philou250 a édité ce message
Du bon et du mauvais.
Tu as lu mon message précédent jusqu'au bout ?????
Remplace la ligne 9 de mon code (c'est à la ligne 5 du tien) par les deux lignes ensuite proposées.
Quand ws_Data contiendra quelque chose, on pourra utilise Copy Destination:=
ET ARRETE DE CHERCHER A UTILISER LE PRESSE-PAPIER !!!!!!
(ça se voit que je m'énerve là
)
Tu as lu mon message précédent jusqu'au bout ?????
Remplace la ligne 9 de mon code (c'est à la ligne 5 du tien) par les deux lignes ensuite proposées.
Quand ws_Data contiendra quelque chose, on pourra utilise Copy Destination:=
ET ARRETE DE CHERCHER A UTILISER LE PRESSE-PAPIER !!!!!!
(ça se voit que je m'énerve là
)
([Edit] Avec modifs demandées dans le message suivant)
Finalement je viens de réussir sans le Copy&Paste, donc voilà le code :
Normalement tu devrais moins râler
Finalement je viens de réussir sans le Copy&Paste, donc voilà le code :
Dim wb_Data As Workbook
Dim ws_Data As Worksheet
Dim ws_Rapport As Worksheet
openfile = Application.Dialogs(xlDialogOpen).Show("*.dat")
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), DecimalSeparator:=".", TrailingMinusNumbers:=True
Set wb_Data = Workbooks(Workbooks.Count)
Set ws_Data = wb_Data.Worksheets(1)
Set ws_Rapport = Me
ws_Data.Cells.Copy ws_Rapport.Range("A1")
wb_Data.Close savechanges:=False 'Ferme le workbook qui contient les données brutes
ws_Data.Activate 'Affiche le workbook qui traite les données
endsub
Normalement tu devrais moins râler
Philou250 a édité ce message
Surtout ne JAMAIS utiliser les Windows. Il s'agit des vues sur un même classeur.
Ainsi, peux-tu voir un même classeur plusieurs fois dans une même session Excel.
Or tu ne cherches pas à fermer la fenêtre active sur tel classeur, mais bel et bien le classeur lui-même.
Alors tu vas remplacer
Et la fenêtre qui traite les données est dans la variable ws_Rapport, alors on ne se fie pas au titre d'une fenêtre, mais à notre variable, s'il faut activer explicitement cette feuille :
Et voilà !
Ainsi, peux-tu voir un même classeur plusieurs fois dans une même session Excel.
Or tu ne cherches pas à fermer la fenêtre active sur tel classeur, mais bel et bien le classeur lui-même.
Alors tu vas remplacer
par
' Pas bon :( ActiveWindow.Close savechanges:=False
' Ok ! wb_Data.Close savechanges:=False
Et la fenêtre qui traite les données est dans la variable ws_Rapport, alors on ne se fie pas au titre d'une fenêtre, mais à notre variable, s'il faut activer explicitement cette feuille :
' Pas bon :( Windows("Rapport Multipass 2004 MàJ 2011.xlsm").Activate ' Ok ! ws_Data.Activate
Et voilà !
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumExcel vba remplacer texte
- ForumExcel vba fonction shell
- ForumExcel vba fonction paramã tre
- ForumExcel vba fichier ouvert
- ForumExcel vba fichier texte
- ForumExcel vba renommer fichier
- ForumExcel vba creer un fichier excel
- ForumRechercher remplacer excel vba
- ForumSauver fichier excel vba
- ForumEmplacement fichier excel vba
- Voir plus