(VBA) Retour a la ligne et date maximale

Franckxxx

XLDnaute Junior
Bonjour à tous!

J'ai mit en place un petit code et je bute sur deux cas particulier.
Pour illustrer je joint un fichier Excel, la Feuil1 représente une base de donnée très simplifiée, la Feuil2 représente un lieu d’importation de données et la Feuil3 montre ce que j'essaye d'obtenir (après application de la macro sur la Feuil2).

Le code marche assez bien cependant il est possible que la Base de donnée comporte plusieurs ligne pour une référence tandis que ma Feuille de synthèse (Feuil2) ne doit en comporter qu'une, et la sa coince..
J'aimerais différentes actions, ex: Si c'est un prix il les somme, si c'est une date il prend la plus grande et si c'est une ref de doc associé il va a la ligne (dans la même cellule) pour les différencier.

Si quelqu'un avait une petite idée pour résoudre ses cas particuliers ce n'est pas de refus :)

Merci à vous!!!
 

Pièces jointes

  • Doublons.xlsm
    18.3 KB · Affichages: 50
  • Doublons.xlsm
    18.3 KB · Affichages: 50
  • Doublons.xlsm
    18.3 KB · Affichages: 47

PMO2

XLDnaute Accro
Re : (VBA) Retour a la ligne et date maximale

Bonjour,

Peut être comme cela
Code:
Sub Transfert()
Dim DerLig1 As Long, DerLig2 As Long, i As Long, j As Long, TabIni1, TabRef1
 Dim DerLig3 As Long, DerLig4 As Long, k As Long, l As Long, m As Long, TabIni2, TabRef2

 DerLig1 = Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
 DerLig2 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
 TabIni1 = Worksheets("Feuil2").Range("A2:E" & DerLig1)
 TabRef1 = Worksheets("Feuil1").Range("A2:E" & DerLig2)

 For i = LBound(TabRef1) To UBound(TabRef1)
    For j = LBound(TabIni1) To UBound(TabIni1)
        If TabRef1(i, 1) = TabIni1(j, 1) Then
            TabIni1(j, 2) = TabIni1(j, 2) + TabRef1(i, 3)
           
'///ajout modif
'Erreur, il faudrais un retour à la ligne pour ajouter le Doc suivant
'Si il en existe déja un
If TabIni1(j, 3) = "" Then
  TabIni1(j, 3) = TabIni1(j, 3) + TabRef1(i, 4)
Else
  TabIni1(j, 3) = TabIni1(j, 3) & vbLf + TabRef1(i, 4)
End If
'///
            TabIni1(j, 4) = TabIni1(j, 4) + TabRef1(i, 2)
            
'///ajout modif
'Erreur, existe-t-il une fonction max en vba?
Dim x
x = TabRef1(i, 5)
If TabIni1(j, 5) <> "" Then
  If x > TabIni1(j, 5) Then TabIni1(j, 5) = x
Else
  TabIni1(j, 5) = x
End If
'///
         
            Exit For
        End If
    Next
 Next

 Worksheets("Feuil2").Range("A2").Resize(UBound(TabIni1, 1), UBound(TabIni1, 2)) = TabIni1
End Sub
 

Iznogood1

XLDnaute Impliqué
Re : (VBA) Retour a la ligne et date maximale

Bonjour,

Tu peux utiliser des formules pour les quantités et le prix ; Par exemple
=SOMME.SI(Feuil1!$A$2:$A$20;A2;Feuil1!$C$2:$C$20)

Idem pour la date avec des formules matricielles (à valider par Ctrl + Entrée) :
{=MAX((Feuil1!$A$2:$A$20=Feuil2!A2)*Feuil1!$E$2:$E$20)}


Tu peux aussi utiliser le code "Transfert2" dans l'exemple ci-joint.

Enfin, as-tu pensé aux tableaux croisés dynamiques (voir fichier joint aussi) ?
 

Pièces jointes

  • Copie de Doublons-3.xlsm
    27.3 KB · Affichages: 58

Franckxxx

XLDnaute Junior
Re : (VBA) Retour a la ligne et date maximale

A PM02, je ne connaissais pas la fonction "vbLf", elle me seras très utile par la suite! J'avais aussi essayé d'utiliser la fonction IF mais cela ne fonctionnais pas j'avais fait quelques erreurs de syntaxe, merci de m'avoir débloqué sur ce point. J'ai réutilisé cette méthode pour mon fichier original en l'adaptant au format et cela fonctionne parfaitement, merci!

A Iznoggod1, il est vrai que je n'avais pas pensé aux formules dans ce cas précis. J'avais trouvé que les tableaux croisé dynamiques étaient plus compliqués a utiliser pour une exploitation des résultats obtenus, mais il est vrai qu'ils sont utiles pour une présentation synthétique et esthétique, merci pour l'idée! Concernant le code en lui même, j'avoue avoir eut un peut plus de mal a comprendre étant donné sa forme. je n'ai pas encore réussi à l'adapter à mon fichier original mais je n'abandonne pas.
J'aurais aimé savoir la signification de NbLiSource et la différence entre vbCrLf et vbLf? Merci!
 

PMO2

XLDnaute Accro
Re : (VBA) Retour a la ligne et date maximale

A PM02, je ne connaissais pas la fonction "vbLf"
Ce n'est pas une fonction mais une constante Membre de VBA.Constants au même titre que vbCr.

table ascii
Décimal Octal Hex Binaire Caractère
------- ----- --- -------- ------
010 012 0A 00001010 LF (Line Feed) à la ligne - Pareil que l'instruction Chr(10)
013 015 0D 00001101 CR (Carriage Return) retour chariot - Pareil que l'instruction Chr(13)

vbCrLf équivaut a vbCr & vbLf OU à Chr(10) & Chr(13)
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 138
Membres
104 047
dernier inscrit
bravetta