Comparer 2 colonnes et ressortir une MsgBox

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,
Je compare deux colonnes, cependant une fois la comparaison faite je voudrai avoir une MsgBox avec seulement ce qui a été modifié.

Est-il possible s'il vous plaît d'avoir un petit coups d'mail ?

Voici le code qui compare les colonnes :
Option Explicit

' constantes à adapter à ton fichier

' Feuille 1
Const F1 = "Données"   ' nom
Const lidebF1 = 2     ' premiere ligne des données
Const coF1 = 1        ' colonne des données
Const coresF1 = 1     ' colonne pour le résultat (en principe ce sera coF1)
' Feuille 2
Const F2 = "Données"   ' nom
Const lidebF2 = 2     ' premiere ligne des données
Const coF2 = 4        ' colonne des données

Sub AnalysePing()
'
' AnalysePing Macro
'

'
    Workbooks.OpenText Filename:="Chemin\\Ping.txt", Origin:= _
        xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1)), TrailingMinusNumbers:=True
    Range("A3:A144").Select
    Selection.Copy
    Application.DisplayAlerts = False
    Windows("Problèmes.xlsm").Activate
    Range("D2:D143").Select
    ActiveSheet.Paste
    Windows("Ping.txt").Activate
    ActiveWindow.Close
    Application.DisplayAlerts = True
        Dim liF2 As Long, lifinF2 As Long, vF2, liF1 As Long, vF1
With Sheets(F2)
  lifinF2 = .Cells(Rows.Count, coF2).End(xlUp).Row
  For liF2 = lidebF2 To lifinF2
    vF2 = .Cells(liF2, coF2).Value
    liF1 = lidebF1 + liF2 - lidebF2
    vF1 = Sheets(F1).Cells(liF1, coF1).Value
    If vF1 = 1 Then
      Sheets(F1).Cells(liF1, coresF1).Value = vF1
    Else
      Sheets(F1).Cells(liF1, coresF1).Value = vF2
    End If
  Next liF2
End With
End Sub


Merci d'avance

A voir également:

1 réponse

Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonjour,

J'ai l'impression que pour le moment, il n'y aucune comparaison dans ton code.
Il y a pas mal de code parasite. Les feuilles 1 et 2 sont la même feuille.
La comparaison peut même se gérer par formule voire mise en forme conditionnelle...

A+
1
Utilisateur anonyme
 
Bonjour,
Il y a bien comparaison pourtant via un bouton ! Comme souhaité.
Les colonnes se situe sur la même feuille c'est pour cela.
Ensuite avec une formule ou mise en forme conditionnelle impossible parce que une partie de mes infos se situe dans un fichier texte que j'exporte dans un excel. Pour ensuite faire le comparatif.

J'avais fait une demande ici : https://forums.commentcamarche.net/forum/affich-35502541-comparer-remplacer-vba


Connaissiez-vous un moyen d'afficher les comparaison dans une MsgBox s'il vous plaît ?

Merci d'avance
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonjour,

Je maintiens : ce n'est pas une comparaison où tu exhibes les seules différences entre deux séries de données mais la création d'une troisième série de données à partir de deux séries d'entrée.
En partant sur l'exemple qu'on t'a donné : https://mon-partage.fr/f/0Op1YjMG/
- je suis d'accord que l'import du fichier texte est simplifié par macro ;
- le résultat en colonne G peut être obtenu par macro mais aussi par formule ;
- (3) le code listé dans ce fil modifie la série de données initiale ;
- si (3) est bien ce que tu veux et que tu tiens à afficher une MsgBox, tu peux ajouter
Dim texte As String
texte=""
'Suivant une certaine condition
texte=texte & "ligne " & liF2 & " : " & ... & Chr(10)
'Après la boucle For
MxgBox texte


A+
0
Utilisateur anonyme
 
Bonjour,

Oui c'est plus ça ;)
Mais ça ne fonctionne pas totalement ^^

Pour que cela soit plus clair voici des fichiers exemples de mon code.
Il y a l'excel avec le code et le fichier texte ou je récupère les données. (Dans le code il faut modifier le chemin du fichier PingResults.txt selon votre emplacement)
https://mon-partage.fr/f/FCJpHTz1/
https://mon-partage.fr/f/GTOUWV3U/

Mon Objectifs est d'afficher dans un MsgBox la colonne B (SITEx) mais seulement pour les lignes ayant changé.

Est-ce que cela est plus clair ? (Pas forcement simple à expliquer)

Merci d'avance
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonsoir,

SI j'ai bien compris, ceci peut faire l'affaire... même si je ne vois pas l'intérêt de remplacer les valeurs en colonne A.

Option Explicit

' constantes à adapter à ton fichier
' Colonne 1
Const F1 = "Feuil1"   ' nom
Const lidebF1 = 1     ' premiere ligne des données
Const coF1 = 1        ' colonne des données
Const coresF1 = 1     ' colonne pour le résultat (en principe ce sera coF1)
' Colonne D
Const F2 = "Feuil1"   ' nom
Const lidebF2 = 1     ' premiere ligne des données
Const coF2 = 4        ' colonne des données

Sub AnalysePing()
'
' AnalysePing Macro
'

'
'CHEMIN FICHIER PingResults.txt à changer
    Workbooks.OpenText Filename:=ActiveWorkbook.Path & "\PingResults.txt", Origin:= _
        xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1)), TrailingMinusNumbers:=True
    Range("A3:A13").Select
    Selection.Copy
    Application.DisplayAlerts = False
    Windows("TEST.xlsm").Activate
    Range("D1:D10").Select
    ActiveSheet.Paste
    Windows("PingResults.txt").Activate
    ActiveWindow.Close
    Application.DisplayAlerts = True
        Dim liF2 As Long, lifinF2 As Long, vF2, liF1 As Long, vF1, msgsites As String
        
With Sheets(F2)
  lifinF2 = .Cells(Rows.Count, coF2).End(xlUp).Row
  For liF2 = lidebF2 To lifinF2
    vF2 = .Cells(liF2, coF2).Value
    liF1 = lidebF1 + liF2 - lidebF2
    vF1 = Sheets(F1).Cells(liF1, coF1).Value
    If vF1 = 1 Then
      Sheets(F1).Cells(liF1, coresF1).Value = vF1
    Else
      Sheets(F1).Cells(liF1, coresF1).Value = vF2
      If vF1 <> vF2 Then msgsites = msgsites & Sheets(F1).Cells(liF1, coresF1 + 1).Value & ":" & vF1 & "-->" & vF2 & Chr(10)
    End If
  Next liF2
  MsgBox msgsites
End With
End Sub
0
Utilisateur anonyme
 
Bonjour,
C'est exactement ça !!
Merci de votre aide ;)
0