vlookup et doublons [résolu]

kraenys

XLDnaute Junior
Bonjour le forum,

Je vous expose mon problème sous excel 2007.

Je dois faire une macro qui écrit dans la colone Z soit "effacer la ligne en relation", soit "effacer cette ligne", soit "conserver cette ligne" en suivant la règle écrite dans la case Z1.

Or, un problème m'arrive, je ne parviens pas à faire fonctionner une de ces conditions. (prenons la ligne 67 pour exemple.) V67 <> "-" donc on vérifie si on trouve un doublon dans toute la colone W. Si il y a un doublon, on doit vérifier si la case U67 vaut CRED ou CRBY. Or, ici il n'y a pas de doublons (la colone Y vérifie ces doublons avec la formule rechercheV). On est donc supposé écrire en Z67 "conserver cette ligne", ce n'est pas le cas.

Tout ceci semble très flou sans document, c'est pourquoi je joins le fichier excel en question. La macro en question est dans le module 2 et s'appele PMID_PMRQ.

Merci de votre aide pour faire fonctionner cette macro. Il ne doit pas me manquer grand chose, mais ce quelquechose me pose problème depuis plusieurs jours..

Kraenys
 

Pièces jointes

  • XLD.xlsm
    155.5 KB · Affichages: 56
  • XLD.xlsm
    155.5 KB · Affichages: 56
  • XLD.xlsm
    155.5 KB · Affichages: 60
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : vlookup et doublons

Bonjour.

Vous ne pouvez pas mettre des bouts d'expressions VBA entre [], ça n'a pas de sens pour Excel, à qui l'on demande ainsi d'interpréter le texte exactement tel qu'il est spécifié entre les crochets.
Mais pourquoi ne faites vous pas comme ça tout simplement :
VB:
Sub PMID_PMRQ()
With ActiveSheet.[Z2:Z1010]
   .FormulaR1C1 = "=IF(ISNA(MATCH(RC22,R2C23:R1010C23,0)),""Conserver la ligne""," _
      & "IF(RC21=""CRBY"",""Effacer cette ligne""," _
      & "IF(RC21=""CRED"",""Effacer ligne de PMRQ en relation"",""Conserver la ligne"")))"
   .Value = .Value ' Fige le résultat. Heu… pourquoi d'ailleurs ?
   End With
End Sub
 

kraenys

XLDnaute Junior
Re : vlookup et doublons

Bonjour Dranreb,

La solution que vous proposez est juste parfaite. Rapide d'exécution et correspond à ce que je recherchais.

J'ai eu pas mal de difficultés avec cette ligne de code:
.FormulaR1C1 = "=IF(ISNA(MATCH(RC22,R2C23:R1010C23,0)),""Conserver la ligne"","

Je n'ai pas réussi à la rendre fonctionnelle, problème de syntaxe depuis plusieurs jours dejà... Du coup, j'ai essayé de compenser par du "cas par cas" en me servant des colones U, V, W et même Y... bien trop usine à gaz inutile pour le traitement de cette requête, il faut bien l'avouer.

Merci beaucoup pour cette solution juste excellente!

Kraenys
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : vlookup et doublons [résolu]

Version Nombre de lignes variable :
VB:
Sub PMID_PMRQ()
Dim DerLig As Long
DerLig = ActiveSheet.UsedRange.Rows.Count
With ActiveSheet.[Z2].Resize(DerLig - 1)
   .FormulaR1C1 = "=IF(ISNA(MATCH(RC22,R2C23:R" & DerLig & "C23,0)),""Conserver la ligne""," _
      & "IF(RC21=""CRBY"",""Effacer cette ligne""," _
      & "IF(RC21=""CRED"",""Effacer ligne de PMRQ en relation"",""Conserver la ligne"")))"
   .Value = .Value ' Fige le résultat. Heu… pourquoi d'ailleurs ?
   End With
End Sub
 

kraenys

XLDnaute Junior
Re : vlookup et doublons [résolu]

Re,

J'avoue que j'en demandais pas tant, mais ce code m'intéresse énormément.

Juste une petite explication quant à la définition de DerLig.

ActiveSheet.UsedRange.Rows.Count

Cette ligne permet de compter le nombre de ligne sur la feuille active, c'est bien celà?
Comme ça, à partir de cette variable on peut remplacer le With ActiveSheet.[Z2:Z1010] fixe par With ActiveSheet.[Z2].Resize(DerLig - 1) où .Resize(DerLig - 1) remplace :Z1010
Afin de traiter des cas différents en terme de lignes, ais-je bien compris?

Encore merci pour tout.

Kraenys
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : vlookup et doublons [résolu]

ActiveSheet.UsedRange.Rows.Count
Ça se lit de droite à gauche en somme: le nombre de lignes de la plage utilisée dans la feuille active
Et plage qui nous intéresse comporte une ligne de moins puisqu'elle commence à la 2.
Oui, Resize est une voie bien pratique pour définir la taille d'une expression Range, aussi bien colonnes qu'en lignes, d'ailleurs.
 

Discussions similaires

Réponses
10
Affichages
860

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal