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

Modifier une cellule dans un fichier excel fermé

  • Initiateur de la discussion Initiateur de la discussion Xeniaa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

X

Xeniaa

Guest
Salut à tous

J'aimerais savoir si c'est possible de créer un formulaire pour modifier une valeur d'une cellule quelconque de mon classeur?

Merci pour vos réponses.
 
Re : Modifier une cellule dans un fichier excel fermé

Bonsoir Xéniaa,

Ta question est un peu vague !
Oui il est possible de créer un formulaire qui ira ouvrir un fichier Excel, mettre à jour une cellule puis fermer le fichier en enregistrant la modification. Cela se fera en général au sein du logiciel Excel (par l'intermédiaire du classeur des macros personnelles ou d'un autre fichier Excel).
Mais à ma connaissance, on ne peut pas modifier un fichier Excel sans l'ouvrir.

Jacou
 
Re : Modifier une cellule dans un fichier excel fermé

bonsoir,

voir ce code qui pourrait t'éclairer !?
c'est pour mes essais.

Code:
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
'tester la version excel avec Int(Val(Application.Version)) si < 12 (2007)
'HDR=No signifie sans entête(header) si HDR=Yes la prem.lig n'est pas chargée !
'Vers.< 12: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CheminFichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
'Vers.>=12: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CheminFichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"

'ceci est un code qui me sert d'essai.
'évidemment il faut connaître un peu pour adapter à tes besoins
'j'ai laissé mon fichier d'essai pour toi voir le déroulement
'celui-ci était dans le même répertoire

Public Const FichEssai$ = "ADODB RolDonnees.xls"

Sub ImportUneCellOuUnRangDuClasseurFerme()
Dim ADOConnect As Object, ADORecord As Object, TextSQL As String

Dim FeuilSource$, RangSource$
Dim FeuilDestin$, RangDestin$

'init var destin pour recopie dans ce classeur
FeuilDestin = ActiveSheet.Name: RangDestin = "A2"

'init var source à loader(ici le classeur test fermé est dans le même dossier)
ChemFichSource = ThisWorkbook.Path & "\" & FichEssai$
FeuilSource = "Feuil1$" 'ajouter $ au nom de la feuille
RangSource = "A2:B3"    'exp "A1:A1" ou "A1:C10"
TextSQL = "SELECT * FROM [" & FeuilSource & RangSource & "]"
  
'ouverture (test version excel)
Set ADOConnect = CreateObject("ADODB.Connection")
If Int(Val(Application.Version)) < 12 Then
   ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & ChemFichSource & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else
   ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichSource & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If
    
'load les données
Set ADORecord = CreateObject("ADODB.Recordset")
Set ADORecord = ADOConnect.Execute(TextSQL)
      
'recopie dans ce classeur
Sheets(FeuilDestin).Range(RangDestin).CopyFromRecordset ADORecord

'fermeture connection
ADOConnect.Close
Set ADORecord = Nothing: Set ADOConnect = Nothing
End Sub


            'EXPORTER apparemment on ne peut copier qu'une cellule!?
            '=======================================================

Sub ExportUneCellDansClasseurFerme1() ' Set ADOConnect = CreateObject("ADODB.Connection")
Dim ChemFichDestin$, RangDestin$, TextSQL$
Dim FeuilSource$, RangSource$

Dim ADOConnect As Object, ADOCommand As Object, ADORecord As Object
Set ADOConnect = CreateObject("ADODB.Connection")
Set ADOCommand = CreateObject("ADODB.Command")
Set ADORecord = CreateObject("ADODB.Recordset")

'init var source
FeuilSource$ = ActiveSheet.Name
RangSource$ = "H2"

'init var destin (ici le classeur test est dans le même dossier)
ChemFichDestin = ThisWorkbook.Path & "\" & FichEssai$
RangDestin = "Feuil1$H2:H2"
TextSQL = "SELECT * FROM [" & RangDestin & "]"

'ouverture (test version excel)
If Int(Val(Application.Version)) < 12 Then '< 2007
   ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else '>= 2007
   ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If

'copi donnée
ADOCommand.ActiveConnection = ADOConnect
ADOCommand.CommandText = TextSQL
ADORecord.Open ADOCommand, , adOpenKeyset, adLockOptimistic
ADORecord(0).Value = Sheets(FeuilSource$).Range(RangSource$)
ADORecord.Update

'fermeture
ADOConnect.Close
Set ADOConnect = Nothing: Set ADOCommand = Nothing: Set ADORecord = Nothing
End Sub


