RechercheV et macros

bonjour à toutes et tous

je n'ai pas trouvé de solutions adaptées à mon problème sur ce forum, je me permet donc de vous solliciter.

j'ai un fichier avec trois onglets dont deux de données externes avec en moyenne 20 000 lignes avec parfois beaucoup de cellules vides

*dans l'onglet "publipostage" je regroupe des données

Civilité Nom prenom societe adessse mail

*dans l'onglet "fichier client" des données communes à "publipostage" et des données complémentaires

Civilite Nom prenom Société Adresse Cd. postal Ville Tél Création Commande Nb Comm. CA HT

je souhaiterais avoir dans l'onglet "tri par société" les adresses mail attribuées aux bonnes personnes et pouvoir filtrer le tableau par sociétés.

après des heures à enregistrer des macros, faire des rechercheV et finir avec un fichier avec 5 onglets j'ai souvent encore des problèmes de longueur de macros (30-40s) ou même des bugs

et quand j'arrive enfin à une solution acceptable il suffit que je change mes données extérieures (autre publipostage ou autre fichier client venant d'un autre secteur) je galère à nouveau avec de nouveaux problèmes

.les cellules vides me changent les mises en pages

.les adresses mail ne restent pas bien attribuées quand je filtre les sociétés

.les dates deviennent des nombres

etc etc

quelqu'un aurait une solution?[

vous l'avez compris je ne suis pas du tout un expert d' Excel et je vous remercie d'avoir pris le temps de lire ma question

merci par avance de vos réponses

attachment=0]test.xlsx[/attachment]

9test.xlsx (14.60 Ko)

Bonjour FrancoiM le forum

ton fichier en retour, pas sur d'avoir compris ce que tu veux mais bon regarde et redis moi

et si ce n'est pas cela il faudrait au minimum faire une feuille en manuel, avec le résultat souhaité et je referai

a+

Papou

Bonjour François, Papou (ça va bien ? ) , bonjour le forum,

Pas compris la même chose que Papou !... Je t'envoie ma proposition qui, en fonction du Fichier Client et du Publispostage, met à jour le Tri par Société. J'ai modifié car la concaténation Nom/Prénom foutait un bo***l pas croyable. Lance la macro...

Le code :

Sub Macro1()
Dim TPS As Worksheet 'déclare la variable TPS (onglet Tri Par Société)
Dim FC As Worksheet 'déclare la variable TPS (onglet Fichier Client)
Dim P As Worksheet 'déclare la variable TPS (onglet Publipostage)
Dim TTPS As Variant 'déclare la variable TTPS (Tableau de l'onglet Tri Par Société)
Dim TFC As Variant 'déclare la variable TTPS (Tableau de l'onglet Fichier Client)
Dim TP As Variant 'déclare la variable TTPS (Tableau de l'onglet Publispostage)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set TPS = Worksheets("tri par sociéte") 'définit l'onglet TPS
Set FC = Worksheets("fichier client") 'définit l'onglet FC
Set P = Worksheets("pubipostage") 'définit l'onglet P
TTPS = TPS.Range("A1").CurrentRegion 'définit le tableau TTPS
TFC = FC.Range("A1").CurrentRegion 'définit le tableau TFC
TP = P.Range("A1").CurrentRegion 'définit le tableau TP
TPS.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données de l'onglet TPS
K = 1 'initialise la variable K
For I = 2 To UBound(TFC, 1) 'boucle 1 : sur toutes les lignes I du tableau TTPS (en partant de la seconde)
    ReDim Preserve TL(1 To 11, 1 To K) 'redimensionne le tableau des lignes TL (11 lignes, K colonnes)
    For J = 2 To 12 'boucle 2 : sur 11 colonnes (de 2 à 12)
        Select Case J 'agit en fonction de la colonne J
            'récupère dans la ligne J-1 de TL
            Case 9, 10 'colonnes 9 et 10
                'si la donnée ligne I colonne J de TFC est vide, récupère du vide, sinon récupère la date convertie en entier long
                TL(J - 1, K) = IIf(TFC(I, J) = "", "", CLng(DateSerial(Year(TFC(I, J)), Month(TFC(I, J)), Day(TFC(I, J)))))
            Case Else 'autre colonne
                TL(J - 1, K) = TFC(I, J) 'récupère la valeur de la donnée ligne I colonne J de TFC
        End Select 'fin de l'action en fonction de la colonne J
    Next J 'prochaine colonne de la boucle 2
    K = K + 1 'incrémente K
Next I 'prochaine ligne de la boucle 1
'renvoie dans A2 redimensionnée de l'onglet TPS, le tableau TL transposé
TPS.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
TPS.Range("A1").CurrentRegion.Sort key1:=TPS.Range("C1"), order1:=xlAscending, Header:=xlYes 'tri par Société
TTPS = TPS.Range("A1").CurrentRegion 'redéfinit le tableeau TTPS
For I = 2 To UBound(TTPS, 1) 'boucle 1 : sur toutes les lignes I du tableau TTPS (en partant de la seconde)
    For J = 2 To UBound(TP, 1) 'boucle 2 : sur toutes les lignes I du tableau TP (en partant de la seconde)
        ' si le nom et le prénom coïncident, renvoie l'adresse mail dans la cellule ligne I, colonne O de TPS, sort de la boucle 2
        If TTPS(I, 1) = TP(J, 2) And TTPS(I, 2) = TP(J, 3) Then TPS.Cells(I, "O").Value = TP(J, 5): Exit For
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
TPS.Range("L2").FormulaR1C1 = "=R1C16-RC[-3]" 'formule colonne L
TPS.Range("L2").AutoFill TPS.Range("L2").Resize(UBound(TTPS) - 1, 1), xlFillCopy 'formule étirée
TPS.Range("M2").FormulaR1C1 = "=IF(RC[-1]>360,""perdu"",IF(RC[-1]>180,""relance"","" ""))" 'formule colonne M
TPS.Range("M2").AutoFill TPS.Range("M2").Resize(UBound(TTPS) - 1, 1), xlFillCopy 'formule étirée
TPS.Range("N2").FormulaR1C1 = "=RC[-3]/RC[-4]" 'formule colonne N
TPS.Range("N2").AutoFill TPS.Range("N2").Resize(UBound(TTPS) - 1, 1), xlFillCopy 'formule étirée
End Sub

Le fichier :

bonjour Papou, bonjour ThauThéme, bonjour à tous

manifestement ma requête manquait de précision.

je suis désolé pour Papou que j'ai lancé sur une mauvaise piste...

ThauThéme a deviné quel était mon problème, j'ai testè ta macro qui répond exactement à ma demande.

je ne comprends pas tout mais je vais essayer de comprendre comment tu as fais (merci le confinement)

grand merci à tous ceux qui ont pris le temps de lire mon sujet

un énorme merci à vous qui avez répondu

et encore toutes mes excuse pour le manque de clarté de ma question

bonne journée à tout le monde

prenez soin de vous

Re Bonjour FrancoisM Robert le forum

je vais super bien, mais comme les autres coincé chez moi!!

Pour le résultat souhaité, bah oui j'avais pas compris !!!

alors je suis parti sur une mauvaise piste.

Mais Robert lui avait tout compris, c'est l’essentiel

a+

Papou

Rechercher des sujets similaires à "recherchev macros"