OVH Cloud OVH Cloud

Coller avec liaison

3 réponses
Avatar
Pascal Manach
Bonsoir,


J'ai rédigé une macro qui effectue les opérations suivantes :

1) A partir d'une base de données je filtre l'ensemble des services
contenus dans cette base et les enregistre dans des répertoires
indépendants.

2) Ensuite la macro effectue des consolidations ( rassemblement de plusieurs
services ).
Pour se faire la macro ouvre tous les fichiers concernés par référence de
consolidation et effectue des copies avec lien, car l'intérêt est de
visualiser la mise à jour des fichiers unitaires de service.
Le problème que je rencontre est que le copier-coller avec liaison génère
une formule et par conséquent même si la cellule du fichier à copier est
vide le résultat est la valeur 0.
Mon besoin est de m'assurer que les cellules ont bien été renseignées (même
si c'est un zéro)
La seule solution serait de mettre une condition du type :

= Si(feuil1!A1="";"";Feuil1!A1)

Le problème c'est que c'est la macro qui définit au fur et à mesure les
liens en fonction des infos qu'elle trouve dans les fichiers concernés.

Ci-joint un extrait de la macro où j'aimerai bien insérer un contrôle du
type de la condition exposée ci-dessus.

'copier les infos dans le niveau de la direction avec Lien

If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes

Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes

If NBlignesSERVICE >= 10 Then
Workbooks(workbookSERVICE).Sheets(k).Range("A10:AK" &
NBlignesSERVICE).Copy
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k


Merci d'avance pour votre aide


Pascal

3 réponses

Avatar
Frédéric Sigonneau
Bonsoir,

Mon besoin est de m'assurer que les cellules ont bien été renseignées (même
si c'est un zéro)


Dans ce cas, essaye avec cette modification de ton code :

'=================== If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes
Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes
If NBlignesSERVICE >= 10 Then
'*************************
Dim Plage As Range
Set Plage = Workbooks(workbookSERVICE).Sheets(k). _
Range("A10:AK" & NBlignesSERVICE)
For Each cell In Plage
If cell.Value = "" Then cell.Value = 0
Next
Plage.Copy
'*************************
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k
End If
'===================
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir,


J'ai rédigé une macro qui effectue les opérations suivantes :

1) A partir d'une base de données je filtre l'ensemble des services
contenus dans cette base et les enregistre dans des répertoires
indépendants.

2) Ensuite la macro effectue des consolidations ( rassemblement de plusieurs
services ).
Pour se faire la macro ouvre tous les fichiers concernés par référence de
consolidation et effectue des copies avec lien, car l'intérêt est de
visualiser la mise à jour des fichiers unitaires de service.
Le problème que je rencontre est que le copier-coller avec liaison génère
une formule et par conséquent même si la cellule du fichier à copier est
vide le résultat est la valeur 0.
Mon besoin est de m'assurer que les cellules ont bien été renseignées (même
si c'est un zéro)
La seule solution serait de mettre une condition du type :

= Si(feuil1!A1="";"";Feuil1!A1)

Le problème c'est que c'est la macro qui définit au fur et à mesure les
liens en fonction des infos qu'elle trouve dans les fichiers concernés.

Ci-joint un extrait de la macro où j'aimerai bien insérer un contrôle du
type de la condition exposée ci-dessus.

'copier les infos dans le niveau de la direction avec Lien

If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes

Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes

If NBlignesSERVICE >= 10 Then
Workbooks(workbookSERVICE).Sheets(k).Range("A10:AK" &
NBlignesSERVICE).Copy
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k


Merci d'avance pour votre aide


Pascal




Avatar
Pascal Manach
Bonsoir,

Message plus particulièrement destiné à Frédéric Sigonneau

Merci de votre réponse mais hélas je ne pense pas qu'elle convienne.

Le contexte de la mise en place de cette macro est le suivant :

Les fichiers nommés "workbookSERVICE" sont mis à la disposition de plusieurs
personnes (sur un disque commun), pendant environ 2 semaines, et ils doivent
renseigner certaines colonnes de ces fichiers. Je n'ai donc plus
l'autorisation d'intervenir de quelque façon que ce soit dans ces fichiers
après leur mise en place.

Les fichiers nommés " workbookDIR" consolident les informations de plusieurs
services et ils sont destinés à effectuer un contrôle de cohérence(donc non
évolutifs, le lien est inscrit en dur et évolue en fonction des mise à jour
des fichiers "workbookSERVICE" ) de l'ensemble des fichiers
"workbookSERVICE".

L'astuce que j'avais imaginé était de copier la valeur texte,dans une
colonne à côté de celles concernées par le résultat du lien, car seules 2 ou
3 colonnes sont importantes, de la formule issue du copier/coller avec
liaison et d'y insérer cet exemple en final Si(feuil1!A1="";"";Feuil1!A1), mais je n'y arrive pas.


Info : Si dans le code il y a aussi une recherche par niveau c'est parce
qu'il y a plusieurs onglets dans les fichiers.


Merci de votre aide à nouveau


"Frédéric Sigonneau" a écrit dans le message de
news: #
Bonsoir,

Mon besoin est de m'assurer que les cellules ont bien été renseignées
(même


si c'est un zéro)


Dans ce cas, essaye avec cette modification de ton code :

'=================== > If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes
Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes
If NBlignesSERVICE >= 10 Then
'*************************
Dim Plage As Range
Set Plage = Workbooks(workbookSERVICE).Sheets(k). _
Range("A10:AK" & NBlignesSERVICE)
For Each cell In Plage
If cell.Value = "" Then cell.Value = 0
Next
Plage.Copy
'*************************
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k
End If
'=================== >
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir,


J'ai rédigé une macro qui effectue les opérations suivantes :

1) A partir d'une base de données je filtre l'ensemble des services
contenus dans cette base et les enregistre dans des répertoires
indépendants.

