Excel Données

Cameron81

XLDnaute Nouveau
--------------------------------------------------------------------------------

Bonjour,

Excusez-moi de vous déranger, mais je souhaiterai vous poser une question concernant un fichier excel:
Voilà: j'ai 2 tableaux avec des données,
le premier contient des données relatives au premier trimestre et le second contient des données du premier trimestre et celles du second trimestre qui s'y sont rajoutées .
Y a t-il une formule pour n'extraire que les données du second tableau qui se sont rajoutées au tableau du premier trimestre?

Merci d'avance de votre réponse.


Cordialement.
 

Pièces jointes

  • extraction données Excel.xls
    13.5 KB · Affichages: 80
  • extraction données Excel.xls
    13.5 KB · Affichages: 80
  • extraction données Excel.xls
    13.5 KB · Affichages: 78

pierrejean

XLDnaute Barbatruc
Re : Excel Données

Re

Bonjour Cameron

Salut mromain

Vois si cela te convient
 

Pièces jointes

  • extraction données Excel.zip
    14.6 KB · Affichages: 40
  • extraction données Excel.zip
    14.6 KB · Affichages: 40
  • extraction données Excel.zip
    14.6 KB · Affichages: 40

mromain

XLDnaute Barbatruc
Re : Excel Données

Re bonjour Cameron81,
Salut pierrejean ;)

Vu que c'est codé, je le dépose :
VB:
Sub Test()
'* Déclaration des variables
Dim tableauA As Range, tableauB As Range, tableauC As Range, curCell As Range, zoneConcatA As Range, zoneConcatB As Range
Dim i As Long
Dim formule As String
    
    
    '* Initialisation des variables
    Set tableauA = ThisWorkbook.Sheets("Feuil1").Range("A4:C6")     'données du premier trimerstre
    Set tableauB = ThisWorkbook.Sheets("Feuil1").Range("E4:G11")    'données du premier et deuxième trimerstre
    Set tableauC = ThisWorkbook.Sheets("Feuil1").Range("I4")        'première case du tableau résultat (deuxième trimerstre uniquement)
    
    
    '* On va écrire (par formule) dans la colonne à droite du tableauA la concaténation avec "|" des colonnes du tableau
    '       Remarque : cela implique que la colonne à droite du tableau doit être vide
    
    'définir la zone ou sera écrite la concaténation
    Set zoneConcatA = tableauA(1, 1).Offset(0, tableauA.Columns.Count).Resize(tableauA.Rows.Count, 1)
    
    'générger la formule
    formule = "="
    For i = tableauA(1, 1).Column To tableauA(1, 1).Column + tableauA.Columns.Count - 1
        formule = formule & "RC" & i & "&""|""&"
    Next i
    formule = Left(formule, Len(formule) - 5)
    
    'appliquer la formule à la zone à droite du tableauA
    zoneConcatA.FormulaR1C1 = formule
    
    
    '* On fait la même chose à droite du tableauB
    Set zoneConcatB = tableauB(1, 1).Offset(0, tableauB.Columns.Count).Resize(tableauB.Rows.Count, 1)
    formule = "="
    For i = tableauB(1, 1).Column To tableauB(1, 1).Column + tableauB.Columns.Count - 1
        formule = formule & "RC" & i & "&""|""&"
    Next i
    formule = Left(formule, Len(formule) - 5)
    zoneConcatB.FormulaR1C1 = formule
    
    
    '* On écrit dans tableauC ce qui est dans tableauB et pas dans tableauA
    
    'on filtre avec les valeurs concaténées
    i = 0
    For Each curCell In zoneConcatB
        If zoneConcatA.Find(curCell.Text, , xlValues, xlWhole) Is Nothing Then
            i = i + 1
            tableauC(1, 1).Offset(i - 1, 0) = curCell.Text
        End If
    Next curCell
    
    'on "dé-concatène"
    If i <> 0 Then
        tableauC(1, 1).Resize(i).TextToColumns tableauC(1, 1), xlDelimited, xlDoubleQuote, , , , , , True, "|"
    End If
    
    'effacer les formules de concaténation
    zoneConcatA.Clear
    zoneConcatB.Clear
