XL 2010 Google script Recherche et select

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Temjeh

XLDnaute Accro
Bonjour et merci de votre temps

J'ai fait une feuille de calcul sur google sheet.
Mais les macros ne sont pas permis mais juste des fonctions dans l'éditeur de script.

Avez-vous une idée d'une fonction cherche la valeur en C6 et sélectionne la cellule.
Pour ne pas que la fonction sélectionne C6 on peut partir la recherche à partir de la collonne D

function rech() {
...
}

But: J'ai plus de 400 colonnes et c'est pas très pratique avec la barre de défilement vers la droite.

Merci beaucoup

Temjeh
 
Bonjour Temjeh, Bruno,

Une fonction ne peut rien sélectionner mais elle peut renvoyer une adresse de cellule :
Code:
Function ChercheAdresse1$(c As Range)
Application.Volatile
Set c = c.Parent.Cells.Find(c, c, xlValues, xlWhole, xlByRows) 'ou xlByColumns
If c <> "" Then ChercheAdresse1 = c.Address(0, 0)
End Function
Mais cette 1ère fonction ne peut pas tout trouver, par exemple des dates.

Dans ce cas utiliser cette 2ème fonction, plus générale :
Code:
Function ChercheAdresse2$(c As Range)
Application.Volatile
If c = "" Then Exit Function
Dim r As Range, x, a$, ac$
Set r = c.Parent.UsedRange
x = c
a = c.Address:
If Application.Caller.Parent.Name = c.Parent.Name Then ac = Application.Caller.Address
For Each r In r
  If r.Address <> a And r.Address <> ac Then If r = x Then _
    ChercheAdresse2 = r.Address(0, 0): Exit Function
Next
End Function
Edit : j'ai rendu les 2 fonctions volatiles.

A+
 
Dernière édition:
Parfait

Je cherche juste des no de 1 à 278

Mais ces chiffres sont sur 1 colonne sur 3

Je me suis fait cette fonction qui sélectionne la colonne en ajoutant X3 au chiffre en C6

var ss = SpreadsheetApp.getActiveSpreadsheet();
var d = 3+ss.getRange("C6").getValue()*3;

function rech() {
var sheet = ss.getSheets()[0];
var range = sheet.getRange(1,d).activate();
}

Le problème c'est que j'ai juste un chiffre qui a un B (224B), donc du texte

Comment je pourrais lui dire si C6 = 224b selectionne la colonne BZ

Merci de ton temps
 
Re,

Ce n'était pas parfait, le test If Not c Is Nothing Then était inutile.

Et j'ai rendu les 2 fonctions volatiles pour qu'elles se recalculent si on modifie le tableau.

Maintenant si vous voulez rechercher des nombres, éventuellement suivis d'un texte :
Code:
Function ChercheAdresse1$(c As Range)
Application.Volatile
If Not IsNumeric(CStr(c)) Then Exit Function
Set c = c.Parent.Cells.Find(c & "*", c, xlValues, xlWhole, xlByRows) 'ou xlByColumns
ChercheAdresse1 = c.Address(0, 0)
End Function
A+
 
Re,

Si vous voulez faire la recherche dans une colonne sur 3 utilisez la 2ème fonction adaptée :
Code:
Function ChercheAdresse2$(c As Range)
Application.Volatile
If c = "" Then Exit Function
Dim r As Range, nlig&, x$, a$, ac$, coldeb%, j%, i&
Set r = c.Parent.UsedRange
nlig = r.Rows.Count
x = c & "*"
a = c.Address
If Application.Caller.Parent.Name = c.Parent.Name Then ac = Application.Caller.Address
coldeb = 1 'ou 2 ou 3 etc..., à adapter
For j = coldeb To r.Columns.Count Step 3 'une colonne sur 3
  For i = 1 To nlig
    If r(i, j).Address <> a And r(i, j).Address <> ac Then If r(i, j) Like x Then _
      ChercheAdresse2 = r(i, j).Address(0, 0): Exit Function
Next i, j
End Function
A+
 
Re,

Si la valeur recherchée et la formule de recherche sont en dehors de la zone de recherche on peut utiliser un tableau VBA.

Comme cette fonction testée sur la zone de recherche D1:OM5000 (400 colonnes x 5000 lignes) :
Code:
Function ChercheAdresse2$(c As Range)
Application.Volatile
Dim r As Range, nlig&, t, x$, coldeb%, j%, i&
With c.Parent
  Set r = Intersect(.UsedRange, .Columns(4).Resize(, .Columns.Count - 3)) 'colonnes A:C exclues
End With
If c = "" Or r Is Nothing Then Exit Function
nlig = r.Rows.Count
t = Union(r, r(2)) 'au moins 2 éléments
x = c & "*"
coldeb = 1 'ou 2 ou 3 etc..., à adapter
For j = coldeb To r.Columns.Count Step 3 'une colonne sur 3
  For i = 1 To nlig
    If t(i, j) Like x Then ChercheAdresse2 = r(i, j).Address(0, 0): Exit Function
Next i, j
End Function
J'ai mis la valeur cherchée en C6 et la formule en C7, la valeur trouvée est dans la dernière cellule (OM5000).

Chez moi (Win 10 - Excel 2013) la fonction se calcule en 1,16 seconde, c'est acceptable.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour