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 :

copier une une ligne d'un tableau en fonction de la valeur de la première cellule [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de mentat
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Août 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 139
    Points : 99
    Points
    99
    Par défaut copier une une ligne d'un tableau en fonction de la valeur de la première cellule
    Bonjour,

    Je suis à la fin du développement d'un nouveau projet perso et je bloc...

    Voila je possède un tableau que je rempli par macro. Ce tableau me sert de base de donné. J'aimerais ensuite copier certaine ligne de ce tableau et venir les coller dans un autre tableau, d'une autre feuille.

    Je souhaite choisire les lignes que je veut copier en fonction de la valeur de la première cellule de mon tableau.

    Je pensais le faire avec une boucle For mais je n'arrive pas à la faire fonctionner.
    Je me servais de cette boucle pour remplir une combobox en fonction d'une autre combobox avec l'aide d'un tableau.

    Voici le code que j'essaye de modifier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim Cellule As Range
        ComboBox1.Clear
        For Each Cellule In Worksheets("Liste").Range("Tmaps").Columns(1).Cells
            If Cellule(1, 2) = ComboBox2.Value Then ComboBox1.AddItem Cellule.Value
        Next Cellule
    End If
    Je l'ai donc modifié afin d'essayer de voire si déjà j'arrivais à sélectionner les cellules...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim Cellule As Range
        For Each Cellule In Worksheets("Base de donné").Range("basededonné").Columns(1).Cells
            If Cellule(1, 3) = ComboBox1.Value Then Range(ActiveCell, ActiveCell.End(xlToRight)).Select
            End If
        Next Cellule
    mais ça ne fonctionne pas... j'essaye de cherche dans les forum mais je ne trouve pas...

    Si quelqu'un peut m'aider merci...

    Mentat

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut mentat et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim Cellule As Range
        For Each Cellule In Worksheets("Base de donné").Range("basededonné").Columns(1).Cells
            If Cellule(1, 3) = ComboBox1.Value Then Range(ActiveCell, ActiveCell.End(xlToRight)).Select
            End If
        Next Cellule
    mais ça ne fonctionne pas
    Si tu veux dautres codes qui ne fonctionnent pas, je peux t'en fournir . Et encore... ça veut dire quoi ne fonctionne pas ? T'es du style à demander un dépannage de ta voiture par téléphone en disant ça ne fonctionne pas, en espérant que le garagiste va te dire "c'est la troisième bougie qui déconne" parce qu'il l'a vu dans sa boule de cristal ? Sans infos précises, on ne peut rien faire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cellule In Worksheets("Base de donné").Range("basededonné").Columns(1).Cells
    Pour chaque cellule de la colonne 1 de la plage nommée basededonnée
    J'espère qu'elle est limitée en nombre de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Cellule(1, 3) = ComboBox1.Value Then Range(ActiveCell, ActiveCell.End(xlToRight)).Select
    End If
    Là, on devrait avoir une erreur : on mélange les deux syntaxes possibles de l'instruction If. Il faut choisir
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cellule(1, 3) = ComboBox1.Value Then Range(ActiveCell, ActiveCell.End(xlToRight)).Select
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Cellule(1, 3) = ComboBox1.Value Then 
         Range(ActiveCell, ActiveCell.End(xlToRight)).Select
    End If
    Cellule(1, 3) : Deux remarques :
    - Je n'emploie pas ce style de notation, je préfère mettre Cellule.Offset(0,2) plus claire
    - Pourquoi ne pas tester directement la colonne 3 ?
    Range(ActiveCell, ActiveCell.End(xlToRight)).Select
    Suivant le bout de code fourni, la cellule active peut être n'importe laquelle. on aurait vraisemblablement du avoir
    Range(Cellule, Cellule.End(xlToRight)).Select
    sélectionner de cellule, à la dernière colonne de la ligne de cellule.
    Sauf qu'utiliser des select est une abhération, à mon sens.
    Next Cellule
    cellule suivante

    N'ayant pas d'autres infos, difficile de dire autre chose sur le code fourni, mais...
    S'il n'y a qu'une info = combobox, et en imaginant qu'elle est sur la première ligne testée, tout le reste sera de la perte de temps. iIl faudrait un Exit For
    Si on a un nombre de lignes important, une recherche par .Find sur la troisième colonne sera plus rapide. S'il y a plusieurs réponses possibles, l'utilisation du filtre auto peut être interessante.
    A+

  3. #3
    Membre régulier Avatar de mentat
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Août 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 139
    Points : 99
    Points
    99
    Par défaut
    Bonjour, et Merci de te pencher sur mon problème Gorfael.

    En fait j'essaye de modifier ce bout de code parce qu'il fonctionne lors du remplissage de ma combobox1 avec la combobox2.
    Et comme je ne suis pas un bon dépanneur de voiture, et comme ton garagiste, je ne suis pas devin...lol
    Je viens me renseigné au près du forum de Developpez afin que l'on me dirige un peu vers les bon outils à utilisé...

    Vue que je deviens un bon petit débutant persistant dans le domaine... je ne demande qu'à apprendre.

    Je vais donc essayé de mieux expliqué sur ce que je souhaiterai faire.

    Dans une première feuille,

    J'ai tous d'abord 2 combobox.
    La première contient les noms de tous les membres.
    La deuxième les 4 rangs différent au quel les membres peuvent être.
    Si combobox2 = 0 alors combobox1 = tous les membres
    Si combobox2=1 alors combobox1 = membres de rangs 1... pour 4 rangs.

    Je remplis 7 cellules sur une ligne.
    Les deux premières je les remplis en fonction du membres selectionné dans la combobox1.
    La première contient le nom d'un membre.
    La deuxième son rang.
    La troisième c'est une date (du jours par macro, ou manuel par l'utilisateur).
    La 4 ème, est un montant remplit par l'utilisateur.
    La 5 ème, est remplit par l'utilisateur à l'aide d'une liste.
    La 6ème, est une valeur récupérer, par macro d'une autre feuille suivant la valeur de la deuxième cellule.
    La 7ème, est le calcul de la différence entre la 4èmecellule et la 6ème.

    Une fois remplis l'utilisateur peut avec l'aide du bouton1 copier cette ligne et l'inclue dans un tableau1 de calcul récapitulatif sur cette même page.
    Avec le même bouton1, il copie en même temps cette ligne qu'il vient ajouté dans une feuille2, dans un nouveau tableau2 à la suite des autres ligne qu'il à pu créer au par avant.

    J'ai ensuite un autre bounton2 qui vient vider ma ligne à 7 cellules ainsi que mon tableau1.

    Mon tableau2 sur la deuxième page est une sorte de base de donné.

    Jusque ici. mon programme fonctionne...

    Ce que je souhaiterai faire maintenant, c'est de pouvoir récupérer les lignes de mon tableau2 de la feuille2 en fonction de la valeur de leurs première cellule c'est à dire le nom du membres.
    Et de les rajouters dans le tableau1 de la feuille1 avec l'aide d'un bouton.

    Je sais donc qu'il faut lancé une boucle qui vient regarder la valeur de chaque cellule de la première colonne, lorsqu'elle trouve une cellule avec la bonne valeur,
    elle doit sélectionner et copier à partir de cette cellule les 6 prochaine se situant à ça droite. Et ensuite les inclurent à la suite dans le tableau 1 de la feuille 1.

    C 'eest donc cela que j'essayais de faire en modifiant ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim Cellule As Range
        For Each Cellule In Worksheets("Base de donné").Range("basededonné").Columns(1).Cells
            If Cellule(1, 3) = ComboBox1.Value Then Range(ActiveCell, ActiveCell.End(xlToRight)).Select
            End If
        Next Cellule
    Il est possible que je n'utilise pas la bonne boucle pour ce type d'utilisation...
    Mais je ne suis qu'un débutant qui souhaiterai si possible être mis sur la bonne voie...

    Merci à vous tous

  4. #4
    Membre régulier Avatar de mentat
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Août 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 139
    Points : 99
    Points
    99
    Par défaut
    Merci, J'ai enfin réussi faire ma boucle...

    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 CommandButton3_Click()
    'J'efface tout d'abord mon tableau 1
    If Range("B15") = "" Then
    Else
    Set a = Range("nommembres").Offset(1, 0)
    Set b = Range("finH15").Offset(-1, 0)
    Range(a, b).Select
    Selection.Delete Shift:=xlUp
     End If
    'Je nomme la feuille afin de garder un peut plus lisible mon programme
     Set c = Worksheets("Base de donné")
    'Voici ma boucle qui vient regarder chaque cellule de la colonne B
     For n = 2 To Worksheets("Base de donné").Range("B65536").End(xlUp).Row
    'Si la valeur de la cellule est égale à la valeur de ma combobox1
       If c.Range("B" & n).Value = ComboBox1.Value Then
    'Je copie de cette cellule à la cellule correspondant à la colonne H
          c.Range(Worksheets("Base de donné").Range("B" & n), Worksheets("Base de donné").Range("H" & n)).Copy
    'Je sélectionne ma feuille1 et je rajoute la ligne dans mon tableau1
          Sheets("Banque").Select
          Range("B65535").End(xlUp).Offset(1, 0).Select
          Selection.Insert Shift:=xlDown
        End If
    'Et je reboucle...
     Next n
    'J'ajoute cette ligne afin qu'il me sélectionne une case ne servant à rien afin d'évité tout problème à l'utilisateur
    Worksheets("Banque").Range("A1").Select
    End Sub
    Merci à tous

    Bonne fête de fin d'année

    Mentat

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

Discussions similaires

  1. Copier/coller lignes tableau en fonction de la valeur d'une cellule
    Par pheonix00fr dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/12/2014, 11h59
  2. [XL-2010] Associer 2 formes à une seule ligne d'un tableau
    Par SkyCorp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/10/2011, 09h58
  3. [XL-2007] Rechercher une valeur dans une feuille, ligne, colonne ou tableau
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/08/2011, 19h26
  4. [AC-2003] Mise-a-jour d'une seule ligne d'un tableau
    Par Quentin M dans le forum IHM
    Réponses: 3
    Dernier message: 11/05/2009, 16h08
  5. [MySQL] Affichage simple d'une certaine ligne d'un tableau
    Par linux_21 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/06/2008, 08h19

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