End Sub
a+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Excel Données

Re

Voici le fichier avec la macro commentée
Reviens si quelque chose n'est pas clair
 

Pièces jointes

  • extraction données Excel.zip
    15.8 KB · Affichages: 50
  • extraction données Excel.zip
    15.8 KB · Affichages: 49
  • extraction données Excel.zip
    15.8 KB · Affichages: 53

david84

XLDnaute Barbatruc
Re : Excel Données

Bonjour, salut pierrejean et mromain,
ci-joint proposition.
A+
 

Pièces jointes

  • extraction données Excel.xls
    20.5 KB · Affichages: 70
  • extraction données Excel.xls
    20.5 KB · Affichages: 66
  • extraction données Excel.xls
    20.5 KB · Affichages: 66

Cameron81

XLDnaute Nouveau
Re : Excel Données

Bonjour david84,
salut pierrejean,salut mromain

Merci vraiment pour vos réponses je vais tester toutes vos généreuses propositions et je suis sûre que celà marchera et je vous tiendrai au courant.
A bientôt.
Encore merci.

Cdt.
 

Cameron81

XLDnaute Nouveau
Re : Excel Données

Re Pierrejean,

Je pense que vous m'avez envoyé le même ficheir qu'hier,je ne vois pas la macro commentée dont vous m'avez parlé dans le dernier message.
Merci de ton retour.
J'aimerai avoir les détails qui t'ont permis d'arriver à ce résultat si possible

Cdt.
 

pierrejean

XLDnaute Barbatruc
Re : Excel Données

Re

La voici

Code:
Sub diff()
' effacement de la zone de resultat
Range("I4:K65536").Clear
'mises sous forme de tableaux des zones a tester
tablo1 = Range("E4:G" & Range("E65536").End(xlUp).Row)
tablo2 = Range("A4:C" & Range("E65536").End(xlUp).Row)
'definir premiere ligne ou ecrire
  l = 4
'parcourir les lignes du tablo1
For n = LBound(tablo1, 1) To UBound(tablo1, 1)
'concatener les données de la ligne(tablo1)
    For m = LBound(tablo1, 2) To UBound(tablo1, 2)
      a = a & tablo1(n, m) & " "
    Next m
'parcourir les lignes du tablo2
    For p = LBound(tablo2, 1) To UBound(tablo2, 1)
 'concatener les données de la ligne(tablo1
         For q = LBound(tablo2, 2) To UBound(tablo2, 2)
           b = b & tablo2(p, q) & " "
         Next q
  's'il y egalité des concatenations
      If a = b Then
 'mettre a vrai le drapeau exist
        exist = True
  'et sortir de la boucle
        Exit For
      End If
  'remettre a "" la variable contenant les données de la ligne du tablo2
      b = ""
    Next p
  'si exist n'a pas été mis a vrai (il n'y a aucune egalité entre la ligne du tablo1 et les lignes du tablo2)
  If exist = False Then
  'transformer en tableau les données stockées en a (concatenation des données de tablo1)
  x = Split(Trim(a))
  'ecrire les données en ligne l a partir de la colonne 9
  For Z = LBound(x) To UBound(x)
    Cells(l, 9 + Z) = x(Z)
  Next Z
  'incrementer la ligne pour ecriture suivante
  l = l + 1
  End If
  'réinitialisations
  exist = False
  a = ""
  b = ""
Next n
'mise sous forme de chifre les resultats ecrits en colonne K
For n = 4 To Range("K65536").End(xlUp).Row
  Range("K" & n) = CDbl(Range("K" & n))
Next n
'mettre au format Monnetaire en colonne K
Range("K2:K" & Range("K65536").End(xlUp).Row).NumberFormat = "#,##0.00$_);[Red](#,#0.00$)"
'Encadrer les resultats
Range("I4:K" & Range("K65536").End(xlUp).Row).Borders.LineStyle = xlContinuous
End Sub
 

Discussions similaires

Réponses
5
Affichages
341
Réponses
11
Affichages
396

Statistiques des forums

Discussions
312 324
Messages
2 087 303
Membres
103 512
dernier inscrit
sisi235