Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA ou formule trouver texte dans colonnes de différentes pages

  • Initiateur de la discussion Initiateur de la discussion sandvln
  • Date de début Date de début

sandvln

XLDnaute Nouveau
Bonjour,

C'est la première fois que je poste sur un forum. J'espère que mes questions seront claires.

J'ai 5 onglets: syndic, pro, particulier, pompes et ma base
Je souhaite que la formule soit dans la colonne A de l'onglet base: le but est de chercher les mots de la colonne G (onglet base) dans les colonnes Q de l'onglet syndic, pro, particulier, pompes et de mettre "CE" quand le mot est présent dans une des colonnes Q de chaque onglet, sinon mettre "PAS CE". Petite particularité, il peut y avoir le même mot présent dans la colonne Q de l'onglet syndic et pompes mais s'il est présent dans l'un ou l'autre, je souhaite toujours avoir "CE" dans la colonne A de l'onglet base

Merci pour votre aide
 

Pièces jointes

  • TEST QUESTION.xlsx
    26.8 KB · Affichages: 13

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

A tester :
=SI(SIERREUR(EQUIV(G2;SYNDIC!Q:Q;0);SIERREUR(EQUIV(G2;PRO!Q:Q;0);SIERREUR(EQUIV(G2;PARTICULIER!Q:Q;0);SIERREUR(EQUIV(G2;POMPES!Q:Q;0);0))))=0;"PAS CE";"CE")

Mais vous devriez limiter vos plage de recherche en évitant les colonnes entières.

Cordialement
 

Pièces jointes

  • TEST QUESTION.xlsx
    25 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour sandvin, Roblochon,

Code:
=REPT("PAS ";NON(NB(SYNDIC!Q:Q;G2)+NB.SI(PRO!Q:Q;G2)+NB.SI(PARTICULIER!Q:Q;G2)+NB.SI(POMPES!Q:Q;G2)))&"CE"
Limiter les plages n'apporte pas grand-chose en terme de rapidité, c'est à mon avis inutile.

Noter que la fonction REPT "pèse" moins lourd en mémoire que la fonction SI.

A+
 

Pièces jointes

  • TEST QUESTION(1).xlsx
    19.3 KB · Affichages: 4

job75

XLDnaute Barbatruc
Toujours un commentaire 'savant' à faire... même sur les recommandations microsoft
J'espère que ceci te convaincra :
VB:
Sub Limitée()
Dim t, n
Application.ScreenUpdating = False
t = Timer
With [C2]
    For n = 1 To 30000
        .Formula = "=COUNTIF(A1:A3,1)"
    Next
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \sec")
End Sub

Sub Non_limitée()
Dim t, n
t = Timer
Application.ScreenUpdating = False
With [D2]
    For n = 1 To 30000
        .Formula = "=COUNTIF(A:A,1)"
    Next
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \sec")
End Sub
Les recommandations de Microsoft sont parfois erronées.
 

Pièces jointes

  • Limitée(1).xlsm
    17.1 KB · Affichages: 8

job75

XLDnaute Barbatruc
Par contre la limitation est utile sur de petites plages quand le UsedRange est grand.

Voyez ce fichier (2) avec 180 000 lignes occupées.
 

Pièces jointes

  • Limitée(2).xlsm
    974.3 KB · Affichages: 6

Discussions similaires

  • Question Question
Microsoft 365 Dernière donnée
Réponses
5
Affichages
455
Réponses
5
Affichages
255
Réponses
11
Affichages
291
  • Question Question
Réponses
2
Affichages
239
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…