XL 2010 Google script Recherche et select

Temjeh

XLDnaute Accro
Supporter XLD
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
 

job75

XLDnaute Barbatruc
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:

Temjeh

XLDnaute Accro
Supporter XLD
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
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

Discussions similaires

  • Question
Microsoft 365 VBA -> Sheet
Réponses
0
Affichages
503

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 887
dernier inscrit
MarcVeretz