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 :

Création d'un tableau de données dans une nouvelle page


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut Création d'un tableau de données dans une nouvelle page
    Bonjour à Tous,

    J'aimerais suite à la création de diverses séries de données via le code ci dessous, créer un tableau dans une autre page à partir de la cellule A10 où je pourrais insérer dans chaque colonne les données d'une de mes séries...


    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
    Dim i As Integer
    Dim str() As String
    Dim plan() As Integer
    Dim real() As Integer
    Dim eff() As Long
    Dim rg As Range
    Dim iIndex As Integer ' nombre d'élements selectionnés
     
    'Constitution des séries de données
    '**********************************
     
    'Initialisation: aucun élément n'est selectionné
    iIndex = 0
     
    'Boucle sur les élements de la listBox; Les index des Listbox commencent par zéro
    For i = 0 To Choix_operateur.ListBox1.ListCount - 1
     
    'Test de haut en bas de listeBox: élement coché?
        If Choix_operateur.ListBox1.Selected(i) = True Then
     
    'Ajouter un élement à la liste des noms cochés
           iIndex = iIndex + 1
           ReDim Preserve str(iIndex)
           ReDim Preserve plan(iIndex)
           ReDim Preserve real(iIndex)
           ReDim Preserve eff(iIndex)
     
    'On récupère l'élement coché et on l'insère à la fin de la liste
           str(UBound(str)) = Choix_operateur.ListBox1.List(i)
     
    'On récupère le numéro de la ligne où figure le nom selectionné
           Set rg = Sheets("PMmain").Range("H16:H24").Find(Choix_operateur.ListBox1.List(i))
           If Not rg Is Nothing Then
           plan(UBound(plan)) = Sheets("PMmain").Cells(rg.Row, 23).Value
           real(UBound(real)) = Sheets("PMmain").Cells(rg.Row, 24).Value
           eff(UBound(real)) = Sheets("PMmain").Cells(rg.Row, 26).Value
           End If
     
       End If
    Next i
    Merci d'avance.

  2. #2
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Bonjour,

    créer un tableau dans une autre page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets.Add.Name = "Nom de ma nouvelle Feuille"
    à partir de la cellule A10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("Nom de ma nouvelle Feuille").Range("A10").Select
    chaque colonne les données d'une de mes séries...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveCell.Value = "toto" 'Ecris toto en A10
    ActiveCell.Offset(0,1).Value = "tata" 'Ecris tata en B10
    ActiveCell.Offset(1,0).Value = "tata" 'Ecris tata en A11
    Voila tu "n'as plus" qu'à balayer tes tableaux de données

    bastien

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Merci Bastien!!

    J'ai essayé ton code sur une boucle et ça marche....mais une fois seulement!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets.Add.Name = "Donnees par Operateur"
    Sheets("Donnees par Operateur").Range("A11").Select
    For j = 1 To iIndex
    ActiveCell.Offset(j - 1, 0) = str(j)        'Ecrit la jeme valeur de str() en A(11-jeme)
    ActiveCell.Offset(j - 1, 1).Value = plan(j) 'Ecrit la jeme valeur de plan() en B(11-jeme)
    ActiveCell.Offset(j - 1, 2).Value = real(j) 'Ecrit la jeme valeur de plan() en C(11-jeme)
    Next j
    En fait n'y aurait il pas moyen d'insérer ces données dans une page que j'aurais mis en page à l'avance, et qu'à chaque sollicitation de la macro, les données déjà existentes soient effacées????

  4. #4
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    J'ai essayé ton code sur une boucle et ça marche....mais une fois seulement!
    Je ne comprend pas ce que tu appelle une fois seulement? Sa ne boucle pas?

    En fait n'y aurait il pas moyen d'insérer ces données dans une page que j'aurais mis en page à l'avance, et qu'à chaque sollicitation de la macro, les données déjà existentes soient effacées????
    Oui c'est très facile à faire cela mais peut etre pas très optimiser. Dit m'en plus sur ce que tu veux faire.

    Bastien

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    EN fait le probleme c'est que faire tourner la macro avec le code tel que je l'ai posté fait qu'on demande de créer une page à chaque fois...mais elle ont toutes le mm nom, d'où le souci!

    En fait je compte créer une page avec un tableau dont les en tetes de colonnes seront en A10
    La macro que j'essaye de mettre en place là doit venir renseigner un certain nombre de lignes dans ce tableau

    Le but ultime étant que j'obtienne un graphe (que j'aurais simplement configuré sur excel) dont le visuel changera à chaque fois que les données de mon tableau seront implementées par ma macro...

    Tu me suis?? C'est vraimt juste pr contourner la difficulté que j'ai à générer le graphique directement sur VBA...

    DOnc ce dont j'ai concrétement besoin là c'est d'inserer les données dans la feuille 1 disons.

    Mais avant d'inserer ces données j'aimerais pouvoir vider ce qu'il devait y avoir auparavant...sachant que le nombre de ligne concernées n'est pas toujours le même. Il faut donc supprimmer le contenu de toutes les cellules en dessous de A11 B11 et C11

  6. #6
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Hum ok t'as l'air de prendre un bon chemin bien long doit y avoir un raccourcis je pense mais bon fait le deja comme sa tu verra après l'optimisation

    Mais avant d'inserer ces données j'aimerais pouvoir vider ce qu'il devait y avoir auparavant...sachant que le nombre de ligne concernées n'est pas toujours le même. Il faut donc supprimmer le contenu de toutes les cellules en dessous de A11 B11 et C11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A11:A6500,B11:B6500,C11:C65000").Clear
    Pour rendre plus dynamique tu peux choper la derniere ligne qui contient des données sa sera mieux que 65000

    Bastien

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    T'as raison et J'en suis bien conscient mais pr le moment j'ai besoin de résultats...et c pa gagné!!
    J'obtiens l'erreur suivante Select method of class range failed!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("Données selon Opérateurs").Range("A11:A30,B11:B30,C11:C30").Clear
    Sheets("Données selon Opérateurs").Range("A11").Select
    For j = 1 To iIndex
    ActiveCell.Offset(j - 1, 0) = str(j)        'Ecrit la jeme valeur de str() en A(11-jeme)
    ActiveCell.Offset(j - 1, 1).Value = plan(j) 'Ecrit la jeme valeur de plan() en B(11-jeme)
    ActiveCell.Offset(j - 1, 2).Value = real(j) 'Ecrit la jeme valeur de plan() en C(11-jeme)
    Next j
    Une idée???

  8. #8
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Euh non je ne vois pas j'ai fais le meme code et sa passe sans soucis

    Cela doit venir d'avant je pense, le clear marche?

    Bastien

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    En effet ça mùarchait sur une feuille vierge...
    Mais j'ai créé un tableau dans les cellules A10àC11, le but étant d'avoir des en tetes en A10 B10 et C10..
    c là que ça marche plus!

  10. #10
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sheets("Données selon Opérateurs").Range("A11:A30,B11:B30,C11:C30").Clear
    For j = 1 To iIndex
    with Range("A11")
    .Offset(j - 1, 0) = str(j)        'Ecrit la jeme valeur de str() en A(11-jeme)
    .Offset(j - 1, 1).Value = plan(j) 'Ecrit la jeme valeur de plan() en B(11-jeme)
    .Offset(j - 1, 2).Value = real(j) 'Ecrit la jeme valeur de plan() en C(11-jeme)
    end with
    Next j
    test sa

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    ça transposait l'info sur la feuille active...
    mais avec ça marche mieux du coup!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sheets("Données selon Opérateurs").Range("A11:A30,B11:B30,C11:C30").Clear
    For j = 1 To iIndex
    With Sheets("Données selon Opérateurs").Range("A11")
    .Offset(j - 1, 0) = str(j)        'Ecrit la jeme valeur de str() en A(11-jeme)
    .Offset(j - 1, 1).Value = plan(j) 'Ecrit la jeme valeur de plan() en B(11-jeme)
    .Offset(j - 1, 2).Value = real(j) 'Ecrit la jeme valeur de plan() en C(11-jeme)
    End With
     
    Next j
    Les infos sont bien supprimées.... mais pas les lignes du tableau!

    En gros, si la premiere fois je coche 3 noms (donc 3 lignes d'infos) et que j'enchaine en ne cochant qu'un seul nom, c'est le seul qui figurera sur le tableau, mais la deuxieme et 3eme ligne bien que vides, seront tjrs utilisées par mon graphique...qui rajoutera des champs ac des données (0,0).
    y'a t'il moyen de redimensionner le tableau selon le nombre de lignes qu'il contient??

    Encore merci pr ta patience bastien!!

  12. #12
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    tu peux toujours choper le nombre de ligne active.. etc en travaillant avec currentRegion par exemple... etc

    Le mieux c'est de récupérer la derniere ligne qui contient une valeur

    Ou alors récupérer autant de ligne que de nom coché

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Hey!
    G tenté pa mal de choses cet aprem ms pa bcp de résultats!
    En fait Clear vide le contenu des cellules, or ce que je recherche ensuite c'est de SUPPRIMER ces cellules vides qui n'auraient pas été reremplies. L'usage de Delete me paraissait plus évident...mais j'y arrive tjrs pas.
    Sur excel 2007 quand tu clear tes cellules elles restent kan mm "dans le tableau" (ça se voit à la mise en page). ce qui fait que mon graphique, qui prend en compte la derniere ligne du tableau, illustre de nombreux points inutiles!!!

    Si j'arrive à les supprimer le tableau ne prendra en compte que les vraies données et sera donc à la bonne echelle...
    ça parait débile et prtant je bloque là dessus c frustrant!!

  14. #14
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Sur excel 2007 quand tu clear tes cellules elles restent kan mm "dans le tableau" (ça se voit à la mise en page). ce qui fait que mon graphique, qui prend en compte la derniere ligne du tableau, illustre de nombreux points inutiles!!!
    A d'accord oui oui je croyais que toutes tes infos était dans le début de tableau en effet clear n'est pas la bonne fonction

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A10").EntireRow.Delete
    de mémoire pour supprimer la ligne 10

    Sinon voit si la fonction Hidden ne va pas aussi pour cacher une ligne

    Bastien

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Justement c cke javais essayé....Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A11:A20).EntireRow.Delete
    ça bug!
    Et Hidden je ne sais pa si c bon dans mon cas vu ke juste après la macro va venir coller pleins de valeurs sur ces mêmes lignes...

  16. #16
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A11:A20").EntireRow.Delete
    Attention au guillemet, mais si tu es dans la bonne feuille ce code marche niquel!
    Sa efface tes lignes=>tes lignes A11 à 20 sont effacer et ton ancienne A21 devient ton A11

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    J'avais bien les guillemets sur le code c juste une erreur de frappe sur la réponse..
    Après sur mon code C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Données selon Opérateurs").Range("A11:A30,B11:B30,C11:C30,D11:D30,E11:E30,F11:F30").EntireRow.Delete

  18. #18
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    C'est normal la fonction EntireRow supprime la ligne ENTIÈRE la tu supprime 6fois la même ligne juste A11:A30 suffit.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    G une solution ki marche!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim k As Integer
    For k = 11 To 22
    Sheets("Données selon Opérateurs").Range("A" & k).EntireRow.Delete
    Next k
    Mais ça prend 2 secondes...avant de mettre en page le tableau donc il doit y avoir moyen d'optimiser ça!

    Ah ben t'as raison!!!!
    En plus ça marche beaucoup plus vite!!
    Merci l'ami!!!

  20. #20
    Membre actif Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    oui sans boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Données selon Opérateurs").Range("A11:A22").EntireRow.Delete

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/03/2012, 11h01
  2. Réponses: 0
    Dernier message: 19/03/2012, 15h05
  3. Transmettre des données dans une même page
    Par Detere dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2008, 12h05
  4. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  5. [PHP-JS] Traitement des données dans une autre page...
    Par sekiryou dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2006, 09h06

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