Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 30/12/2011, 09h58   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Par défaut copier la valeur d'une cellule dans une autre et pouvoir l'actualiser

Bonjour,
Je cherche à résoudre le problème suivant :
J'aimerais affecter à une cellule la valeur d'une autre. Quand je changerais la valeur de la première cellule, la deuxième cellule changerait automatiquement, ce que j'écrirais par exemple dans B1 serait : "=A1"
Maintenant, j'aimerais faire cette action en VBA, pour pouvoir l'intégrer dans une macro, mais je ne peux pas utiliser cette forme car la ligne et la colonne de la cellule source sont contenues dans des variables.
Quelqu'un aurait-il une solution ?
Merci d'avance,
Aurore
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 10h40   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Adapte les noms des feuilles et les coordonnées des cellules
Code :
worksheets("FeuilDest").cells(i,j).formula="=" & worksheets("FeuilSource").cells(x,y).address
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/12/2011, 11h01   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Cela fonctionne parfaitement,
Merci beaucoup.
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 13h48   #4
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

en utilisant la propriété Formula de l'objet Range :

Code :
1
2
3
4
5
6
7
8
9
Sub DGFormulla()
Dim I As Long
Dim J As Long
 
I = 5
J = 11
Range("K8").Formula = Cells(I, J).Formula
 
End Sub
Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 15h58   #5
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Bonjour Ormonth,
Merci de ta remarque, c'est vrai que je n'ai pas encore pris le réflexe de cliquer sur les pouces ou sur "résolu".

J'ai essayer la propriété Formula, mais elle ne répond pas à mon problème : si, après avoir exécuté la macro, je change la valeur de la cellule source, la cellule cible conserve la valeur précédente.

Code :
1
2
3
4
5
6
7
8
9
Sub testformula()
a = 1
b = 2
c = 3
d = 4
 
Cells(a, b).Formula = Cells(c, d).Formula
 
End Sub
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h11   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

Exact

tu peux dans ce cas là jouer de différentes façon selon le contexte sur l'évènementiel Change des feuilles genre :

Code :
1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$3" Then Call testformula 'Cells(c, d)
End Sub
Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2012, 11h12   #7
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
En effet, je pourrais utiliser l'évènementiel Change, mais j'aimerais ne pas avoir à faire appel aux macros une fois ma feuille créée (pour qu'elle puisse, une fois créée, être utilisée par quelqu'un qui aurait désactivé les macros).
Pour cela, la proposition de mercatog me convenait mieux.

Ainsi, sur ce modèle, j'ai essayer d'écrire la formule
=SI(ESTVIDE(A1);"";tabsynth!X7)
dans la cellule B1 de ma feuille test, mais de l'écrire via une macro bien entendu !

Cela donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
a = 1
b = 2
c = 24
d = 7
 
With Worksheets("test").Cells(a, b)
 
    .Formula = "=SI(ESTVIDE(test!" & Worksheets("test").Cells(a, a).Address & ");"""";tabsynth!" & Worksheets("tabsynth").Cells(d, c).Address
 
End With
Mais ce code provoque une erreur. Quelqu'un aurait-il une idée ?

Merci d'avance,

Aurore
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h07   #8
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 696
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 696
Points : 1 451
Points : 1 451
Bonjour,

Il faut utiliser FormulaLocal pour permettre l'écriture en français et fermer la parenthèse en fin d'expression.
Code :
1
2
3
4
5
6
7
8
9
a = 1
b = 2
c = 24
d = 7
Var1 = Worksheets("test").Cells(a, a).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Var2 = Worksheets("tabsynth").Cells(d, c).Address(RowAbsolute:=False, ColumnAbsolute:=False)
With Worksheets("test").Cells(a, b)
    .FormulaLocal = "=SI(ESTVIDE(test!" & Var1 & ");"""";tabsynth!" & Var2 & ")"
End With
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2012, 11h14   #9
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Cela fonctionne,
Merci beaucoup,
Aurore
Aurore24 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 08h24.


 
 
 
 
Partenaires

Hébergement Web