(VBA) Retour a la ligne et date maximale

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

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

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
 
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

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!
 
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)
 
- 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

Retour