Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sélection SpecialCells(xlCellTypeBlanks)

10 réponses
Avatar
Laurent Daures
bonjour à tous,

est-il possible de sélectionner des cellules contenant une certaine valeur
avec cette fonction SpecialCells(xlCellTypeBlanks)
Ce que j'aimerais obtenir c'est par exemple SpecialCells("=zaza").select

Merci à vous
Siesting Hoax

10 réponses

Avatar
michdenis
Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------

--
MichD
--------------------------------------------


"Laurent Daures" a écrit dans le message de groupe de discussion :
4cb1cecc$0$32431$
bonjour à tous,

est-il possible de sélectionner des cellules contenant une certaine valeur
avec cette fonction SpecialCells(xlCellTypeBlanks)
Ce que j'aimerais obtenir c'est par exemple SpecialCells("=zaza").select

Merci à vous
Siesting Hoax
Avatar
DanielCo
Bonjour.
Il me semble qu'en utilisant "Union", on s'affranchit de cette limite.
Cordialement.
Daniel


Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------
Avatar
michdenis
Bonjour Daniel,

Ce que tu énonces est vrai. Le seul hic, c'est le temps de
traitement s'accroît au fur et à mesure que la plage grandit.

Je n'ai pas fait de test particulier dans ce cas...
attendons que le demandeur précise son besoin !

--
MichD
--------------------------------------------


"DanielCo" a écrit dans le message de groupe de discussion : i8sqh1$onv$
Bonjour.
Il me semble qu'en utilisant "Union", on s'affranchit de cette limite.
Cordialement.
Daniel


Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------
Avatar
Laurent Daures
Merci Denis,
c'est bien ce que je pensais.
La définition d'une plage par macro est limitée effectivement.
Pour sélectionner des cellules vides, c'est instantanné avec SpecialCells.
Mon problème était de trouver toutes les cellules contenant une chaine de
caractères et de les remplacer par le nombre 1.
Je vais donc utiliser ta macro en partie pour faire une recherche rapide des
cellules.
Ensuite, je leur donne la valeur 1.

Merci encore
Amicalement
Laurent



"michdenis" a écrit dans le message de news:
i8snfk$hqd$
Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------

--
MichD
--------------------------------------------


"Laurent Daures" a écrit dans le message de
groupe de discussion :
4cb1cecc$0$32431$
bonjour à tous,

est-il possible de sélectionner des cellules contenant une certaine valeur
avec cette fonction SpecialCells(xlCellTypeBlanks)
Ce que j'aimerais obtenir c'est par exemple SpecialCells("=zaza").select

Merci à vous
Siesting Hoax

Avatar
Laurent Daures
rebonjour,
afin d'alléger le temps de traitement de la macro, j'ai limité la plage
sélectionnée à 27 cellules (sans utiliser union)
cela marche pas mal !
Voici la macro
en fait je lui fais faire la recherche sur 4 lignes à la fois, pas plus,
cela me semble rapide puisque de 30 secondes, je passe à 4 secondes pour
l'ensemble de l'opération, ce qui semble acceptable.

si vous voulez vous amuser à inscrire plein de fois QL dans des cellules,
dans la feuille, cela vous les remplace par 1.
J'ai limité à 27 la boucle, pour ne pas dépasser les 255 caractères dans la
définition de la plage.
Certes, comme dit DanielCo, Union s'en afranchit, mais j'avais commencé ma
macro, je testerai avec Union aussi.

Sub Remplace_QL()
On Error Resume Next
z = 4
compteur = 0
For i = 4 To 150 Step 4
recherche = Range("B" & z & ":go" & i + 4).Address
z = z + 5
For Each cell In Range(recherche)
If Left(cell, 2) = "QL" Then
compteur = compteur + 1
plage = plage & "," & cell.Address
If compteur = 27 Then
plage = Right(plage, Len(plage) - 1)
Range(plage).Select
Range(plage) = 1 '.Select
plage = ""
compteur = 0
End If
End If
Next
Next
End Sub

Voilà,
merci à vous
Amicalement
Laurent
"michdenis" a écrit dans le message de news:
i8sr0q$pq4$
Bonjour Daniel,

Ce que tu énonces est vrai. Le seul hic, c'est le temps de
traitement s'accroît au fur et à mesure que la plage grandit.

Je n'ai pas fait de test particulier dans ce cas...
attendons que le demandeur précise son besoin !

--
MichD
--------------------------------------------


"DanielCo" a écrit dans le message de groupe de
discussion : i8sqh1$onv$
Bonjour.
Il me semble qu'en utilisant "Union", on s'affranchit de cette limite.
Cordialement.
Daniel


Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------



