XL 2016 Sélectionner les cellules contenant deux suites de lettres

PETIT YANNICK

XLDnaute Occasionnel
Bonjour,

Je cherche a sélectionner dans mon exemple joint toutes les cellules contenants l'abréviation DET ou MON.
C'est un tableau qui est copier coller par plusieurs utilisateurs et coller dans un autre fichier.
jamais coller au meme endroit en colonne B A D...suivant l'humeur des utilisateurs


Je ne vois pas comment procéder pour toutes les cellules contenants l'abréviation DET ou MON sur un tableau qui change de position.

Quelqu'un aurait une idée?

Merci d'avance
 

Pièces jointes

  • Quote-CNC-BDM2020011405.xls
    41.5 KB · Affichages: 19
Solution
Voici la macro pour sélectionner comme indiqué au post #15 :
VB:
Sub Selectionner()
Dim crit1$, crit2, ncol%, c As Range, sel As Range
crit1 = "DET" 'à adapter
crit2 = "MON" 'à adapter
ncol = 9 'à adapter
Set c = Cells.Find(crit1, , xlValues, xlPart)
If c Is Nothing Then Set c = Cells.Find(crit2)
If c Is Nothing Then Exit Sub
For Each c In Intersect(c.EntireColumn, ActiveSheet.UsedRange)
    If InStr(CStr(c), crit1) + InStr(CStr(c), crit2) Then _
        Set sel = Union(IIf(sel Is Nothing, c.Resize(, ncol), sel), c.Resize(, ncol))
Next
If Not sel Is Nothing Then sel.Select
End Sub
Nota : la casse est respectée.

Et SVP répondez : pourquoi sélectionner ???

goube

XLDnaute Impliqué
Bonsoir,

Une proposition qui ne fonctionne que si DET ou MON sont toujours en début de cellule et une seule fois par ligne. pour la formule de calcul.
Sinon la MFC fonctionne quelque soit le nombre de fois.
Cordialement.
 

Pièces jointes

  • Quote-CNC-BDM2020011405.xls
    43 KB · Affichages: 11

GALOUGALOU

XLDnaute Accro
bonjour petit yannick
ma solution fonctionne à l'identique de Goube, même contrainte
formule
=SI(NB.SI(A4:K4;"DET*")=1;"VRAI";SI(NB.SI(A4:K4;"MON*")=1;"VRAI"))

j'y rajoute un filtre automatique
cordialement
galougalou
 

Pièces jointes

  • Copie de Quote-CNC-BDM2020011405.V2.xls
    47.5 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonsoir PETIT YANNICK, goube, GALOUGALOU,

Placez cette macro où vous voulez et exécutez-la :
VB:
Sub MFC()
Dim crit1$, crit2$, ac As Range, f$
crit1 = "DET" 'à adapter
crit2 = "MON" 'à adapter
ThisWorkbook.Names.Add "Crit1", crit1 'nom défini
ThisWorkbook.Names.Add "Crit2", crit2 'nom défini
Cells.FormatConditions.Delete 'RAZ
Set ac = ActiveCell 'mémorise
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
    .Select 'nécessaire sur les versions antérieures à Excel 2007
    f = .Cells(1).Formula 'mémorise
    .Cells(1).FormulaR1C1 = "=ISNUMBER(SEARCH(Crit1,RC))+ISNUMBER(SEARCH(Crit2,RC))"
    .FormatConditions.Add xlExpression, Formula1:=.Cells(1).FormulaLocal
    .FormatConditions(1).Interior.ColorIndex = 44 'orange
    .Cells(1) = f
End With
ac.Select
End Sub
Comme indiqué c'est la feuille active qui est traitée : les cellules répondant aux critères sont colorées.

PS : si l'on veut que la casse soit respectée remplacer SEARCH par FIND

A+
 

Dudu2

XLDnaute Barbatruc
Bonjour,
S'il ne s'agit que de sélectionner les cellules, voici une macro à exécuter selon les besoins.
VB:
Sub SelectMONDET()
    Dim Selection As Range
    Dim Cell As Range
    
    For Each Cell In ActiveSheet.UsedRange
        If VarType(Cell) = vbString Then
            If Left(Cell.Value, 3) = "MON" _
            Or Left(Cell.Value, 3) = "DET" _
            Then
                If Selection Is Nothing _
                Then Set Selection = Cell _
                Else Set Selection = Union(Selection, Cell)
            End If
        End If
    Next Cell
    
    Selection.Select
End Sub
D.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut Dudu2,

Pour tester j'ai copié-collé les lignes 3:12 sur 65000 lignes.

Avec le nouveau tableau l'exécution de ma macro est instantanée.

Effacez la MFC et exécutez la macro de Dudu2... Moi j'en suis sorti par le Gestionnaire des tâches…

A+
 

Dudu2

XLDnaute Barbatruc
Bonsoir Job,
Dans sa demande initiale PETIT YANNICK demande de sélectionner (Je cherche a sélectionner dans mon exemple joint toutes les cellules ...). Sauf s'il utilise le terme "sélectionner" mal à propos, mais là...

Si elle permet de visualiser, une MFC ne fait pas de sélection.

Évidemment, si la feuille est énorme, d'une part le scan des cellules à sélectionner va prendre du temps, d'autre part la sélection risque d'atteindre ses limites.

De la même façon, j'imagine mal sélectionner manuellement les cellules colorisées par une MFC sur 65000 lignes !
D.

Edit: Pour améliorer considérablement la performance du scan des cellules, il suffirait de les charger en tableau (T = ActiveSheet.UsedRange.Value). Si c'est nécessaire...
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour,

Tu as raison et ça m'a appris quelque chose, et alerté sur une situation que je ne traitais pas !

Le fait d'introduire un #REF! en résultat de formule (conséquence ici du remplacement de Quantity par un DETxxx) fait qu'on ne peut pas tester le Cell.Value de la cellule en #REF! (ou #VALEUR! ou #N/A!) car Excel génère alors une erreur 13 d'incompatibilité de type.
Pour parer cette situation il faut d'abord tester le VarType(Cell) <> vbError.

Ici, comme on cherche dans les cellules une chaine de caractère j'ai corrigé dans le code du message #5 en ajoutant un test sur le VarType(Cell) = vbString ce qui élimine d'office le cas vbError.

Merci pour cette info.
Cordialement,
D.

Edit: pour info ici tous les VarTypes:
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Je suis curieux de savoir PETIT YANNICK ce que vous voulez faire avec vos cellules sélectionnées.

S'il s'agit de les modifier ou de les effacer toutes en bloc il vaut mieux le faire dans la macro, en utilisant un tableau VBA ce qui est très rapide.

A+
 

PETIT YANNICK

XLDnaute Occasionnel
Bonjour job75

Ce tableau est copier par divers utilisateurs et coller dans un autre fichier qui traite des mises en formes.
Il n'est jamais copier coller correctement .
je souhaites sélectionner toutes les cellules contenant DET ou MON et sélectionner les 7 colonnes suivantes.


Voici la sélection que je souhaite automatiser

Nombre de ligne tous le temps différent nombre de colonne toujours identique

1580473122353.png
 

Discussions similaires

Réponses
4
Affichages
339

Statistiques des forums

Discussions
312 108
Messages
2 085 361
Membres
102 874
dernier inscrit
Petro2611