• Initiateur de la discussion Initiateur de la discussion DJ FA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DJ FA

XLDnaute Occasionnel
Bonsoir voici mon code qui permet de copier les valeurs d'une feuille à l'autre. Mais par contre j'aimerais par le biais d'un "msgbox" être avertis lorsque ces valeurs (qui seront copiées plusieurs fois dans la même journée) ne sont pas dans le même ordre. Pouvez-vous m'aider ? merci à tous.

Code:
Sheets("R1").Range("B1:C30").Copy Sheets("R2").Range("G4:H30")
Set mondico = CreateObject("Scripting.Dictionary")
For Each Object In Sheets("R1s").Range("A1:A30")
mondico(Object.Value) = Object.Value
Next Object
Sheets("R2").Range("A4").Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
Sheets("R2").Select
 
Re : Ordre différent ?

Bonjour DJ FA,

Le problème n'est pas d'une clarté absolue.

Si j'ai bien compris, à la fin de la macro vous pouvez successivement :

- comparer mondico.Keys avec le tableau tablo (s'il existe)

- créer le nouveau tableau tablo par l'instruction :

Code:
ThisWorkbook.Names.Add "tablo", mondico.Keys
PS : pas très recommandé de nommer une variable "Object".

Car c'est bien sûr un mot de code réservé à VBA.

A+
 
Re : Ordre différent ?

Bonjour DJ FA,

Si vous restez les bras ballants, nous n'irons pas plus loin 🙄

Joignez donc un fichier et montrez clairement :

- ce que vous entendez par "ordre différent"

- pourquoi vous utilisez l'objet "Scripting.Dictionary" (il élimine les doublons)

- ce qu'il faut faire si le nombre des valeurs dans mondico.Keys est modifié.

A+
 
Re : Ordre différent ?

Bonjour DJ FA,

Pourquoi pas tout bêtement ceci :

Code:
Sub Copie()
Dim plage1 As Range, plage2 As Range, i, n
Set plage1 = Feuil1.[A1:A8]
Set plage2 = Feuil2.[A1:A8]
For i = 1 To plage1.Count
  If plage1.Cells(i) <> plage2.Cells(i) Then n = n + 1
Next
If n Then MsgBox n & " cellule(s) modifiée(s)"
plage1 = plage2.Value 'copie les valeurs de plage2 sur plage1
End Sub
A+
 
Re : Ordre différent ?

Re,

Un autre genre de comparaison :

Code:
Sub Copie()
Dim plage1 As Range, plage2 As Range, cel As Range, n1, n2
Set plage1 = Feuil1.[A1:A8]
Set plage2 = Feuil2.[A1:A8]
For Each cel In plage1
  If cel <> "" And Application.CountIf(plage2, cel) = 0 Then n1 = n1 + 1
Next
For Each cel In plage2
  If cel <> "" And Application.CountIf(plage1, cel) = 0 Then n2 = n2 + 1
Next
If n1 + n2 Then MsgBox IIf(n1, n1 & " valeur(s) supprimée(s)" & Chr(10), "") _
  & IIf(n2, n2 & " valeur(s) ajoutée(s)", "")
plage1 = plage2.Value 'copie les valeurs de plage2 sur plage1
End Sub
Noter que l'ordre des valeurs n'intervient pas ici.

En fait tout dépend de ce que vous voulez comparer 😎

A+
 
Re : Ordre différent ?

Je te remercie beaucoup pour cette macro bien écrite, mais de mon coté j'ai omis de te soumettre une demande bien plus précise et c'est pour ça que je joins encore mon fichier pour plus de détail, désolé.

En clair j'aimerais être averti par un Msgbox, QUE SI il y a un décalage ou (suppression peut être) et non pas à chaque ajout. J'espère avoir été plus précis.🙂
 

Pièces jointes

Dernière édition:
Re : Ordre différent ?

Re,

Si vous ne savez pas exactement ce que vous voulez faire, on risque de tourner en rond longtemps 😎

Si l'on veut uniquement les valeurs supprimées :

Code:
Sub Copie()
Dim plage1 As Range, plage2 As Range, cel As Range, n
Set plage1 = Feuil1.[A1:A8]
Set plage2 = Feuil2.[A1:A8]
For Each cel In plage1
  If cel <> "" And Application.CountIf(plage2, cel) = 0 Then n = n + 1
Next
If n Then MsgBox n & " valeur(s) supprimée(s)"
plage1 = plage2.Value 'copie les valeurs de plage2 sur plage1
End Sub
Vous pouviez y arriver tout seul, non ???

A+
 
Re : Ordre différent ?

Re,

La macro précédente n'indiquait rien si l'on supprimait des valeurs faisant doublon.

Voyez alors cette macro :

Code:
Sub Copie()
Dim plage1 As Range, plage2 As Range, cel As Range, c1, c2, n
Set plage1 = Feuil1.[A1:A8]
Set plage2 = Feuil2.[A1:A8]
For Each cel In plage1
  c1 = Application.CountIf(plage1, cel)
  c2 = Application.CountIf(plage2, cel)
  If cel <> "" And c1 > c2 Then n = n + (c1 - c2) / c1
Next
If n Then MsgBox n & " valeur(s) supprimée(s)"
plage1 = plage2.Value 'copie les valeurs de plage2 sur plage1
End Sub
Fichier joint.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
754
K
Réponses
3
Affichages
929
S
Réponses
1
Affichages
933
W
Réponses
2
Affichages
650
W
Retour