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 07/10/2011, 10h17   #1
Membre régulier
 
Inscription : mai 2006
Messages : 84
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 84
Points : 97
Points : 97
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 :
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 :
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.
Paenitentia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 10h28   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Code :
Selection.End(xlToRight).Column
est une valeur (par exemple 24)
Tu veux en faire quoi?

exemple
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
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/10/2011, 10h50   #3
Membre régulier
 
Inscription : mai 2006
Messages : 84
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 84
Points : 97
Points : 97
Citation:
est une valeur (par exemple 24)
Beuh, je l'ai affectée à une variable et tout fonctionne du coup...

Merci beaucoup !
Paenitentia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 11h03   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Utilise plutôt
Code :
LastBaseColonne = .Cells(DebutBaseLigne, .Columns.Count).End(xlToLeft).Column
XlToLeft et sans Select
En plus essaies d'utiliser
Code :
1
2
3
With ....
....
End With
Comme indiqué dans le code proposé
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h12.


 
 
 
 
Partenaires

Hébergement Web