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

Gestion des Précédents d'une formule

5 réponses
Avatar
Vincnet.
Bonjour à tou(te)s,
Je bloque sur un point technique peut-être sans solution. Il s'agit de
tester si une formule fait référence à des cellules situées dans certaines
feuilles d'un classeur (y compris la feuille de la formule testée). Ensuite,
si la formule fait référence à des cellules situées dans 3-4 feuilles
précises, je colle en valeur, sinon, je colle la formule.
J'ai régardé du côté de .DirectPrecedents et .Precedents, mais apparemment,
ces deux méthodes ne permettent que de lister les précédents situés dans la
feuille et non l'ensemble des précédents.
Ai-je une alternative ?
Merci d'avance !

--
A+

V.

5 réponses

Avatar
Charabeuh
Bjr,

Une piste:

Tu prépares ta feuille cible (exemple Feuil1) avec les références aux autres
feuilles.
Quand feuil1 est OK, tu lances le sous-pgme "CopieParValeur" (voir
ci-dessous)

"CopieParValeur devra être recopié dans un module.

Il faudra modifier les deux constantes
1) FeuillesRecherche et 2) FeuilleCible

Voici le texte de "FeuilleCible" à recopier dans un module:

'--------------- Début ------------------------
Option Explicit

Sub CopieParValeur()

'dans FeuillesRecherche indiquer les noms des feuilles
'séparés par des un crochet fermant
'pour lesquelles on transforme en valeur
'ici les formules qui réfèrent à feuil3 et Feuil4
'seront converties en valeurs
Const FeuillesRecherche = "Feuil3]Feuil4"

'Indiquez ici le nom de la feuille cible
Const FeuilleCible = "Feuil1"

'quelques variables
Dim XFeuilles, Xs As String
Dim Xcell As Object, I As Integer

XFeuilles = Split(UCase(FeuillesRecherche), "]")

Worksheets(FeuilleCible).Activate

For Each Xcell In ActiveSheet.UsedRange
Xs = UCase(Xcell.Formula) & " "
If Not (Xs = " ") Then
For I = LBound(XFeuilles) To UBound(XFeuilles)
If InStr(Xs, XFeuilles(I)) > 0 Then
Xcell.Formula = Xcell.Value
Exit For
End If
Next I
End If
Next Xcell

End Sub
'--------------- Fin ------------------------

Salut



"Vincnet." a écrit dans le message de
news:
Bonjour à tou(te)s,
Je bloque sur un point technique peut-être sans solution. Il s'agit de
tester si une formule fait référence à des cellules situées dans certaines
feuilles d'un classeur (y compris la feuille de la formule testée).
Ensuite,
si la formule fait référence à des cellules situées dans 3-4 feuilles
précises, je colle en valeur, sinon, je colle la formule.
J'ai régardé du côté de .DirectPrecedents et .Precedents, mais
apparemment,
ces deux méthodes ne permettent que de lister les précédents situés dans
la
feuille et non l'ensemble des précédents.
Ai-je une alternative ?
Merci d'avance !

--
A+

V.


Avatar
Charabeuh
remarques : J'ai supposé que tes feuilles étaient toutes dans le même
fichier .xls



"Charabeuh" a écrit dans le message de
news:%
Bjr,

Une piste:

Tu prépares ta feuille cible (exemple Feuil1) avec les références aux
autres
feuilles.
Quand feuil1 est OK, tu lances le sous-pgme "CopieParValeur" (voir
ci-dessous)

"CopieParValeur devra être recopié dans un module.

Il faudra modifier les deux constantes
1) FeuillesRecherche et 2) FeuilleCible

Voici le texte de "FeuilleCible" à recopier dans un module:

'--------------- Début ------------------------
Option Explicit

Sub CopieParValeur()

'dans FeuillesRecherche indiquer les noms des feuilles
'séparés par des un crochet fermant
'pour lesquelles on transforme en valeur
'ici les formules qui réfèrent à feuil3 et Feuil4
'seront converties en valeurs
Const FeuillesRecherche = "Feuil3]Feuil4"

'Indiquez ici le nom de la feuille cible
Const FeuilleCible = "Feuil1"

'quelques variables
Dim XFeuilles, Xs As String
Dim Xcell As Object, I As Integer

XFeuilles = Split(UCase(FeuillesRecherche), "]")

Worksheets(FeuilleCible).Activate

For Each Xcell In ActiveSheet.UsedRange
Xs = UCase(Xcell.Formula) & " "
If Not (Xs = " ") Then
For I = LBound(XFeuilles) To UBound(XFeuilles)
If InStr(Xs, XFeuilles(I)) > 0 Then
Xcell.Formula = Xcell.Value
Exit For
End If
Next I
End If
Next Xcell

End Sub
'--------------- Fin ------------------------

Salut



