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 :

Macro Lecture boucle des occurences + remplissage des données


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
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut Macro Lecture boucle des occurences + remplissage des données
    Bonjour,


    Feuille 1 : avec deux colonnes dont une "Famille de produits" et une "Produits".
    Feuille 2 : avec en colonnes les différentes familles et en lignes les produits correspondants aux Familles.

    Comment faire pour que lorsque j'entre :
    - un nouveau Produit dans la Feuille 1 en choisissant moi-même la Famille de produits, ledit produit soit enregistré dans la feuille 2 automatiquement, en vérifiant qu'il ne figure déjà dans la Feuille 2 ?

    Je penserai à combiner une fonction de macro en boucle pour vérifier si le Produit de la feuille 1 figure ou non dans la Feuille 2, et s'il n'y figure pas, que ce produit soit enregistré dans une colonne de Feuille 2, selon sa famille d'appartenance, et en fin de liste.

    Pourriez-vous m'aider ?

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bjr,
    comme je ne connaissais pas dans quel colonne sont les familles produits j'ai supposé que c'est en col A et les produits en col B de la feuil 1
    pour la feuil 2 les familles produits en ligne 1.
    J'ai utilisé l'événement "change" de la feuil 1 et dans le code je ne prend en compte que les changements effectués dans le colonne 2 (B).
    Donc dans l'éditeur vba tu clic 2 fois sur feuil1 dans la fenetre de gauche et tu colles ceci:
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim val As String, val1 As String, vrech1 As Range, vrech2 As Range
    Dim i As Long, j As Long
     
    If Target.Column = 2 Then
     val = Target.Value 'produit
     val1 = Target.Offset(0, -1).Value  'famille de produit
     
    Set vrech = Sheets(2).Rows(1).Find(val1)  'recherche de la famille de produit
     
     With Sheets(2)
      If Not vrech Is Nothing Then
          i = vrech.Column
          j = .Cells(65536, i).End(xlUp).Row + 1
     
        Set vrech2 = .Columns(i).Find(val)   'recherche du produit
          If vrech2 Is Nothing Then
          .Cells(j, i).Value = val
          MsgBox "1 produit ajouté !"
     
          Else
          MsgBox "Ce produit existe déjà !"
          End If
     
      End If
     End With
    End If
    End Sub
    Tu remarqueras que je n'ai pas utiliser de boucles mais la fonction "FIND".
    Adapte ceci a tes besoins, et dis nous ce qu'il en est.
    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut
    Bonjour, d'abord merci bcp.


    Lorsque je clique sur une cellule de Produit, la MsgBox apparaît.
    Est-ce qu'il ne faudrait pas plutôt que ce soit lorsque l'on inscrit un nouveau Produit dans Feuille 1 que l'opération se déroule.
    C'est-à-dire que le produit soit ajouté à la liste dans Feuille 2 si et seulement si il n'y figure pas, et là qu'il nous soit confirmé par une MsgBox "Produit ajouté à Feuille 2".
    + Du coup, un moyen de contrôler que le produit est unique dans Feuille 2 serait que cela soit vérifié et confirmer "Le produit figure déjà dans la liste. Il n'a pas été rajouté" et, l'idéal serait que cette cellule existant soit mise en surbrillance pour que l'on puisse vérifier visuellement.

    ... !!! Un peu compliqué, j'ai l'impression!

    Précision : ma liste commence à la ligne 31 de Feuille 1, les intitulés de colonne sont en ligne 29.
    + Les Familles de produits sont dans la colonne B, et Les Produits se situent dans la colonne C.

    --> Où l'indiquer dans la macro ? Et comment ?
    Dois-je placer la macro dans Feuille 1 ou Feuille 2 ?
    merci!

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Salut,
    on va y aller pas à pas:
    Lorsque je clique sur une cellule de Produit, la MsgBox apparaît.
    Est-ce qu'il ne faudrait pas plutôt que ce soit lorsque l'on inscrit un nouveau Produit dans Feuille 1 que l'opération se déroule.
    normalement, si je ne me trompe pas l'évenement change déclenche la macro lorsque un changement dans la cellule cible intervient. donc un simple clic sur la cellule ne devrait pas déclencher la macro. Maintenant si tu double clic sur une cellule cible et que tu ne changes rien dans la cellule si tu valides alors la macro va se déclencher, idem si tu modifie ou ajoute un nouveau produit et donc les msgbox vont apparaître.

    2- ensuite:
    C'est-à-dire que le produit soit ajouté à la liste dans Feuille 2 si et seulement si il n'y figure pas, et là qu'il nous soit confirmé par une MsgBox "Produit ajouté à Feuille 2".
    la macro le fait déjà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set vrech2 = .Columns(i).Find(val)   'recherche du produit
          If vrech2 Is Nothing Then 
          .Cells(j, i).Value = val
          MsgBox "1 produit ajouté !"
    quand au texte du msgbox il te suffit de modifier le texte qui se trouve entre "".

    3-
    + Du coup, un moyen de contrôler que le produit est unique dans Feuille 2 serait que cela soit vérifié et confirmer "Le produit figure déjà dans la liste. Il n'a pas été rajouté"
    cela aussi le code le fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Else
          MsgBox "Ce produit existe déjà !"
          End If
    comme dis plus haut il te suffit de changer le texte.

    4-
    Précision : ma liste commence à la ligne 31 de Feuille 1, les intitulés de colonne sont en ligne 29.
    + Les Familles de produits sont dans la colonne B, et Les Produits se situent dans la colonne C.
    merci pour ces précisions, comme tes produits commence à la ligne 31 et se trouve en colonne 3, il n'est pas utile d'activer la macro sur les lignes précédentes donc j'ai un peu modifié la macro. comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim val As String, val1 As String, vrech1 As Range, vrech2 As Range
    Dim i As Long, j As Long
     
    If Target.Column = 3 And Target.Row < 31 Then
    Exit Sub
     
     ElseIf Target.Column = 3 And Target.Row >= 31 Then
     val = Target.Value 'produit
     val1 = Target.Offset(0, -1).Value  'famille de produit
    'etc....
    remplace le début du code par celui-ci

    5- enfin
    Dois-je placer la macro dans Feuille 1 ou Feuille 2 ?
    note que je t'ai déjà indiqué cela :
    Donc dans l'éditeur vba tu clic 2 fois sur feuil1 dans la fenetre de gauche et tu colles ceci:
    voila çà fait pas mal on verra après si on peux mettre la cellule en surbrillance, fait ces changements et dis ce qu'il en est.

    Bonne journée

    ps: tes intitulés en feuil2 se trouve bien sur la première ligne ? si oui c bon, sinon change le numero de ligne ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set vrech = Sheets(2).Rows(1).Find(val1)
    remplce rows (1) par ton numero de ligne

    @+

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2009, 10h36
  2. Trigger pour mettre des droits sur des procedures et des vues
    Par briino dans le forum Développement
    Réponses: 3
    Dernier message: 23/09/2009, 09h44
  3. Réponses: 4
    Dernier message: 02/04/2008, 17h51
  4. Réponses: 3
    Dernier message: 13/09/2007, 18h11
  5. Réponses: 3
    Dernier message: 23/01/2007, 08h14

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