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
A voir également:

4 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
Zen
 
Superbe merci beaucoup.
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 731
 
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
Zen
 
C'est parfait merci beaucoup. :-)
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 731
 
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
Zen
 
Je pense que je dois faire quelque chose de faux parce que je n'arrive pas à la faire fonctionner? :-(
0
Zen
 
PS: J'aime bien ton petit commentaire "Toujours Zen" :-)
0
baborge Messages postés 94 Statut Membre 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
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