Avatar
Laurent Daures
je voulais préciser qu'il est inutile de sélectionner les cellules, j'avais
mis ça pour vérifier que ma plage était bien définie.
Sub Remplace_QL()
On Error Resume Next
z = 4
compteur = 0
For i = 4 To 150 Step 4
recherche = Range("B" & z & ":go" & i + 4).Address
z = z + 5
For Each cell In Range(recherche)
If Left(cell, 2) = "QL" Then
compteur = compteur + 1
plage = plage & "," & cell.Address
If compteur = 27 Then
plage = Right(plage, Len(plage) - 1)
' Range(plage).Select
Range(plage) = 1 '.Select
plage = ""
compteur = 0
End If
End If
Next
Next
End Sub
Là on passe à 2 secondes, pas mal !
Laurent
"Laurent Daures" a écrit dans le message de news:
4cb21204$0$32462$
rebonjour,
afin d'alléger le temps de traitement de la macro, j'ai limité la plage
sélectionnée à 27 cellules (sans utiliser union)
cela marche pas mal !
Voici la macro
en fait je lui fais faire la recherche sur 4 lignes à la fois, pas plus,
cela me semble rapide puisque de 30 secondes, je passe à 4 secondes pour
l'ensemble de l'opération, ce qui semble acceptable.

si vous voulez vous amuser à inscrire plein de fois QL dans des cellules,
dans la feuille, cela vous les remplace par 1.
J'ai limité à 27 la boucle, pour ne pas dépasser les 255 caractères dans
la définition de la plage.
Certes, comme dit DanielCo, Union s'en afranchit, mais j'avais commencé ma
macro, je testerai avec Union aussi.

Sub Remplace_QL()
On Error Resume Next
z = 4
compteur = 0
For i = 4 To 150 Step 4
recherche = Range("B" & z & ":go" & i + 4).Address
z = z + 5
For Each cell In Range(recherche)
If Left(cell, 2) = "QL" Then
compteur = compteur + 1
plage = plage & "," & cell.Address
If compteur = 27 Then
plage = Right(plage, Len(plage) - 1)
Range(plage).Select
Range(plage) = 1 '.Select
plage = ""
compteur = 0
End If
End If
Next
Next
End Sub

Voilà,
merci à vous
Amicalement
Laurent
"michdenis" a écrit dans le message de news:
i8sr0q$pq4$
Bonjour Daniel,

Ce que tu énonces est vrai. Le seul hic, c'est le temps de
traitement s'accroît au fur et à mesure que la plage grandit.

Je n'ai pas fait de test particulier dans ce cas...
attendons que le demandeur précise son besoin !

--
MichD
--------------------------------------------


"DanielCo" a écrit dans le message de groupe de
discussion : i8sqh1$onv$
Bonjour.
Il me semble qu'en utilisant "Union", on s'affranchit de cette limite.
Cordialement.
Daniel


Bonjour,

La réponse à ta question est non.

Tu pourrais utiliser une macro de ce genre :
La macro suivante à une restriction... la variable
plage ne doit pas contenir une chaîne de caractères
de plus de 255 caractères. Tu peux utiliser "Address(0,0)
pour utiliser des adresses relatives...Conséquemment tu
es un peu limité par l'étendue de la plage à sélectionner !


'-----------------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Cherche As String
Dim Sh As Worksheet

'******Variables à définir*************
Cherche = "zaza"
Set Sh = Worksheets("Feuil1")
'***************************************

With Sh
Set Rg = .Range("A1:G25") 'Plages à définir
End With

With Rg
Set Trouve = .Find(Cherche, LookIn:=xlValues, lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
plage = plage & Trouve.Address & ","
Set Trouve = .FindNext(Trouve)

Loop While Trouve.Address <> Adr
plage = "" & Left(plage, Len(plage) - 1) & ""
Feuil1.Range(plage).Select
End If
End With
End Sub
'------------------------------







Avatar
news.free.fr
Bonsoir.
Essaie :
Selection.Replace "QL*", 1, xlWhole, , True
Cordialement.
Daniel
Avatar
Laurent Daures
génial !
Et ultra rapide :-))
deux lignes ont remplacé une longue macro compliquée.
Merci Daniel !
Amicalement
Siesting Hoax
"news.free.fr" a écrit dans le message de news:
i8t96v$ug$
Bonsoir.
Essaie :
Selection.Replace "QL*", 1, xlWhole, , True
Cordialement.
Daniel


Avatar
Jacquouille
Un grand salut de Liège au Beau Marseillais.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"Laurent Daures" a écrit dans le message de news:
4cb1cecc$0$32431$
bonjour à tous,

est-il possible de sélectionner des cellules contenant une certaine valeur
avec cette fonction SpecialCells(xlCellTypeBlanks)
Ce que j'aimerais obtenir c'est par exemple SpecialCells("=zaza").select

Merci à vous
Siesting Hoax

Avatar
Laurent Daures
merci
et bonjour du sud (sous la pluie ces jours-ci) à tous nos amis belges et
francophones.
;-)
Amicalement
Siesting Hoax
"Jacquouille" a écrit dans le message de
news: 4cb300c9$0$14260$
Un grand salut de Liège au Beau Marseillais.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"Laurent Daures" a écrit dans le message de
news: 4cb1cecc$0$32431$
bonjour à tous,

est-il possible de sélectionner des cellules contenant une certaine
valeur avec cette fonction SpecialCells(xlCellTypeBlanks)
Ce que j'aimerais obtenir c'est par exemple SpecialCells("=zaza").select

Merci à vous
Siesting Hoax