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

Excel Discussion :

Parcourir ligne & colonne


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Parcourir ligne & colonne
    Bonjour,

    Voilà ma question , question basique pour certains je pense mais après plusieurs recherche je galère à trouver une réponse.

    je m'explique j'ai un tableau :

    Nom : forum.JPG
Affichages : 191
Taille : 29,4 Ko

    Un UserForm avec ce code (Pour info Class_Liste est une classe que j'ai crée)
    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
    ' Oblige la déclaration des variables au préalable
    Option Explicit
     
    '****
    ' Déclaratio objet
    '****
    ' Déclare la variable objet Worksheet
    Dim WsBookTrans As Worksheet
    ' Déclare la variable objet Classe Liste
    Dim Liste_Book As Classe_Liste
     
     
    ' Titre UserForm
    Const Titre_UFbook As String = ".::: Gestion des bookmakers"
    ' Coin gauche début Tableau Bookmaker
    Const Deb_Book As String = "B18"
    '
     
    '****
    ' A l'activation de l'USERFORM
    '****
    Private Sub UserForm_Initialize()
        Set WsBookTrans = Worksheets("Bookmakers & transactions")
        Init_Liste WsBookTrans, Deb_Book, Liste_Book
    End Sub
    et un module fonction (d'où provient l'érreur)
    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
     
    '****
    ' Construis une liste
    '****
     
    Sub Init_Liste(ByVal Ws As Worksheet, ByVal Deb_Liste As String, ByRef Liste As Classe_Liste)
        Dim ind_ligne As Integer
        Dim ind_col As Integer
        'Il faut trouver les indices des dernières lignes et colonnes
        Dim DerniereLigne As Integer
        DerniereLigne = Ws.Range(Deb_Liste).CurrentRegion.End(xlDown).Row
        MsgBox DerniereLigne
        Dim DerniereColonne As Integer
        DerniereColonne = Ws.Range(Deb_Liste).CurrentRegion.End(xlToRight).Column
    End Sub
    L'erreur vient du fait que si j'utilise CurrentRegion si le tableau est vide cela produit une erreur !!!
    Et de plus je voudrai savoir comment se déplacé dans une feuille sachant que le tableau ne commence pas en 1ere colonne ni 1ere ligne

    Merci de votre aide (Message un peu long mais je prefere etre clair)

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il suffit au préalable de tester si B18 est vide non ?

    pour la deuxième question, "naviguer dans une feuille" c'est assez vague, tu peux préciser ton souhait ? Parce que sinon on a un millions de méthodes à te proposer

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Parcourir ligne + colonne
    Merci pour le test j'ai modifié le code
    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
    '****
    
    '****
    ' Construis une liste
    '****
    
    Sub Init_Liste(ByVal Ws As Worksheet, ByVal Deb_Liste As String, ByRef Liste As Classe_Liste)
        Dim ind_lig As Integer
        Dim ind_col As Integer
        Dim DerniereLigne As Integer
        Dim DerniereColonne As Integer
        If (Ws.Range(Deb_Liste) = Null Or Ws.Range(Deb_Liste) = "") Then
            ' Poser les traitements si la cellule est vide
            MsgBox "Liste vide"
        Else
            ' Il faut trouver les indices des dernières lignes et colonnes
            DerniereLigne = Ws.Range(Deb_Liste).CurrentRegion.End(xlDown).Row
            DerniereColonne = Ws.Range(Deb_Liste).CurrentRegion.End(xlToRight).Column
            ' MsgBox DerniereLigne & " " & DerniereColonne
            For ind_lig = Ws.Range(Deb_Liste).Row To DerniereLigne
                For ind_col = Ws.Range(Deb_Liste).Column To DerniereColonne
                    MsgBox Ws.Range(Cells(ind_lig, ind_col)).Value
                Next ind_col
            Next ind_lig
        End If
    End Sub
    La ligne en rouge m'affiche une erreur d'éxécution 1004
    La méthode rage de l'objet worksheet a échoué

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Résolu

    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
     
    '****
    ' Construis une liste
    '****
     
    Sub Init_Liste(ByVal Ws As Worksheet, ByVal Deb_Liste As String, ByRef Liste As Classe_Liste)
        'MsgBox Ws.Name
        Dim ind_lig As Integer
        Dim ind_col As Integer
        Dim DerniereLigne As Integer
        Dim DerniereColonne As Integer
        If (Ws.Range(Deb_Liste) = Null Or Ws.Range(Deb_Liste) = "") Then
            ' Poser les traitements si la cellule est vide
            MsgBox "Liste vide"
        Else
            ' Il faut trouver les indices des dernières lignes et colonnes
            DerniereLigne = Ws.Range(Deb_Liste).CurrentRegion.End(xlDown).Row
            DerniereColonne = Ws.Range(Deb_Liste).CurrentRegion.End(xlToRight).Column
            ' MsgBox DerniereLigne & " " & DerniereColonne
            For ind_lig = Ws.Range(Deb_Liste).Row To DerniereLigne
                For ind_col = Ws.Range(Deb_Liste).Column To DerniereColonne
                    MsgBox Ws.Cells(ind_lig, ind_col).Value
                Next ind_col
            Next ind_lig
        End If
    End Sub
    Si tu pense que ce code peut être amélioré tenez moi au courant

    Je met résolu

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ton paramètre Liste, qui plus est en ByRef, m'amène à penser que tu envisages de l'utiliser pour stocker les élément d'une plage excel
    Cette plage commence sur la feuille ws, sur la cellule dont l'adresse est Deb_Liste.
    Le Currentregion signifie que tu veux aller jusqu'en bas de la plage continument contiguë à Deb_Liste, de même pour les colonnes en allant à droite

    Et du coup, on obtient un tableau de valeurs de cette plage ainsi définie.

    Ce qui, sauf erreur, me fait dire qu'il serait peut être opportun d'utiliser plutôt une fonction ?

    Ici, un exemple à adapter, elle renvoie un Tableau 2D contenant les valeurs, vu que je ne connais pas la Classe que tu utilises.
    Si c'est compatible, t'a juste à changer le Type renvoyé par la fonction

    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
    Function Init_Liste(Cell_Depart As Range) As Variant
    Dim Tabl()
     
     
    With Cell_Depart
        If .Value = "" Or .Offset(1, 0) = "" Or .Offset(0, 1) = "" Then Exit Function
        Tabl = .Cells(1, 1).Resize(.CurrentRegion.End(xlDown).Row - .Row + 1, .CurrentRegion.End(xlToRight).Column - .Column + 1).Value
    End With
     
    Init_Liste = Tabl
    End Function
     
     
    Sub ede()
    Dim Plage
    Plage = Init_Liste(ActiveCell)
    If IsArray(Plage) Then
        For i = LBound(Plage, 1) To UBound(Plage, 1)
            For j = LBound(Plage, 2) To UBound(Plage, 2)
                Debug.Print Plage(i, j)
            Next j
        Next i
    End If
    End Sub

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Je reprend depuis le début car j'ai un peu beaucoup de mal. Je compte crée un fichier excel qui me permet de gérer mes paris sportifs. j'aurais doc plusieurs feuilles avec plusieurs tableau plusieurs userforms etc...
    Nom : Organisation.JPG
Affichages : 157
Taille : 23,2 Ko
    J'ai un module pour remplir les contrôles, un pour les fonctions et pour l'instant un module de classe qui me permet d'instancier chaque tableau. Est-ce une bonne organisation ?
    Voila ma classe Liste pour l'instant je prend exemple sur ce lien http://boisgontierjacques.free.fr/pa...e.htm#ClasseBDhttp://boisgontierjacques.free.fr/pa...e.htm#ClasseBD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Compare Text
    Private table()
    Private nb
     
    Private Sub class_initialize()
      nb = 0
    End Sub
     
    Sub ajout(cle, item)
    End Sub
    Elle n'est pas très avancé pour le moment car en faite le parametre clé sera toujours présent mais le parametre item sera plutot un tableau avec différetnts éléments car il pourra en avoir un ou plusieurs.
    En faite la fonction ajout sera appelé à chaque fois que l'on aura parcouru une ligne dans le tableau d'une feuille.

    J'ai étudier ton code joe.levrai je suis obligé de mettre B17 comme cellule de début pour avoir un tableau mais le problème ce sont les en-têtes de mes tableaux

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 16h57
  2. [SOLVED] parcourir ligne et colonne
    Par vbdisdonc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2013, 16h30
  3. [VBA-E]refedit nb ligne colonnes
    Par attavus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/05/2006, 12h49
  4. [VBA] Masquer les sélecteurs de ligne/colonnes (1,2..,A,B,C)
    Par skual dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2006, 08h52
  5. est il possible d'inverser ligne/colonne ?
    Par kiki26 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 25/01/2005, 15h35

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