Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/04/2007, 07h11   #1
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Par défaut [VBA]Mise à jour de lien par vba problème

Bonjour,

J'ai des liens sur 8000 classeurs (voir peut-être même plus) que je dois modifier.
Si je modifie directement dans Excel, pas de problème mais si je le fais par VBA, il ne veut tout simplement pas le faire.

Quelqu'un à-t-il une idée ?

Voici le code
Code :
1
2
3
4
5
6
7
8
 
100100: 'MODIFICATIONS DU RESULTAT DES LIENS
 
    For Each Cellu In Range("b8:u8")
        Cellu.Value = _
        "=SI(B6="";"";INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B:D;EQUIV(B7;'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!D:D;);EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2;'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2:D2)))"
        '
    Next Cellu
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 07h53   #2
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Voilà, j'ai des améliorations, mais ça ne marche toujours pas.

Voici la ligne vba
Code :
1
2
Cellu.Value = _
            "=si(R[-2]C="""","""",INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B:D,EQUIV(R[-1]C,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!D:D,),EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2:D2)))"
en fait, lorsque je lance la macro, celle ci me rajoute quelquesAPOSTROPHE.

Voici le résultat sur excel :

Code :
=SI(B6="";"";INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B:D;EQUIV(B7;'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!D:D;);EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!'B2';'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!'B2':'D2')))
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 10h12   #3
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Ben voilà, mon problème d'apostrophe est bon, il suffit de mettre les lien en r1c1

Code :
"=si(R[-2]C="""","""",INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r1c2:r10000c4,EQUIV(R[-1]C,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r1c4:r10000c4,),EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r2c2,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r2c2:r2c4)))"
Mais maintenant, la case m'affiche "#nom?". le lien ne se fait pas.
Si je rentre dans la cellule, que je fais simplement ENTER, ça marche.

Comment faire cela en VBA.

Si j'enregistre une macro pour faire cela, j'ai une erreur a l'enregistrement de la macro "IMPOSSIBLE D'ENREGISTRER"
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 17h03   #4
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 167
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 167
Points : 1 245
Points : 1 245
Bonjour
as tu regardé du coté de formula=
ou peut être :bbblllaaabla +chr$(13)
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 17h23   #5
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Citation:
Envoyé par Daranc
Bonjour
as tu regardé du coté de formula=
ou peut être :bbblllaaabla +chr$(13)
Daranc
Hello,

Que je mette VALUE ou FORMULA, j'ai toujours le même problèmes.
Par contre, j'ai pas essayé avec le +chr$(13)

J'ai essayé avec "Application.SendKeys "maformule" + "{enter}"

Mais là, ça marche une fois et après, ça gicle à tous les coups sur la ligne A7, je comprend pas pourquoi.

Bon, la je suis en vacance jusqu'à mardi, donc je verrai ça mardi prochain

Merci
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 17h37   #6
lvr
Membre éclairé
 
Avatar de lvr
 
Inscription : avril 2006
Messages : 503
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 503
Points : 376
Points : 376
Petite question: qu'est-ce que tu appelles un "lien" ? Un lien cliquable ?
Si c'est le cas, voici comment je fais, sinon sorry pour le bourdonnement
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Public Function Put_Link_Single(rge As Range, lien as String) As Boolean
    Dim ad As String
 
    Put_Link_Single = False
 
    ' Vérifie que le lien existe
    If (FileSystObj Is Nothing) Then Set FileSystObj = CreateObject("Scripting.FileSystemObject")
 
    On Error GoTo NoFileError
    FileSystObj.GetFile (lien)
 
    On Error GoTo PutLinkError
    ' Crée le lien
    rge.Worksheet.Hyperlinks.Add _
            Anchor:=rge, _
            Address:=lien
    Put_Link_Single = True
    Exit Function
 
PutLinkError:
    Exit Function
 
NoFileError:
        MsgBox "Lien invalide", vbExclamation, MsgTitle
End Function
lvr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 07h17   #7
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Citation:
Envoyé par lvr
Petite question: qu'est-ce que tu appelles un "lien" ? Un lien cliquable ?
Non, c'est juste un lien de mise à jour automatique.
J'ai une base de donné d'outils dans un classeur excel, et, sur 8000 autres classeurs lorsque je rentre les N°, ça me met automatiquement toute les descriptions.
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 08h11   #8
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 167
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 167
Points : 1 245
Points : 1 245
Tu veux dire une liaison ?
tes 8000 classeurs sont liés à un classeur référent . Normalement la mise à jour de ces classeurs se fait lors de leur ouverture
" le classeur que vous avez ouvert comporte des liaisons avec un autre classeur
voulez vous mettre à jour ces liaisons"

quel est le probleme
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 08h30   #9
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Oui, une liaison, et justement, le classeur ne se met pas à jour,

J'ai désespèrement le message "#nom?" qui reste dans ma cellule.

Le simple fait de faire [F2] et [enter] me valide le lien, mais je n'arrive pas à le faire par vba
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 13h22   #10
lvr
Membre éclairé
 
Avatar de lvr
 
Inscription : avril 2006
Messages : 503
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 503
Points : 376
Points : 376
Tu peux décrire ce que tu fais entre le [F2] et le [enter] ?
Quelle était la formule de ta cellule avant le [F2] et quelle est-elle après le [enter] ?
lvr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 13h59   #11
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Citation:
Envoyé par lvr
Tu peux décrire ce que tu fais entre le [F2] et le [enter] ?
Quelle était la formule de ta cellule avant le [F2] et quelle est-elle après le [enter] ?
Je ne fais rien entre le [F2] et le [enter], [F2]=dblclick dans la case pour la modifier