"Vincnet." a écrit dans le message de
news:
Bonjour à tou(te)s,
Je bloque sur un point technique peut-être sans solution. Il s'agit de
tester si une formule fait référence à des cellules situées dans
certaines
feuilles d'un classeur (y compris la feuille de la formule testée).
Ensuite,
si la formule fait référence à des cellules situées dans 3-4 feuilles
précises, je colle en valeur, sinon, je colle la formule.
J'ai régardé du côté de .DirectPrecedents et .Precedents, mais
apparemment,
ces deux méthodes ne permettent que de lister les précédents situés dans
la
feuille et non l'ensemble des précédents.
Ai-je une alternative ?
Merci d'avance !

--
A+

V.





Avatar
Vincnet.
Salut,
Super, merci beaucoup ! Je vais pouvoir adapter ça à mon cas !
A priori, reste quand même le problème des références au sein même de la
feuille, mais du coup, là, je peux utiliser la fonction Precedents... du
coup, ça baigne !
C'est le InStr qui me manquait en fait...

--
A+

V.


"Charabeuh" a écrit :

remarques : J'ai supposé que tes feuilles étaient toutes dans le même
fichier .xls



"Charabeuh" a écrit dans le message de
news:%
> Bjr,
>
> Une piste:
>
> Tu prépares ta feuille cible (exemple Feuil1) avec les références aux
> autres
> feuilles.
> Quand feuil1 est OK, tu lances le sous-pgme "CopieParValeur" (voir
> ci-dessous)
>
> "CopieParValeur devra être recopié dans un module.
>
> Il faudra modifier les deux constantes
> 1) FeuillesRecherche et 2) FeuilleCible
>
> Voici le texte de "FeuilleCible" à recopier dans un module:
>
> '--------------- Début ------------------------
> Option Explicit
>
> Sub CopieParValeur()
>
> 'dans FeuillesRecherche indiquer les noms des feuilles
> 'séparés par des un crochet fermant
> 'pour lesquelles on transforme en valeur
> 'ici les formules qui réfèrent à feuil3 et Feuil4
> 'seront converties en valeurs
> Const FeuillesRecherche = "Feuil3]Feuil4"
>
> 'Indiquez ici le nom de la feuille cible
> Const FeuilleCible = "Feuil1"
>
> 'quelques variables
> Dim XFeuilles, Xs As String
> Dim Xcell As Object, I As Integer
>
> XFeuilles = Split(UCase(FeuillesRecherche), "]")
>
> Worksheets(FeuilleCible).Activate
>
> For Each Xcell In ActiveSheet.UsedRange
> Xs = UCase(Xcell.Formula) & " "
> If Not (Xs = " ") Then
> For I = LBound(XFeuilles) To UBound(XFeuilles)
> If InStr(Xs, XFeuilles(I)) > 0 Then
> Xcell.Formula = Xcell.Value
> Exit For
> End If
> Next I
> End If
> Next Xcell
>
> End Sub
> '--------------- Fin ------------------------
>
> Salut
>
>
>
> "Vincnet." a écrit dans le message de
> news:
>> Bonjour à tou(te)s,
>> Je bloque sur un point technique peut-être sans solution. Il s'agit de
>> tester si une formule fait référence à des cellules situées dans
>> certaines
>> feuilles d'un classeur (y compris la feuille de la formule testée).
>> Ensuite,
>> si la formule fait référence à des cellules situées dans 3-4 feuilles
>> précises, je colle en valeur, sinon, je colle la formule.
>> J'ai régardé du côté de .DirectPrecedents et .Precedents, mais
>> apparemment,
>> ces deux méthodes ne permettent que de lister les précédents situés dans
>> la
>> feuille et non l'ensemble des précédents.
>> Ai-je une alternative ?
>> Merci d'avance !
>>
>> --
>> A+
>>
>> V.
>




Avatar
Vincnet.
Et j'apprécie aussi (à sa très juste et inestimable valeur) le coup de Split !

--
A+

V.


"Charabeuh" a écrit :

remarques : J'ai supposé que tes feuilles étaient toutes dans le même
fichier .xls



