Comparer 2 feuilles et voir ajouts suppression et modifications sur 3 feuilles

Jaylab

XLDnaute Nouveau
Bonjour,

Je découvre ce forum avec joie et vba aussi :)

Je souhaite actualiser un catalogue produit.
J'ai besoin de voir les références produits qui ont été ajouté, supprimée ou modifiées au niveau des prix et/ou des stocks entre deux feuilles excel (importée depuis un .csv) dans un même classeur.

J'ai récupérer des bouts de code et suis en train de découvrir vba : Sheets, range, Match, find etc.
Cependant je n'arrive juste à rien et n'avance pas.

Quelqu'un peut il m'aider ? Par avance merci.
 

Pièces jointes

  • Actualisation_prix_reference.xlsx
    14.1 KB · Affichages: 61

Haytoch

XLDnaute Junior
Re : Comparer 2 feuilles et voir ajouts suppression et modifications sur 3 feuilles

Bonsoir Jaylab le forum,

bienvenu :)

Ci-joint une Solution a tester .

J'ai ajouter une Feuille d'analyse a ton fichier , il faut juste MAJ les Feuilles de données (Anciens et Nouveaux) puis cliquer sur le Bouton de comparaison.

slt
Haytoch
 

Pièces jointes

  • Actualisation_prix_reference.xlsm
    29.9 KB · Affichages: 66

Jaylab

XLDnaute Nouveau
Re : Comparer 2 feuilles et voir ajouts suppression et modifications sur 3 feuilles

Bonsoir Haytoch,

Wouaahh, merci, merci beaucoup, ça m'enlève une sacré épine du pied et me sauve ma nuit...

J'avais pas mal avancé sur les ajouts et suppression mais... J'en étais là :

Code:
Option Explicit

Sub Stock()

Application.ScreenUpdating = False
' Clear nous permett de supprimerles précédentes recherches
Sheets(3).Range("A1").CurrentRegion.Offset(1, 0).Clear

Dim NbCols As Integer, firstAddress As Variant, _
ReferenceNewArticle As Range, ReferenceOldArticle As Range, _
Derligne As Long, X As Variant, c As Variant, _
FirstEmptyLineSheet3 As Integer, FirstContentLineSheet1 As Integer, i As Integer, ContentLineSheet2 As Integer

Set ReferenceNewArticle = Sheets(2).Range("A1:" & Sheets(2).Range("A65536").End(xlUp).Address)
Set ReferenceOldArticle = Sheets(1).Range("A1:" & Sheets(1).Range("A65536").End(xlUp).Address)
NbCols = Sheets(2).Range("A1:F1").Column
'Alternative pour : NbCols = Sheets(2).Range("IV5").End(xlToLeft).Column
Derligne = Sheets(1).Range("A65536").End(xlUp).Row

'Premiere Boucle On cherche si les articles dans referenceNewArticle existent dans ReferenceOldArticle
'si il ne trouve pas la ref dans nouveau c est un nouvel article
For Each X In ReferenceNewArticle

    i = i + 1
    'With nous permet de .range au lieu de Sheets(1).range( dans notre boucle
    With ReferenceOldArticle
    Set c = .Find(X.Value)

    'ici on teste les modifications nouveau produit (X) dans ancien (c)
    If Not c Is Nothing Then 'On a trouvé
    firstAddress = c.Address
    Debug.Print "c : " & c.Row
    Debug.Print "X : " & X.Row
    Debug.Print NbCols
        'Do
             'OK le probleme est que value est pour une cellule Taper une boucle for sur chaque cellule avant de férifier
            Cells(8, 1)
            .Range("A" & Rows.Count).End(xlUp).Row
            Cells(Int(Rnd * 10) + 1, 1).Value
             'On teste si les données sont identiques
            If Sheets(1).Range("A" & c.Row).Value <> Sheets(2).Range("A" & c.Row).Value Then
            Debug.Print (c.Row)
            End If
            'On copie le résultat
            'Alternative pour copier une ligne
            'Worksheets("Feuille2").Range("A1").value = Worksheets("Feuille1").Range("A1").Value
            'ThisWorkbook.Worksheets("Ajout").Range("A" & FirstEmptyLineSheet3 & ":F" & FirstEmptyLineSheet3).Value = _
            'ThisWorkbook.Worksheets("Nouveau").Range("A" & i & ":F" & i).Value
            Set c = .FindNext(c) 'On continue à chercher ...
        'Loop While Not c Is Nothing And c.Address <> firstAddress 'Les condiftions du Do (cf. plus haut)
    Else 'la reference est nouvelle
    Debug.Print ("ELSE")
    Debug.Print "X : " & X.Row
     'numéro de ligne en feuille 1
            ContentLineSheet2 = i
            'On repère la première ligne Vide en feuille 3
            FirstEmptyLineSheet3 = IIf(ThisWorkbook.Worksheets("Ajout").Range("A1").Value = _
            "", 1, ThisWorkbook.Worksheets("Ajout").Range("A65536").End(xlUp).Row + 1)
            
            'On copie le résultat
            ThisWorkbook.Worksheets("Ajout").Range("A" & FirstEmptyLineSheet3 & ":F" & FirstEmptyLineSheet3).Value = _
            ThisWorkbook.Worksheets("Nouveau").Range("A" & i & ":F" & i).Value
            i = i + 1
    End If

End With
Next
'Worksheets("Sheet1").Activate
'ActiveCell.CurrentRegion.Select
Sheets(3).Select 'On affiche le resultat
Application.ScreenUpdating = True
End Sub

Je découvre encore pas mal de possibilité avec ce fichier que je vais explorer.

J'ai juste un message d'erreur qui apparait

"La plage de destination n'est pas assez grande pour recevoir les lignes. Les données situées sous la plage de destination seront perdues. Voulez vous néamoins continuer à copier ?"

Le débugueur m'indique :

Code:
Ndwsh.Range("A1:F" & Nln).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Awsh.Range("A1:D2"), CopyToRange:=Awsh.Range("A10:F11"), _
        Unique:=False

En fait je ne comprends pas pourquoi tu prends A1:D2 dans Awsh et A10:F11.
Tu prends sur 2 lignes et tu écrases la précédente au fur et à mesure ?

Le script mis à part ça marche impeccable, encore une fois merci
 

Haytoch

XLDnaute Junior
Re : Comparer 2 feuilles et voir ajouts suppression et modifications sur 3 feuilles

bonsoir,

En faite c'est un filtre avancé :

* A1:D2 : la zone standard dans les deux feuilles ,
* Awsh.A10:F11 pour obtenir les valeurs de A:F (puis une petite comparaison entre les deux valeurs Prix,Quantités)

la gestion des donnés dans le tableaux :)

Pour l'erreur sa marche bien chez moi sans sucé .

Pour info
-Filtre elabores :
Filtrer à l
avec Video c'et tjrs mieux :)
https://www.video2brain.com/fr/videos-32869.htm

slt
haytoch
 

Discussions similaires

Statistiques des forums

Discussions
312 400
Messages
2 088 100
Membres
103 728
dernier inscrit
Tenace