Sub ExportUneCellDansClasseurFerme2() ' Dim ADOConnect As ADODB.Connection
Dim ChemFichDestin$, RangDestin$, TextSQL$
Dim FeuilSource$, RangSource$

Dim ADOConnect As ADODB.Connection
Dim ADOCommand As ADODB.Command
Dim ADORecord As ADODB.Recordset

'init var source
FeuilSource$ = ActiveSheet.Name
RangSource$ = "H2"

'init var destin (ici le classeur test est dans le même dossier)
ChemFichDestin = ThisWorkbook.Path & "\" & FichEssai$
RangDestin = "Feuil1$H2:H2"
TextSQL = "SELECT * FROM [" & RangDestin & "]"

'ouverture (test version excel)
Set ADOConnect = New ADODB.Connection
If Int(Val(Application.Version)) < 12 Then '< 2007
   ADOConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Else '>= 2007
   ADOConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichDestin & ";Extended Properties=""Excel 12.0;HDR=No;"";"
End If

'copi donnée
Set ADOCommand = New ADODB.Command
Set ADORecord = New ADODB.Recordset
ADOCommand.ActiveConnection = ADOConnect
ADOCommand.CommandText = TextSQL
ADORecord.Open ADOCommand, , adOpenKeyset, adLockOptimistic
ADORecord(0).Value = Sheets(FeuilSource$).Range(RangSource$)
ADORecord.Update

'fermeture
ADOConnect.Close
Set ADOConnect = Nothing: Set ADOCommand = Nothing: Set ADORecord = Nothing
End Sub
 
Re : Modifier une cellule dans un fichier excel fermé



Salut Jacou

Merci pour ta réponse,

je voulais savoir si c'est possible de modifier une cellule quelconque, depuis le formulaire?
je ne sais pas si c'est faisable! ça me parait un peu difficile pour moi aussi, surtout qu'il faut indexer la cellule qu'on voudra modifier et tout et tout..
 
Re : Modifier une cellule dans un fichier excel fermé

re

@Xeniaa

et le code que j'ai mis c'est quoi ? "de la roupie de sansonnet" ?
la réponse est dedans avec les deux routines à adapter évidemment.
Sub ImportUneCellOuUnRangDuClasseurFerme()
Sub ExportUneCellOuUnRangDuClasseurFerme()

maintenant que ce soit par un formulaire, un bouton ou directement depuis le code par F5,
là n'est pas le problème !

EDIT:
et le lien de job75 c'est quoi ?
c'est dans tout ça qu'il y a les réponses que tu attends et non pas le bouton qui effectuera la fonction !!!

c'est comme certains qui demandent un bouton pour effectuer quelque chose !
c'est idiot, un bouton n'est qu'un objet, dessin quelconque ...
ce qu'il faut d'abord c'est la fonction codée pour effectuer la chose
puis on décide par quel moyen on y accède pour effectuer la fonction en question.
 
Dernière édition:
Re : Modifier une cellule dans un fichier excel fermé

Bonjour Xeniaa, Jacou, Roland_M,

@ Xeniaa le fait d'être nouveau (nouvelle ?) ne vous exonère pas de répondre aux autres intervenants 😡

Il est certain que par rapport à la méthode ADO celle qui consiste à ouvrir et refermer le fichier est très simple.

La macro dans l'UserForm du fichier Pilote(1).xls :

Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim nomfich$, ad$, v, chemin$
nomfich = "Classeur à modifier.xls" 'à adapter
ad = TextBox1
v = TextBox2
chemin = ThisWorkbook.Path & "\" 'à adapter
Application.ScreenUpdating = False
On Error Resume Next
Workbooks(nomfich).Close False 'si le classeur est ouvert on le ferme
Err = 0
With Workbooks.Open(chemin & nomfich) 'ouverture du fichier
  If Err Then MsgBox "Fichier '" & nomfich & "' introuvable !", 48: GoTo 2
  ad = .Sheets(1).Range(ad).Address(0, 0)
  If Err Then MsgBox "Adresse non valide !", 48: TextBox1.SetFocus: GoTo 1
  .Sheets(1).Range(ad) = v
  MsgBox "La cellule " & ad & " a été modifiée"
1 .Close True 'enregistrement et fermeture
End With
2 Application.ScreenUpdating = True
End Sub
Téléchargez les 2 fichiers joints dans le même dossier (par exemple le bureau).

A+
 

Pièces jointes

Dernière édition:
Re : Modifier une cellule dans un fichier excel fermé


Bonjour Roland_M;

Je n'avais pas vu votre message pardon, merci infiniment pour ton aide.
Je vais l'adapter à mon cas, je reviens vers vous en cas de besoin.

Merci encore une fois.
 
Re : Modifier une cellule dans un fichier excel fermé

Bonjour à tous,
si c'est juste pour modifier une cellule d'un classeur fermé peut-être que le plus simple est d'utiliser une macro Excel4 comme indiqué dans le lien fourni par Gérard que je salue.
A+
 
Re : Modifier une cellule dans un fichier excel fermé

Bonjour,

Pour modifier B3 du classeur yyy.xls

ADO

Code:
Sub ModifCelluleClasseurFermé()
  repertoire = ThisWorkbook.Path & "\"
  Set Cnn = New ADODB.Connection
  Fichier = "yyy.xls"
  Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & repertoire & Fichier & ";" & _
    "Extended Properties=""Excel 8.0;HDR=No;"";"
  Set Rs = New ADODB.Recordset
  Rs.Open "SELECT * from [Feuil1$b3:b3]", Cnn, adOpenKeyset, adLockOptimistic
  Rs(0).Value = "xxxxxx"
  Rs.Update
  Rs.Close
  Cnn.Close
End Sub

JB
 
Dernière édition:
Re : Modifier une cellule dans un fichier excel fermé

Re,

Ce fichier (2) permet d'entrer aussi des dates :

Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim nomfich$, ad$, v, chemin$
nomfich = "Classeur à modifier.xls" 'à adapter
ad = TextBox1
v = TextBox2
chemin = ThisWorkbook.Path & "\" 'à adapter
Application.ScreenUpdating = False
On Error Resume Next
Workbooks(nomfich).Close False 'si le classeur est ouvert on le ferme
Err = 0
With Workbooks.Open(chemin & nomfich) 'ouverture du fichier
  If Err Then MsgBox "Fichier '" & nomfich & "' introuvable !", 48: GoTo 2
  ad = .Sheets(1).Range(ad).Address(0, 0)
  If Err Then MsgBox "Adresse non valide !", 48: TextBox1.SetFocus: GoTo 1
  If CheckBox1 Then
    If Not IsDate(v) Then MsgBox "Date non valide !", 48: TextBox2.SetFocus: GoTo 1
    v = CDate(v)
  End If
  .Sheets(1).Range(ad) = v
  MsgBox "La cellule " & ad & " a été modifiée"
1 .Close True 'enregistrement et fermeture
End With
2 Application.ScreenUpdating = True
End Sub
Edit : bonjour JB, si l'on compare les 2 méthodes :

- méthode ADO => 8 lignes "utiles"

- méthode ouverture/fermeture => 3 (ou 4) lignes "utiles" mais prendront du temps si le fichier est "lourd"...

A+
 

Pièces jointes

Dernière édition:
Re : Modifier une cellule dans un fichier excel fermé


Merci infiniment, pour ta réactivité

tu m'es d'une grande aide!
 
Re : Modifier une cellule dans un fichier excel fermé

re

pour te faciliter la vie,
sur l'exp de J.Boisgontier(que je salut au passage)
il n'y a qu'à ### initialiser tes variables ###
à savoir que modifier un ou deux classeurs seulement autant les ouvrir !
ceci n'est valable que pour boucler sur un certain nombre de fichiers !?

Code:
Sub ModifierUneCelluleClasseurFerme()
   
   '### init ici tes variables ###
   RepDestin$ = ThisWorkbook.Path & "\" '< rep le même que ton classeur avec ce code
   FichDestin$ = "yyy.xls"              '< nom du fichier complet
   FeuilDestin$ = "Feuil1"              '< non de la feuille destination
   CellDestin$ = "b3"                   '< nom de la cellule destination
   DonnSource$ = "ici tes valeurs"  'ou DonnSource$ = Sheets("NomDeTaFeuil").Cells(Lig, Col)
   ChemFichDestin$ = RepDestin$ & FichDestin$
   
   
   '---- ci-dessous ne rien modifier --------
   Set Cnn = New ADODB.Connection
   If Int(Val(Application.Version)) < 12 Then
      Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & ChemFichDestin$ & ";Extended Properties=""Excel 8.0;HDR=No;"";"
   Else
      Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ChemFichDestin$ & ";Extended Properties=""Excel 12.0;HDR=No;"";"
   End If
   Set Rs = New ADODB.Recordset
   R$ = "SELECT * from [" & FeuilDestin$ & CellDestin$ & ":" & CellDestin$ & "]"
   Rs.Open R$, Cnn, adOpenKeyset, adLockOptimistic
   Rs(0).Value = DonnSource$
   Rs.Update
   Rs.Close
   Cnn.Close

End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
216
Réponses
4
Affichages
284
W
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…