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 :

manipulation des tableaux comme objets [Toutes versions]


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut manipulation des tableaux comme objets
    Bonjour,
    Je cherche à ajouter une ligne dans un tableau existant (que je complète en partie automatiquement via un fichier et en partie manuellement).

    Il s'agit de pouvoir ajouter une ligne dans la partie automatisée dans le tableau, me positionner dans la première colonne de la ligne ajoutée et de ranger ensuite ce tableau par ordre alphabétique.

    Pour le moment j'ai une info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Worksheets(1).Range("data_NometPrenom").ListObject.ListRows.Add (1)
    Apparemment ca permet d'ajouter une ligne mais j'ai pour cette ligne l'erreur : "Erreur définie par l'application ou par l'objet"

    Je pensais définir une variable et lui attribuer la position de la première cellule de la ligne ajoutée avec (selon une aide du forum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DerLig = .[A65536].End(xlUp)(2).Row
    Avec juste ce dernier code et le reste permettant de remplir les cellules de la ligne ça marche (je remplis la dernière ligne). L'idée maintenant est de pouvoir rester dans l'objet tableau pour permettre les filtres (tableau dont je n'ai pas d'autre choix de l'utiliser).

    Merci de votre aide!

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 140
    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 140
    Points : 9 975
    Points
    9 975
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    déjà, je te conseille de mettre ton ListObject sous variable, pour pas recopier tout le temps son chemin
    et ça te permet aussi de conserver la saisie intuitive dans ton code

    voici une petite boite à outils, pioche ce qui t'intéresse

    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
    Sub MonBeauTableau()
     
    Dim Tablo As ListObject
    Set Tablo = ActiveSheet.ListObjects("Tableau1")
     
    With Tablo
        ' ajout de ligne en fin de tableau
        .ListRows.Add
     
        ' écrire TOTO sur chaque cellule de la nouvelle ligne
        For j = 1 To .ListColumns.Count
            .Range(.ListRows.Count + 1, j) = "TOTO"
        Next j
     
        'sélectionner la cellule de la première colonne de la dernère ligne
        .Range(.ListRows.Count + 1, 1).Select
     
        ' tri ascendant de la colonne 1
        With .Sort
            .SortFields.Clear
            .SortFields.Add Tablo.ListColumns(1).Range, xlSortOnValues, xlAscending
            .Header = xlYes
            .MatchCase = True
            .Apply
        End With
    End With
     
    End Sub

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour

    ListRows.Add nécessite une table, pas un range à ma connaissance et Range("data_NometPrenom") retourne un range .... donc ça ne devrait pas pouvoir marcher

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    salut,

    J'ai testé ton code et j'obtiens l'erreur d'incompatibilité de type pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Tableau As ListObjects
    Set Tableau = ActiveSheet.ListObjects("Tableau1") 'erreur sur cette ligne
    Je comprends pas

    Merci

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 140
    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 140
    Points : 9 975
    Points
    9 975
    Billets dans le blog
    5
    Par défaut
    C'était un exemple basique

    tu dois adapter à ton ListObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Tablo = Sheets("NomDeTaFeuille").ListObjects("NomDeTonTableau")

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    Re,
    c'est ce que j'ai fait le tableau s'appelle Tableau1 et la feuille est bien la feuille active dans le code.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    Je pense que je le place mal :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Private Sub CommandButton2_Click()
    Application.ScreenUpdating = False
    Dim FichierTampon As Workbook
    Dim Tableau As ListObjects
    Dim DerLig As Long
    Dim NOM As String, Prenom As String
        Set FichierTampon = Workbooks.Open("E:\Planning-travail\Classeur2")
     
        NOM = TextBox1
        Prenom = TextBox5
    'au moment de clique lebouton il se passe :
        With FichierTampon
            Set Tableau = ActiveWorkbook.Sheets(1).ListObjects("Tableau1")
            With .Worksheets(1)
             DerLig = .[A65536].End(xlUp).Offset(1, 1).Row
                .Cells(DerLig, 1) = NOM & " " & Prenom
                .Cells(DerLig, 2) = TextBox6.Value
                .Cells(DerLig, 7) = Label6.Caption
                .Cells(DerLig, 8) = TextBox2.Value
                .Cells(DerLig, 9) = Label8.Caption
                .Cells(DerLig, 10) = TextBox3.Value
     
                If OptionButton1 Then
                    .Cells(DerLig, 5) = "J"
                Else
                    .Cells(DerLig, 5) = "N"
                End If
     
                If OptionButton3 Then
                    .Cells(DerLig, 4) = "IDE"
                Else
                    .Cells(DerLig, 4) = "ASD"
                End If
     
                If Chekbox1 Then
                    .Cells(DerLig, 6) = "dimanche"
                ElseIf CheckBox2 Then
                    .Cells(DerLig, 6) = "férié"
                ElseIf CheckBox1 = True And CheckBox2 = True Then
                    .Cells(DerLig, 6) = "Dimanche et férié"
                Else
                    .Cells(DerLig, 6) = ""
                End If
     
             '.Tableau.Sort Key1:=Range("A1"), order1:=xlAscending
            End With
     
            .Save
            .Close
        End With
     
        Unload Me 'vide et ferme l'USerForm
        ActiveCell.Value = NOM 'la cellule active prend la valeur de NOM
     
    End Sub
    Qu'en penses-tu?

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Tablo As ListObject
    Dim Tableau As ListObjects 'Non: 's' à enlever comme la ligne précédente: vous définissez une collection d'objet et non pas un objet

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 140
    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 140
    Points : 9 975
    Points
    9 975
    Billets dans le blog
    5
    Par défaut
    tu n'utilises pas ton listobject dans ce code, tu l'affectes (enfin du tu essayes) à une variable et ensuite tu fais des choses sans l'utiliser.

    il est dans ton fichier tampon le tableau, dans le première feuille ?

    pourquoi ne pas réutiliser cette variable, puisqu'elle existe ?
    pourquoi tu n'utilises pas ce tableau pour ton remplissage, et te cantonnent à ton code initial qui ajoute une ligne sauvagement en dessous de ton listobject ?

    j'extrapole : tu veux créer une nouvelle ligne à ton listobject, et y mettre la valeur de tes contrôles
    je te propose un code comme ça ... je te laisse testé, je n'ai pas pu le faire

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub CommandButton2_Click()
    Dim FichierTampon As Workbook
    Dim Tablo As ListObject
    Dim TabloValeur()
     
    ' pour stocker tes valeurs conditionnelles
    Dim Val4 As String
    Dim Val5 As String
    Dim Val6 As String
     
    ' on définie les valeurs conditionnelles
    If OptionButton1 Then
        Val5 = "J"
    Else
        Val5 = "N"
    End If
     
    If OptionButton3 Then
        Val4 = "IDE"
    Else
        Val4 = "ASD"
    End If
     
    ' j'ai changé l'ordre de ton test
    ' on doit d'abord tester si les deux sont à True
    ' avant de regarder si un seul est à True
    If Checkbox1 And CheckBox2 Then
        Val6 = "Dimanche et férié"
    ElseIf CheckBox2 Then
        Val6 = "férié"
    ElseIf CheckBox1 Then
        Val6 = "Dimanche"
    Else
        Val6 = ""
    End If
     
     
    ' on rempli dans un tableau virtuel, l'ensemble des valeurs à remplir
    ' les valeurs sont rangées dans l'ordre des colonnes de destination
    ' ATTENTION : tu n'as aucune valeur pour la colonne 3 ==> j'ai donc mis une chaine vide dans le tableau de valeurs
    TabloValeur = Array(TextBox1.Value & " " & textbox5.Value, TextBox6.Value, "", valeur4, valeur5, valeur6, Label6.Caption, TextBox2.Value, Label8.Caption, TextBox3.Value)
     
    Application.ScreenUpdating = False
     
    Set FichierTampon = Workbooks.Open("E:\Planning-travail\Classeur2")
    Set Tablo = FichierTampon.Sheets(1).ListObjects("Tableau1")
     
    With Tablo
        ' ajout de ligne en fin de tableau
        .ListRows.Add
     
        ' écrire les 10 valeurs dans les 10 colonnes en bouclant simplement sur le tableau virtuel
        For j = LBound(TabloValeur) To UBound(TabloValeur)
            .Range(.ListRows.Count + 1, j + 1) = TabloValeur(j)
        Next j
    End With
     
    'fermeture du fichier en l'enregistrant en même temps
    FichierTampon.Close True
    Set FichierTampon = Nothing
    Set Tablo = Nothing
     
    Unload Me
    ActiveCell.Value = TextBox1.Value
    End Sub

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    Re,

    Cette fois c'est une autre erreur qui apparait... : "propriété ou méthode non gérée par cet objet"
    et l'erreur s'arrête sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Tableau = ActiveSheet.ListObject("Tableau1")

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Grem974 Voir le message
    Re,

    Cette fois c'est une autre erreur qui apparait... : "propriété ou méthode non gérée par cet objet"
    et l'erreur s'arrête sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Tableau = ActiveSheet.ListObject("Tableau1")
    et quand le mets le "S" c'est sur :

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    tu n'utilises pas ton listobject dans ce code, tu l'affectes (enfin du tu essayes) à une variable et ensuite tu fais des choses sans l'utiliser.

    il est dans ton fichier tampon le tableau, dans le première feuille ?

    pourquoi ne pas réutiliser cette variable, puisqu'elle existe ?
    pourquoi tu n'utilises pas ce tableau pour ton remplissage, et te cantonnent à ton code initial qui ajoute une ligne sauvagement en dessous de ton listobject ?

    j'extrapole : tu veux créer une nouvelle ligne à ton listobject, et y mettre la valeur de tes contrôles
    je te propose un code comme ça ... je te laisse testé, je n'ai pas pu le faire
    Tu as parfaitement compris mon objectif et je t'en remercie. Je m'obstine dans le code initial pour essayer de modifier petit à petit essayer d'améliorer ce que je peux comme je peux (j'y connais rien en programmation et j'essaie de comprendre je suis loin d'être efficient ) et je suis impressionné par la vitesse à la quelle, vous tous qui répondez, arrivez à produire des codes aussi beaux et efficaces. Vous êtes des professionnels?

    Pour le côté "sauvage" c'est simplement l'absence de formation ... je trouve des tutos, des réponses de forums, parfois des questions et j'essaie (à l'instar d'une polymérase eucaryote) avec des erreurs et je constitue de cette façon mon projet de stage. J'essaie d'adapter ce que j'apprends à ce je veux obtenir. Ce qui fait que j'ai un code plutôt sale et brutal... pour le moment j'ai réussi à limiter mes plantages de système à 2


    Merci en tout cas de ton aide!
    Ce que tu me propose fonctionne parfaitement! Grace à la mobilisation de tous vous me permettez d'acquérir des connaissances et des compétences. Et ca me va droit au coeur

  13. #13
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 140
    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 140
    Points : 9 975
    Points
    9 975
    Billets dans le blog
    5
    Par défaut
    Je suis loin d'être professionnel .... j'ai tout appris sur mon temps libre et sans formation (et j'utilise mon capital connaissance pour m'aider au boulot du coup)

    j'ai parlé de sauvagerie comme d'un constat, et pas un jugement ... si tu voyais la tête de mes codes quand j'ai débuté, c'est toi qui me traiterai de sauvage

    on est pas efficace, on l'es devenu avec le temps, à force de rencontrer des problématiques et d'en définir un schéma cohérent ... qui du coup devient un outil utilisable sur d'autres problématiques.


    ce forum est une chance de partager, mais aussi d'apprendre ... plus je participe et plus j'apprend ... parfois à coup de "essaye, échoue, comprend, rectifie/recommence"

    et surtout en acceptant, comprenant, réutilisant l'ensemble des critiques qu'on peut me faire et qu'on me fera

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

Discussions similaires

  1. Manipulation des tableaux d'objets
    Par mesken dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/02/2014, 10h34
  2. manipulation des tableaux
    Par amine556 dans le forum Informix
    Réponses: 4
    Dernier message: 26/11/2007, 16h20
  3. Manipuler des TDateTime comme des entiers?
    Par toufou25 dans le forum C++Builder
    Réponses: 8
    Dernier message: 22/06/2006, 16h52
  4. Manipuler des listes d'objet ?
    Par xla99 dans le forum Général Python
    Réponses: 4
    Dernier message: 06/06/2006, 16h06
  5. delete[] seulement pour des tableaux d'objets?
    Par Crisanar dans le forum C++
    Réponses: 7
    Dernier message: 22/10/2005, 20h50

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