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 :

Remplissage de tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut Remplissage de tableau
    Bonjour,

    Je suis en train de programmer une petite macro qui doit exporter un tableau d'une feuille sous une autre forme sur une autre feuille (Je pense que mes commentaires sont clairs, ne pas hésiter à me demander des précisions).

    Mes variables sont définies dans une userform :
    TextBox2 : Chaine donnée par l'utilisateur des colonnes à exporter, exemple : "A-D-F-AE"
    Liste_2 : la chaine que je transforme en liste [A,D,F,AE]
    TextBox1 : nombre de lignes à exporter

    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
     
    Private Sub CommandButton1_Click()
     
        ' Transformation du contenu de la chaine text2 en liste de colonne
        liste_2 = Split(TextBox2, "-")
        Longueur_liste_2 = UBound(liste_2) - LBound(liste_2) + 1
        MsgBox Longueur_liste_2
     
        'On crée une nouvelle feuille
        Sheets.Add after:=Worksheets(Worksheets.Count)
        nom_feuille = "Export"
        ActiveSheet.Name = nom_feuille
     
        'On effectue l export
        a = 1
        For j = 2 To TextBox1
            For Each i In liste_2
                Sheets(nom_feuille).Cells(a, 1).Value = Sheets(ComboBox1).Cells(j, 1).Value
                Sheets(nom_feuille).Cells(a, 2).Value = Sheets(ComboBox1).Cells(1, i).Value
                Sheets(nom_feuille).Cells(a, 3).Value = Sheets(ComboBox1).Cells(j, i).Value
                a = a + 1
            Next
        Next
    End Sub
    Mais tout cela ne marche pas (visiblement, c'est les lignes "Sheets(nom_feuille).Cells(a, 2).Value = Sheets(ComboBox1).Cells(1, i).Value" qui posent pb) et je commence à saturer (débutant, j'ai déjà beaucoup cherché...).
    J'espère que quelqu'un aura le courage de jeter un œil.
    Merci d'avance,

    Fred

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    Quel est le message d'erreur que tu obtiens?

    essaie comme ça


    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
    Private Sub CommandButton1_Click()
     
        ' Transformation du contenu de la chaine text2 en liste de colonne
        liste_2 = Split(TextBox2, "-")
        Longueur_liste_2 = UBound(liste_2) - LBound(liste_2) + 1
        MsgBox Longueur_liste_2
     
        'On crée une nouvelle feuille
        Sheets.Add after:=Worksheets(Worksheets.Count)
        nom_feuille = "Export"
        ActiveSheet.Name = nom_feuille
     
        'On effectue l export
        a = 1
        For j = 2 To TextBox1.text
            For Each i In liste_2
                Sheets(nom_feuille).Cells(a, 1).Value = Sheets(ComboBox1.text).Cells(j, 1).Value
                Sheets(nom_feuille).Cells(a, 2).Value = Sheets(ComboBox1.text).Cells(1, Clng(i)).Value
                Sheets(nom_feuille).Cells(a, 3).Value = Sheets(ComboBox1.text).Cells(j, Clng(i)).Value
                a = a + 1
            Next i
        Next j
    End Sub
    ton problème peut venir des conversions implicites. Vba s'en sort jusqu'à un certain point avec ces bêtes là.
    Exemple: Textbox1 est un objet donc quand tu écris

    VBA doit évaluer textbox1. Dans cette expression il attend une valeur pout textbox et non un objet, il va donc appeler la propriété par défaut de l'objet tetbox, c'est à dire la propriété text qui renvoie une donnée de type string. Il convertit implicitement cette donnée en un long pour la boucle.

    Parfois cette opértion de conversion implicite ne fonctionne pas ou la propriété par défaut de l'objet n'est pas celle que tu crois. D'où des erreurs.


    Une autre erreur possible est la mauvaise saisie du nom des feuilles dans la combobox.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    Salut Benjîle et d'abord Merci,

    Ton message est très clair et je comprends mieux d'où venait l'un des soucis. Pour autant, ça ne marche pas encore :
    J'obtiens le message d'erreur : '424 : Objet requis' et la ligne concernée est la première de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(nom_feuille).Cells(a, 1).Value = Sheets(ComboBox1.text).Cells(j, 1).Value
    Vois-tu d'où ça peut venir?
    Merci encore,
    Fred

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut Ca marche!!!
    Hello, j'ai finalement réussi, voici le code qui marche chez moi :

    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
    Private Sub CommandButton1_Click()
     
        ' Transformation du contenu de la chaine text2 en liste de colonne
        liste_2 = Split(TextBox2, "-")
        Longueur_liste_2 = UBound(liste_2) - LBound(liste_2) + 1
        'MsgBox Longueur_liste_2
     
        'On crée une nouvelle feuille
        Sheets.Add after:=Worksheets(Worksheets.Count)
        nom_feuille = "Export"
        ActiveSheet.Name = nom_feuille
        'MsgBox ComboBox1
     
        'On effectue l export
        Sheets("Export").Cells(1, 1).Value = "T(s)"
        Sheets("Export").Cells(1, 2).Value = "X(mm)"
        Sheets("Export").Cells(1, 3).Value = "Fleche(mm)"
        a = 2
        For j = 4 To TextBox1.Text
            For Each i In liste_2
                Sheets("Export").Cells(a, 1).Value = Sheets(ComboBox1.Text).Cells(j, 1).Value
                Sheets("Export").Cells(a, 2).Value = Sheets(ComboBox1.Text).Cells(1, i).Value
                Sheets("Export").Cells(a, 3).Value = Sheets(ComboBox1.Text).Cells(j, i).Value
                a = a + 1
            Next
        Next
    End Sub
    Par contre, dans les cases vides, je voudrai qu'il me mette des "0", est-ce possible (ou plutot, comment faire) ?
    Merci encore Benjîle pour l'aide.
    Bonne journée,

    Fred

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    essaie comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For j = 4 To TextBox1.Text
            For Each i In liste_2
                With Sheets(ComboBox1.Text)
                      Sheets("Export").Cells(a, 1).Value = Iif(Isempty(.Cells(j, 1).Value),0,.Cells(j, 1).Value)
                      Sheets("Export").Cells(a, 2).Value = Iif(Isempty(.Cells(1, i).Value),0,.Cells(1, i).Value)
                      Sheets("Export").Cells(a, 3).Value = Iif(Isempty(.Cells(j, i).Value),0,.Cells(j, i).Value)
                a = a + 1
                end with
            Next
        Next

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    Hello,

    Je tente ça cet AM. Merci bcp Benjîle.
    Si ça fonctionne, je mettrai résolu.
    Bonne journée,

    Fred

Discussions similaires

  1. Probleme de remplissage de tableau (ecrasement de donnees)
    Par roulia_rousset dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2008, 14h44
  2. Réponses: 3
    Dernier message: 13/03/2008, 09h46
  3. remplissage de tableau
    Par goeps dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 05/05/2007, 10h56
  4. [Débutant] Problème de création et de remplissage de tableau
    Par pinggu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 24/05/2006, 15h50
  5. [JComboBox] Remplissage avec tableau de String
    Par linkit dans le forum Composants
    Réponses: 2
    Dernier message: 26/05/2005, 21h39

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