2) Ensuite la macro effectue des consolidations ( rassemblement de
plusieurs


services ).
Pour se faire la macro ouvre tous les fichiers concernés par référence
de


consolidation et effectue des copies avec lien, car l'intérêt est de
visualiser la mise à jour des fichiers unitaires de service.
Le problème que je rencontre est que le copier-coller avec liaison
génère


une formule et par conséquent même si la cellule du fichier à copier est
vide le résultat est la valeur 0.
Mon besoin est de m'assurer que les cellules ont bien été renseignées
(même


si c'est un zéro)
La seule solution serait de mettre une condition du type :

= Si(feuil1!A1="";"";Feuil1!A1)

Le problème c'est que c'est la macro qui définit au fur et à mesure les
liens en fonction des infos qu'elle trouve dans les fichiers concernés.

Ci-joint un extrait de la macro où j'aimerai bien insérer un contrôle du
type de la condition exposée ci-dessus.

'copier les infos dans le niveau de la direction avec Lien

If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes

Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes

If NBlignesSERVICE >= 10 Then
Workbooks(workbookSERVICE).Sheets(k).Range("A10:AK" &
NBlignesSERVICE).Copy
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k


Merci d'avance pour votre aide


Pascal






Avatar
Frédéric Sigonneau
Bonsoir,

La modification proposée se contente d'examiner la plage, que vous avez
vous-même définie comme la plage à copier (pour consolidation ?), cellule par
cellule pour vérifier si elles sont vides ou non, et si oui de remplacer ce vide
par un 0 pour qu'elles contiennent quelque chose.
Si ça ne donne pas le résultat attendu (essayez sur des copies), c'est sans
doute que je n'ai rien compris à la question (nul n'est parfait :)
Désolé.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir,

Message plus particulièrement destiné à Frédéric Sigonneau

Merci de votre réponse mais hélas je ne pense pas qu'elle convienne.

Le contexte de la mise en place de cette macro est le suivant :

Les fichiers nommés "workbookSERVICE" sont mis à la disposition de plusieurs
personnes (sur un disque commun), pendant environ 2 semaines, et ils doivent
renseigner certaines colonnes de ces fichiers. Je n'ai donc plus
l'autorisation d'intervenir de quelque façon que ce soit dans ces fichiers
après leur mise en place.

Les fichiers nommés " workbookDIR" consolident les informations de plusieurs
services et ils sont destinés à effectuer un contrôle de cohérence(donc non
évolutifs, le lien est inscrit en dur et évolue en fonction des mise à jour
des fichiers "workbookSERVICE" ) de l'ensemble des fichiers
"workbookSERVICE".

L'astuce que j'avais imaginé était de copier la valeur texte,dans une
colonne à côté de celles concernées par le résultat du lien, car seules 2 ou
3 colonnes sont importantes, de la formule issue du copier/coller avec
liaison et d'y insérer cet exemple en final > Si(feuil1!A1="";"";Feuil1!A1), mais je n'y arrive pas.


Info : Si dans le code il y a aussi une recherche par niveau c'est parce
qu'il y a plusieurs onglets dans les fichiers.


Merci de votre aide à nouveau


"Frédéric Sigonneau" a écrit dans le message de
news: #

Bonsoir,

Mon besoin est de m'assurer que les cellules ont bien été renseignées



(même

si c'est un zéro)


Dans ce cas, essaye avec cette modification de ton code :

'=================== >>If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes
Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes
If NBlignesSERVICE >= 10 Then
'*************************
Dim Plage As Range
Set Plage = Workbooks(workbookSERVICE).Sheets(k). _
Range("A10:AK" & NBlignesSERVICE)
For Each cell In Plage
If cell.Value = "" Then cell.Value = 0
Next
Plage.Copy
'*************************
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k
End If
'=================== >>
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir,


J'ai rédigé une macro qui effectue les opérations suivantes :

1) A partir d'une base de données je filtre l'ensemble des services
contenus dans cette base et les enregistre dans des répertoires
indépendants.

2) Ensuite la macro effectue des consolidations ( rassemblement de



plusieurs

services ).
Pour se faire la macro ouvre tous les fichiers concernés par référence



de

consolidation et effectue des copies avec lien, car l'intérêt est de
visualiser la mise à jour des fichiers unitaires de service.
Le problème que je rencontre est que le copier-coller avec liaison



génère

une formule et par conséquent même si la cellule du fichier à copier est
vide le résultat est la valeur 0.
Mon besoin est de m'assurer que les cellules ont bien été renseignées



(même

si c'est un zéro)
La seule solution serait de mettre une condition du type :

= Si(feuil1!A1="";"";Feuil1!A1)

Le problème c'est que c'est la macro qui définit au fur et à mesure les
liens en fonction des infos qu'elle trouve dans les fichiers concernés.

Ci-joint un extrait de la macro où j'aimerai bien insérer un contrôle du
type de la condition exposée ci-dessus.

'copier les infos dans le niveau de la direction avec Lien

If workbookDIR <> workbookSERVICE Then
For k = 1 To UBound(NIVEAU)
Workbooks(workbookDIR).Sheets(k).Activate
NBlignesDIR = nblignes

Workbooks(workbookSERVICE).Sheets(k).Activate
NBlignesSERVICE = nblignes

If NBlignesSERVICE >= 10 Then
Workbooks(workbookSERVICE).Sheets(k).Range("A10:AK" &
NBlignesSERVICE).Copy
Workbooks(workbookDIR).Activate
Sheets(k).Activate
Cells(NBlignesDIR + 1, "A").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
Range("A9").Select
End If
Next k


Merci d'avance pour votre aide


Pascal