"Charabeuh" a écrit dans le message de
news:%
> Bjr,
>
> Une piste:
>
> Tu prépares ta feuille cible (exemple Feuil1) avec les références aux
> autres
> feuilles.
> Quand feuil1 est OK, tu lances le sous-pgme "CopieParValeur" (voir
> ci-dessous)
>
> "CopieParValeur devra être recopié dans un module.
>
> Il faudra modifier les deux constantes
> 1) FeuillesRecherche et 2) FeuilleCible
>
> Voici le texte de "FeuilleCible" à recopier dans un module:
>
> '--------------- Début ------------------------
> Option Explicit
>
> Sub CopieParValeur()
>
> 'dans FeuillesRecherche indiquer les noms des feuilles
> 'séparés par des un crochet fermant
> 'pour lesquelles on transforme en valeur
> 'ici les formules qui réfèrent à feuil3 et Feuil4
> 'seront converties en valeurs
> Const FeuillesRecherche = "Feuil3]Feuil4"
>
> 'Indiquez ici le nom de la feuille cible
> Const FeuilleCible = "Feuil1"
>
> 'quelques variables
> Dim XFeuilles, Xs As String
> Dim Xcell As Object, I As Integer
>
> XFeuilles = Split(UCase(FeuillesRecherche), "]")
>
> Worksheets(FeuilleCible).Activate
>
> For Each Xcell In ActiveSheet.UsedRange
> Xs = UCase(Xcell.Formula) & " "
> If Not (Xs = " ") Then
> For I = LBound(XFeuilles) To UBound(XFeuilles)
> If InStr(Xs, XFeuilles(I)) > 0 Then
> Xcell.Formula = Xcell.Value
> Exit For
> End If
> Next I
> End If
> Next Xcell
>
> End Sub
> '--------------- Fin ------------------------
>
> Salut
>
>
>
> "Vincnet." a écrit dans le message de
> news:
>> Bonjour à tou(te)s,
>> Je bloque sur un point technique peut-être sans solution. Il s'agit de
>> tester si une formule fait référence à des cellules situées dans
>> certaines
>> feuilles d'un classeur (y compris la feuille de la formule testée).
>> Ensuite,
>> si la formule fait référence à des cellules situées dans 3-4 feuilles
>> précises, je colle en valeur, sinon, je colle la formule.
>> J'ai régardé du côté de .DirectPrecedents et .Precedents, mais
>> apparemment,
>> ces deux méthodes ne permettent que de lister les précédents situés dans
>> la
>> feuille et non l'ensemble des précédents.
>> Ai-je une alternative ?
>> Merci d'avance !
>>
>> --
>> A+
>>
>> V.
>




Avatar
Charabeuh
merci du retour. Pour ma part je ne connaissais pas le 'DirectPrecedents'




"Vincnet." a écrit dans le message de
news:
Et j'apprécie aussi (à sa très juste et inestimable valeur) le coup de
Split !

--
A+

V.


"Charabeuh" a écrit :

remarques : J'ai supposé que tes feuilles étaient toutes dans le même
fichier .xls



"Charabeuh" a écrit dans le message de
news:%
> Bjr,
>
> Une piste:
>
> Tu prépares ta feuille cible (exemple Feuil1) avec les références aux
> autres
> feuilles.
> Quand feuil1 est OK, tu lances le sous-pgme "CopieParValeur" (voir
> ci-dessous)
>
> "CopieParValeur devra être recopié dans un module.
>
> Il faudra modifier les deux constantes
> 1) FeuillesRecherche et 2) FeuilleCible
>
> Voici le texte de "FeuilleCible" à recopier dans un module:
>
> '--------------- Début ------------------------
> Option Explicit
>
> Sub CopieParValeur()
>
> 'dans FeuillesRecherche indiquer les noms des feuilles
> 'séparés par des un crochet fermant
> 'pour lesquelles on transforme en valeur
> 'ici les formules qui réfèrent à feuil3 et Feuil4
> 'seront converties en valeurs
> Const FeuillesRecherche = "Feuil3]Feuil4"
>
> 'Indiquez ici le nom de la feuille cible
> Const FeuilleCible = "Feuil1"
>
> 'quelques variables
> Dim XFeuilles, Xs As String
> Dim Xcell As Object, I As Integer
>
> XFeuilles = Split(UCase(FeuillesRecherche), "]")
>
> Worksheets(FeuilleCible).Activate
>
> For Each Xcell In ActiveSheet.UsedRange
> Xs = UCase(Xcell.Formula) & " "
> If Not (Xs = " ") Then
> For I = LBound(XFeuilles) To UBound(XFeuilles)
> If InStr(Xs, XFeuilles(I)) > 0 Then
> Xcell.Formula = Xcell.Value
> Exit For
> End If
> Next I
> End If
> Next Xcell
>
> End Sub
> '--------------- Fin ------------------------
>
> Salut
>
>
>
> "Vincnet." a écrit dans le message de
> news:
>> Bonjour à tou(te)s,
>> Je bloque sur un point technique peut-être sans solution. Il s'agit de
>> tester si une formule fait référence à des cellules situées dans
>> certaines
>> feuilles d'un classeur (y compris la feuille de la formule testée).
>> Ensuite,
>> si la formule fait référence à des cellules situées dans 3-4 feuilles
>> précises, je colle en valeur, sinon, je colle la formule.
>> J'ai régardé du côté de .DirectPrecedents et .Precedents, mais
>> apparemment,
>> ces deux méthodes ne permettent que de lister les précédents situés
>> dans
>> la
>> feuille et non l'ensemble des précédents.
>> Ai-je une alternative ?
>> Merci d'avance !
>>
>> --
>> A+
>>
>> V.
>