Macro

Zen -  
 Zen -
Bonjour,

Pouvez-vous m'aider à créer un macro de report, c'est-à-dire qui recherche une donnée pour la mettre ailleurs.

J'ai tout expliqué sur ce fichier.

Merci d'avance pour les personnes qui voudront bien m'aider.

https://www.cjoint.com/?kBt5PycU3J
Configuration: Windows XP Internet Explorer 7.0

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Une proposition : Report.xls

    En Feuil2 il faut nommer la plage des tarifs : 'tarif'
    Seules les cellules vides sont mises à jour, j'ajoute un fond vert pour les repérer pendant les tests.

    eric
    1
    1. Zen
       
      Superbe merci beaucoup.
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Voici ton classeur avec la macro :

    http://www.cijoint.fr/cjlink.php?file=cj200910/cijvJo1igp.xls

    Il faut bien sûr que tu autorises l'exécution des macros pour qu'elle soit efficiente.
    1
    1. Zen
       
      C'est parfait merci beaucoup. :-)
      0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Avec une macro événementielle sur la Feuil2 cela devrait faire ce que tu veux

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal sel As Range)
    If sel.Column < 3 Then  'seules les colonnes A et B sont cocernées
    Dim cel As Object
        For Each cel In sel ' boucle pour chaque cellule mise à jour
            Select Case cel.Column
                Case 1      ' colonne A
                    Call trt_elm(cel.Value, cel.Offset(0, 1).Value)
                Case 2      ' colonne B
                    Call trt_elm(cel.Offset(0, -1).Value, cel.Value)
            End Select
        Next cel
    End If
    End Sub
    
    Public Sub trt_elm(num, tar)   'analyse Feuil1
    Dim lig As Long, lyg As Long
    With Sheets("Feuil1")
        For lig = 1 To .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row
            If .Cells(lig, 1).Value = num Then  'n° trouvé
                If .Cells(lig, 3).Value = tar Then Exit Sub 'tarif égal => rien
                For lyg = lig To .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row
                    If .Cells(lyg, 3).Value = tar Then Exit Sub 'tarif égal => rien
                Next lyg    'pas de n° et tarif égaux =>on ajoute
                .Cells(lyg, 1).Value = num
                .Cells(lyg, 3).Value = tar
                Exit Sub
            End If
        Next lig
        If lig > .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row Then
            .Cells(lig, 1).Value = num
            .Cells(lig, 3).Value = tar
        End If
    End With
    End Sub

    Seuls les nouveaux tarifs pour un produit ou les nouveaux produits sont rajoutés.
    0
    1. Zen
       
      Je pense que je dois faire quelque chose de faux parce que je n'arrive pas à la faire fonctionner? :-(
      0
    2. Zen
       
      PS: J'aime bien ton petit commentaire "Toujours Zen" :-)
      0
  4. baborge Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   33
     
    Bonsoir,

    Je veux bien te donner un coup de main pour ton fichier, mais je ne vois pas comment tu va gerer les changements successifs de tarifs avec ta methode.

    imagine:
    tarif 1 :  89
    tarif 2: 120
    tarif 3: 125
    etc...
    
    Dans ce cas, on a déjà 3 fois la même ligne ...
    


    Ne peut on pas plutot envisager:

    - une colonne ancien tarif
    - une colonne Tarif
    - une colonne date

    Cela permet de conserver les 2 derniers tarifs (y compris l'actuel)

    A toi de voir?

    @+
    Laurent
    0
    1. Zen
       
      Salut,

      Oui je comprends ce que tu veux dire mais c'est vrai que c'est difficile de se projeter lorsqu'on a pas tout le tableau. En fait ces lignes doivent de toutes facon être créer pour d'autres colonnes alors ce n'est pas grave mais si je ne devais pas rajouter des données dans d'autres colonnes ton idée aurait été idéal. :-)
      0