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

XL 2013 VBA_Trouver première valeur à droite

a_loic

XLDnaute Junior
Bonjour,

Je viens de chercher partout et je ne trouve pas ma solution

J'ai actuellement dans un code VBA ceci :

Code:
jour = F2.Range("O20")

Sauf que ceci fonctionne une fois sur 2 car la date a tendance à ne pas se trouver toujours au même emplacement.

Mon idée est donc la suivante :

1. je recherche la valeur "de:" (elle n'est présente qu'une fois sur le document)
2. je récupère la première valeur située à droite de "de:"
3. donc ca donne "jour = cette fameuse valeur"


Pensez vous pouvoir m'aider?

Merci d'avance à tous,
Excellente journée,
Loic
 

a_loic

XLDnaute Junior
Bonjour,

Merci pour ta réponse

J'ai deux questions :

1. A quoi correspond le "B1" . value ?

2. (j'ai honte d ene pas savoir) comment puis je intégrer une fonction dans une macro de type "sub" car la partie que je cite se trouve en plein milieu d'une macro très longue...


Encore merci,
Excellente journée,
Loic
 

Iznogood1

XLDnaute Impliqué
1/ "B1" signifie première cellule à droite.

C'est équivalent à
jour = r.Offset(0,1).Value


2/ Dans ton module, tu auras quelque chose comme ça
Code:
Function jour()
  Dim r As Range
  Set r = Cells.Find("de:")
  If Not r Is Nothing Then jour = r.Range("B1").Value
End Function
 
Sub MacroTresLongue()
...
...
  Dim j as variant
  j = jour()
 If IsEmpty(j) Then MsgBox "Jour introuvable"
... 
...
End Sub
 

a_loic

XLDnaute Junior
Re

Je comprends mieux pour placer le code

Mon seul problème est que la valeur à trouver à droite de "de:" ne se trouve pas toujours à la même distance.
Ce peut être +1 comme +5...

C'est la dessus que je bloque

Merci a toi,

Bonne journée,
Loic
 

Iznogood1

XLDnaute Impliqué
S'il n'y a rien entre "de:" et la cellule contenant le jour, la fonction devient
Code:
Function jour()
  Dim r As Range
  Dim s As Range
  Set r = Cells.Find("de:")
  If Not r Is Nothing Then jour = r.End(xlToRight).Value
End Function
 

a_loic

XLDnaute Junior
Re

Merci pour tes réponses et ta réactivité...

J'ai dû mal comprendre un truc car j'ai un message d'erreur...

Voilà en gros à quoi ca ressemble :

Code:
Function jour()
  Dim r As Range
  Dim s As Range
  Set r = Cells.Find("de:")
  If Not r Is Nothing Then jour = r.End(xlToRight).Value
 End Function
 
Option Explicit
 Option Compare Text

 Sub ImportRecap()
  Dim objOuvrir As FileDialog

....etc...

Et plus loin j'ai mis :

Code:
  dl = dl + 1
  F1.Cells(dl, 1) = jour()

...etc...

Vois tu où se trouve mon erreur?

Encore merci,

Très bonne journée,
Loic
 

Iznogood1

XLDnaute Impliqué
0/Quel est le message d'erreur ?

1/ Option Compare Text et Option Explicit doivent être avant toute autre déclaration
(je pense que l'erreur vient de là)

2/ C'est quoi F1 (je suppose que c'est le "codename" de la feuille ?

3/ F1.Cells(dl,1) = ... peut fonctionner, mais on préférera F1.Cells(dl,1).Value = ...
Qu'attends-tu de F1.Cells(dl,1) = jour() ?


Je pencherais plutôt vers un code comme celui là :
Code:
Option Explicit
Option Compare Text

Function jour()
  Dim r As Range
  Dim s As Range
  jour = "Jour non touvé"
  Set r = Cells.Find("de:")
  If Not r Is Nothing Then jour = r.End(xlToRight).Value
End Function

Sub ImportRecap()
  ...
  dl = dl + 1
  F1.Cells(dl, 1).value = jour()
...
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…