Avant :
Code :
=SI(B6="";"";INDEX('[Base outils Fred.xls]TOTAL'!$B$1:$D$10000;EQUIV(B7;'[Base outils Fred.xls]TOTAL'!$D$1:$D$10000;);EQUIV('[Base outils Fred.xls]TOTAL'!$B$2;'[Base outils Fred.xls]TOTAL'!$B$2:$D$2)))
après F2 et enter :
Code :
=SI(B6="";"";INDEX('[Base outils Fred.xls]TOTAL'!$B$1:$D$10000;EQUIV(B7;'[Base outils Fred.xls]TOTAL'!$D$1:$D$10000;);EQUIV('[Base outils Fred.xls]TOTAL'!$B$2;'[Base outils Fred.xls]TOTAL'!$B$2:$D$2)))
c'est rigoureusement identique.
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 14h02   #12
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
en fait, ça marche MAIS.....seulement si il n'y a plus rien dérière la fin de ma macro.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
100090: 'MODIFICATIONS DES LIENS DE PAGE
 
'  =SI(OU((GAUCHE(B6;3)="OUT");(GAUCHE(B6;3)="PRO");(GAUCHE(B6;3)="MEC"));(TEXTE(B6;"0000"));("OUT"&TEXTE(B6;"0000")))
    Range("B7").Select
    For Each cell In Range("b7:u7")
        cell.Value = _
            "=IF(OR((LEFT(R[-1]C,3)=""OUT""),(LEFT(R[-1]C,3)=""PRO""),(LEFT(R[-1]C,3)=""MEC"")),(TEXT(R[-1]C,""0000"")),(""OUT""&TEXT(R[-1]C,""0000"")))"
    Next cell
 
100100: 'MODIFICATIONS DU RESULTAT DES LIENS
 
'=SI(B6="";"";INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B:D;EQUIV(B7;'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!D:D;);EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2;'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!B2:D2)))
    Range("c8").Activate
    For Each cellu In Range("b8:U8")
        cellu.FormulaR1C1 = _
            "=si(R[-2]C="""","""",INDEX('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r1c2:r10000c4,EQUIV(R[-1]C,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r1c4:r10000c4,),EQUIV('O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r2c2,'O:\o\pd\pre\[Base outils Fred.xls]TOTAL'!r2c2:r2c4)))"
    Next cellu
 
100110: 'VALIDATION DES LIENS
 
    Range("B8").Activate
    For Each cell In Range("B8:U8")
            Application.SendKeys ("{F2}"), False
            Application.SendKeys ("{TAB}"), False
    Next cell
 
100120:

si après la ligne 100120 je fais quoi que ce soit, ça ne marche plus
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 14h05   #13
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Il faudrait peut-être que je trouve un moyen de forcer l'execution de ma macro dans l'ordre définie. Et que, tant qu'elle n'a pas finie l'opération en cours elle ne passe pas au suivant.
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 07h41   #14
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Je peux bien faire la fin de ma macro en tout dernier, mais il me faut de toute façon verrouiller mes cellules après. Donc le problème reste de toute façon
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 09h53   #15
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 167
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 167
Points : 1 245
Points : 1 245
Et si tu ajoutais en fin de macro:
Calculate
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 10h30   #16
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
Citation:
Envoyé par Daranc
Et si tu ajoutais en fin de macro:
Calculate
Marche pas

Je désespère là.
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 13h13   #17
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28
En fait, il faudrait que je puisse stopper la macro tant que la partie ci-dessous n'est pas terminé.
Code :
1
2
3
4
5
    Range("B8").Activate
        For Each valide In Range("B8:U8")
            Application.SendKeys ("{F2}"), True
            Application.SendKeys ("{TAB}"), True
        Next valide
Et là ça serait bon, mais j'ai beau chercher sur tous l'internet, je ne trouve rien sur la question.

Parce que si je met ne serais-ce que un n'importe ou après ma partie de code du ci-dessus, et bien cette partie part depuis le G9
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 14h03   #18
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 28
Points : 28


C'est bon, j'ai enfin réeussi. En fait, c'est complêtement con et débille.
Excel est en français, mais vba en anglais. Si bien qu'excel met du temps à traduire et ne fais pas la mise à jour de la liaison.

Ben voilà, il m'a suffit de remplacer mes "SI" en "IF" et "EQUIV" en "MATCH"

et plus besoin du "applications.sendkeys" non plus

Merci à tous ceux qui ont perdu de temps sur mon problème.
srame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 13h08   #19
lvr
Membre éclairé
 
Avatar de lvr
 
Inscription : avril 2006
Messages : 503
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 503
Points : 376
Points : 376
Bien joué !

Faudrait se lister tous ces problèmes de multilangues dans Excel !
Des formules écrites pour un Excel en français ne fonctionne pas toujours avec des Excel en anglais ! C'est quand même con
lvr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 15h54   #20
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 167
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 167
Points : 1 245
Points : 1 245
Ivr attention au parolement correct on ne dir plus "con" on dit:une mauvaise integration logique .. finalement t'as raison c'est con
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h18.


 
 
 
 
Partenaires

Hébergement Web