• Initiateur de la discussion Initiateur de la discussion Cameron81
  • 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 !

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

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:
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.
 
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.
 
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
 
- 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
223
Réponses
11
Affichages
157
Réponses
1
Affichages
110
Réponses
17
Affichages
1 K
Retour