IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Selection.End Initialisation d'un UserForm [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 140
    Points : 233
    Points
    233
    Par défaut Selection.End Initialisation d'un UserForm
    Bonjour,

    Je crée une macro qui demande à l'utilisateur d'ouvrir un document contenant des données à analyser. Une fois le fichier sélectionné et ouvert, je lance un UserForm permettant de sélectionner différentes options pour récupérer et analyser les données.

    Mon problème est que le fichier que je reçois ne possède pas un format unique, il peut être modifié au niveau de l'agencement des colonnes voir peut-être de leur position. Par conséquent, je demande à l'utilisateur de m'indiquer l'en-tête de la colonne contenant les données correspondantes.

    Pour se faire, mon UserForm est consituté en partie de 4 zones de liste, et les choix présents dans la liste doivent être les noms des colonnes présents dans cette base. J'ai programmé quelque chose permettant de déterminer la cellule sitée en haut à gauche de la base. J'ai donc connaissance de ma ligne d'en-têtes et je souhaiterais savoir jusqu'à quelle colonne il y a des informations.

    J'ai donc tapé la fonction Selection.End(xlToRight).Column.

    Problème je reçois une erreur : "Erreur d'exécution 438 : Propriété ou méthode non gérée par cet objet".

    Cette erreur vient de mon Selection.End puisque si je supprime cette ligne, le reste du code ne génère aucune erreur. J'ai pourtant utilisé plusieurs fois un Selection.End(xlDown).Row pour connaître mon nombre de lignes dans un tableau et je n'ai jamais eu de problèmes. Lorsque je vais dans l'aide VBA et que j'effectue une recherche avec xlDown ou xlToRight, je n'obtiens aucune réponse.

    Voici le code de mon UserForm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
        Dim RechercheColonnes As Integer
        Dim RechercheLignes As Integer
        Dim DebutBaseLigne As Integer
        Dim DebutBaseColonne As Integer
     
        'Indique le chemin du fichier sélectionné
        TextBox_CheminFichierInstallations.Text = CheminFichier
     
        'Récupère les intitulés des colonnes : vu qu'on ne sait pas exactement où les données sont placées, on effectue une recherche
        'sur les 10 premières lignes des 10 premières colonnes et on s'arrête à partir du moment où on trouve deux lignes d'occupées
        'qui se suivent. On récupère alors l'ensemble des en-têtes des colonnes pour les récupérer dans les listes de sélection de
        'colonnes
        For RechercheColonnes = 1 To 10
            For RechercheLignes = 1 To 10
                If Workbooks(NomFichierBaseInstallations).Worksheets(1).Cells(RechercheLignes, RechercheColonnes).Value <> "" Then
                    If Workbooks(NomFichierBaseInstallations).Worksheets(1).Cells(RechercheLignes + 1, RechercheColonnes).Value <> "" Then
                        DebutBaseLigne = RechercheLignes
                        DebutBaseColonne = RechercheColonnes
     
                        Workbooks(NomFichierBaseInstallations).Worksheets(1).Cells(DebutBaseLigne, DebutBaseColonne).Select
                        Selection.End(xlToRight).Column
                    End If
                End If
            Next RechercheLignes
        Next RechercheColonnes
     
    End Sub
    Et celui de mon module si vous en avez besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
     
    'Variables concernant le traitement des fichiers
    Public NomFichierApplication As Variant 'Conserve le nom du fichier de la macro
    Public NomFichierBaseInstallations As Variant 'Conserve le nom du fichier des installations
    Public CheminFichier As String 'Permet l'ouverture des fichiers
    Public Tampon As Variant 'Permet d'éviter une erreur lors de l'ouverture des fichiers
     
    Sub Initialisation()
     
        'Récupère le nom du fichier exécutant la macro
        NomFichierApplication = ActiveWorkbook.Name
     
        'Demande de choisir le fichier contenant les installations
        MsgBox "Veuillez sélectionner le fichier répertoriant les installations."
        CheminFichier = Application.GetOpenFilename("Classeur Microsoft Excel (*.xls), *.xls")
        Tampon = CheminFichier
        If Tampon <> False Then
            Workbooks.Open CheminFichier
            NomFichierBaseInstallations = ActiveWorkbook.Name
        Else
            MsgBox "Erreur : Echec de l'importation du fichier des installations."
            Exit Sub
        End If
     
        'Ouvre la fenêtre de configuration générale
        ConfigurationGenerale.Show
     
    End Sub
    Merci beaucoup pour votre aide.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.End(xlToRight).Column
    est une valeur (par exemple 24)
    Tu veux en faire quoi?

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub UserForm_Initialize()
     
    Dim RechercheColonnes As Integer
    Dim RechercheLignes As Integer
    Dim DebutBaseLigne As Integer
    Dim DebutBaseColonne As Integer
     
    'Indique le chemin du fichier sélectionné
    TextBox_CheminFichierInstallations.Text = CheminFichier
     
    'Récupère les intitulés des colonnes : vu qu'on ne sait pas exactement où les données sont placées, on effectue une recherche
    'sur les 10 premières lignes des 10 premières colonnes et on s'arrête à partir du moment où on trouve deux lignes d'occupées
    'qui se suivent. On récupère alors l'ensemble des en-têtes des colonnes pour les récupérer dans les listes de sélection de
    'colonnes
    With Workbooks(NomFichierBaseInstallations).Worksheets(1)
        For RechercheColonnes = 1 To 10
            For RechercheLignes = 1 To 10
                If .Cells(RechercheLignes, RechercheColonnes).Value <> "" Then
                    If .Cells(RechercheLignes + 1, RechercheColonnes).Value <> "" Then
                        DebutBaseLigne = RechercheLignes
                        DebutBaseColonne = RechercheColonnes
                        LastBaseColonne = .Cells(DebutBaseLigne, .Columns.Count).End(xlToLeft).Column
                    End If
                End If
            Next RechercheLignes
        Next RechercheColonnes
    End With
    End Sub
    LastBaseColonne est la dernièe colonne

  3. #3
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 140
    Points : 233
    Points
    233
    Par défaut
    est une valeur (par exemple 24)
    Beuh, je l'ai affectée à une variable et tout fonctionne du coup...

    Merci beaucoup !

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Utilise plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastBaseColonne = .Cells(DebutBaseLigne, .Columns.Count).End(xlToLeft).Column
    XlToLeft et sans Select
    En plus essaies d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ....
    ....
    End With
    Comme indiqué dans le code proposé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Initialiser Liste Déroulante (UserForm)
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/10/2009, 09h38
  2. Initialisation d'un userform
    Par DarkGriffin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/09/2009, 16h00
  3. initialisation d'une userform
    Par Manu18 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2008, 17h51
  4. Select et initialisation
    Par fourniey dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2007, 22h08
  5. initialisation textbox dans userform
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/08/2007, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo