• Aucun résultat trouvé

Ouvre un classeur dont le nom est passé comme premier argument. Le nom doit être un chemin long ou un chemin court s'il s'agit d'un classeur situé dans le répertoire courant. La méthode utilise de nombreux paramètres facultatifs comme la mise à jour des liens, le mot de passe ou le format que nous ne verrons pas ici. Là encore, une référence au classeur ouvert est renvoyé par la méthode.

Dim ClasseurSource As Workbook, ClasseurCible As Workbook

'ouvre un classeur avec un chemin absolu

Set ClasseurSource = Application.Workbooks.Open("d:\user\E221.xls")

'ouvre un classeur dans le répertoire en cours

Set ClasseurCible = Application.Workbooks.Open("d:\user\Recap.xls")

Méthode OpenText

Permet d'ouvrir un fichier texte sous forme de classeur Excel, les données étant éventuellement redistribuées en fonction des arguments passés. De la forme :

Sub OpenText(Filename As String, [Origin As XlPlatform], [StartRow As Long], [DataType As XlTextParsingType], [TextQualifier As XlTextQualifier = xlTextQualifierDoubleQuote], [ConsecutiveDelimiter As Boolean], [Tab As Boolean], [Semicolon As Boolean], [Comma As Boolean], [Space As Boolean], [Other As Boolean], [OtherChar As Char], [FieldInfo As xlColumnDataType], [TextVisualLayout], [DecimalSeparator], [ThousandsSeparator], [TrailingMinusNumbers], [Local])

Pour bien appréhender le fonctionnement de cette procédure vous devez comprendre le fonctionnement de la redistribution dans Excel.

Par défaut, Excel considère comme saut de ligne les caractères retour chariot et ou saut de ligne. S'il n'en trouve pas, les données seront redistribuées sur une ligne. Vous ne pouvez pas indiquer d'autres caractères de saut de ligne directement à Excel, autrement dit, vous devrez traiter par code l'ouverture d'un fichier texte utilisant un séparateur différent.

Pour la répartition des données dans les colonnes, Excel comprend deux modes, la redistribution en largeur fixe et la redistribution délimitée. La redistribution en largeur fixe consiste à fixer une séparation par lot de n caractères sans tenir compte de la position d'un séparateur dans la ligne. Dans la redistribution délimitée, on définit un ou plusieurs séparateurs qui définissent le découpage en colonnes.

Évidemment, vous lèverez une erreur si le fichier contient plus de 65536 lignes ou si la division en colonnes implique plus de 256 colonnes.

C'est la définition de ce fonctionnement que gèrent les arguments de la méthode OpenText. L'argument Filename est le seul argument obligatoire. Il désigne le fichier à ouvrir. Si aucun autre argument n'est passé, le fichier sera redistribué en lignes si un séparateur correspondant existe et en colonnes selon le caractère tabulation. Autrement dit, si le fichier texte ne contient ni caractère retour chariot ni caractère tabulation, Excel essayera de mettre la totalité du contenu dans la cellule A1. Si le contenu est trop grand, il sera automatiquement écrêté.

L'argument StartRow définit le numéro de ligne où devra commencer la redistribution dans le cas ou vous avez une entête que vous ne souhaitez pas redistribuer. S'il est omis, la redistribution commencera à la ligne 1.

L'argument DataType précise le mode de redistribution souhaitée, xlDelimited pour une redistribution délimitée, xlFixedWidth sinon.

L'argument TextQualifier définit le qualificateur de texte, généralement le caractère guillemet double (").

L'argument ConsecutiveDelimiter va définir le comportement de redistribution lorsqu'il existe plusieurs délimiteurs consécutifs. Si l'argument est vrai, les délimiteurs consécutifs seront considérés comme un seul, sinon, il sera laissé une cellule vide pour chaque délimiteur au delà du premier.

La liste des arguments suivants va définir les délimiteurs pour la redistribution en colonne. Les délimiteurs prédéfinis possible, sont dans l'ordre, Tabulation, point virgule, virgule, espace.

Vous pouvez définir un autre séparateur en mettant l'argument Other à vrai et en précisant le caractère dans l'argument OtherChar. Si celui-ci contient plus d'un caractère, seul le premier sera pris en compte.

L'argument FieldInfo est le plus complexe à manipuler. Il attend un tableau de tableaux de deux éléments. Les deux éléments se décomposent comme :

1) Le numéro d'ordre de la colonne en mode délimité ou la position du premier caractère de la colonne dans la ligne en mode largeur fixe

2) Le numéro de format de la colonne. Celle-ci est soit au format général (xlGeneralFormat) qui laisse Excel interpréter le type, soit au format texte (xlTextFormat), soit un format de date (xlMDYFormat, xlDMYFormat, xlYMDFormat, xlMYDFormat, xlDYMFormat, xlYDMFormat), soit un marqueur de non redistribution (xlSkipColumn).

En mode délimité, vous n'êtes pas obligé de préciser toutes les colonnes puisque par défaut les colonnes non précisées seront traitées sur la base du format général. Les éléments du tableau n'ont pas besoin d'être dans le même ordre que les colonnes.

E ents.

Les autres a

Le code suiv sera redistribuée

comm

Une première colonne de huit caractères de format date Une deuxième colonne de douze caractères au format texte Une troisième colonne de cinq caractères au format texte Une quatrième colonne de cinq caractères au format standard Une cinquième colonne de quatre caractères au format standard Une sixième colonne de trente six caractères au format texte Tous les caractères au delà du soixante dixième seront ignorés

Workbooks.OpenText Filename:="D:\User\Tutos\Excel\demo1.txt", n mode largeur fixe, vous ne pouvez pas omettre d'élém

rguments ne présentent pas de difficultés particulières.

ant va ouvrir un fichier texte en mode largeur fixe, ou chaque ligne e suit :

Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, xlDMYFormat), _ Array(8, xlTextFormat), _ Array(20, xlTextFormat), _ Array(25, xlGeneralFormat), _ Array(30, xlGeneralFormat), _ Array(34, xlTextFormat), _

Array(70, xlSkipColumn)), TrailingMinusNumbers:=True

Le code suivant ouvrira un fichier texte en mode délimité ou les délimiteurs seront soit le point virgule, soit le point d'interrogation et où les délimiteurs successifs seront ignorés.

Les deux premières colonnes seront de type date et la quatorzième colonne sera ignorée. La première ligne ne sera pas redistribuée.

Workbooks.OpenText Filename:="D:\User\Tutos\Excel\demo1.txt", Origin:=xlMSDOS, StartRow:=2, DataType:=xlDelimited,

TextQualifier:=xlDoubleQuote, _

ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=True,

Comma:=False, Space:=False, Other:=True, OtherChar:="?", _

FieldInfo:=Array(Array(1, xlDMYFormat), _ Array(2, xlDMYFormat), _ Array(14, xlSkipColumn))