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

Récupérer des valeurs d'un autre classeur

10 réponses
Avatar
Didier NOVARIN
Bonsoir
Je souhaite importer des données qui se trouvent dans un autre classeur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeurs de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier

10 réponses

Avatar
JB
Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:
Bonsoir
Je souhaite importer des données qui se trouvent dans un autre classeur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeurs de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier


Avatar
Didier NOVARIN
Bonsoir JB
Merci beaucoup
Mais le pb est que le nom du classeur n'est pas forcément le même, mais
c'est obligatoirement le 2ème classeur.
Comment puis-je faire afin qu'il récupère les données de "l'autre" classeur
?
Je te remercie
Didier

"JB" a écrit dans le message de news:

Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:
Bonsoir
Je souhaite importer des données qui se trouvent dans un autre classeur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeurs de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier


Avatar
plexus
Bonjour,

je ne sais pas si cela peut t'aider, mais j'utilise le code suivant
pour importer des données d'une feuille dédiée que je mets dans une
autre feuille dédiées, certes avec un nom de fichier prédéfini mais tu
devrais pouvoir l'adapter et l'essayer ou t'en inspirer :

Sub importe_données()

Dim typfichier As String
Dim classimport As Variant
Dim filtrindex As Integer
Dim titre As String
Dim nomceclass As String
Dim msg, titre2 As String
Dim bouton As Integer
Dim rep As Long
Dim CW As Workbook
Dim Wimport As Workbook
Dim I As Integer
Dim donnéeimporT(1 To 87)

Application.ScreenUpdating = False
'Application.DisplayAlerts = False

nomceclass = ThisWorkbook.Name
Set CW = Workbooks(nomceclass)

'demande du classeur à importer
typfichier = "Rapport (*.xls), *.xls" 'là tu dois pouvoir modifier
pour ne rien préciser
filtrindex = 1
titre = "Choisir le Rapport à ouvrir pour traitement" 'idem à adapter

classimport = Application.GetOpenFilename(typfichier, filtrindex,
titre)

If VarType(classimport) = vbBoolean Then
msg = "Action annulée,"
msg = msg & vbNewLine
msg = msg & "Aucun fichier sélectionné"
titre2 = "Annulation"
bouton = vbRetryCancel + vbInformation
rep = MsgBox(msg, bouton, titre2)
Else
Set Wimport = GetObject(classimport)
For I = 2 To 87
CW.Sheets("données importées").Range("B" & I).Value =
Wimport.Sheets("echange données").Range("B" & I).Value ' là tu mets
les cellules à copier
Next I
End If

If rep = 4 Then importe_donées

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Avatar
JB
Si l'autre classeur est OUVERT comme tu le dis dans ton post, il
suffit de mettre le nom de ce classeur dans une cellule du premier (B2
par exemple)

=INDIRECT("[" &B2&"]janvier!d2") ira chercher automatiquement la
valeur de la cellule D2 par exemple.

On peut changer le nom de l'autre classeur écrit dans la cellule B2.

JB


On 9 fév, 19:24, "Didier NOVARIN" wrote:
Bonsoir JB
Merci beaucoup
Mais le pb est que le nom du classeur n'est pas forcément le même, ma is
c'est obligatoirement le 2ème classeur.
Comment puis-je faire afin qu'il récupère les données de "l'autre" classeur
?
Je te remercie
Didier

"JB" a écrit dans le message de news:

Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:



Bonsoir
Je souhaite importer des données qui se trouvent dans un autre classe ur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeurs de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Didier NOVARIN
Merci beaucoup Plexus
Je vais utiliser ton code avec attention
Bonne soirée
Didier

"plexus" a écrit dans le message de news:

Bonjour,

je ne sais pas si cela peut t'aider, mais j'utilise le code suivant
pour importer des données d'une feuille dédiée que je mets dans une
autre feuille dédiées, certes avec un nom de fichier prédéfini mais tu
devrais pouvoir l'adapter et l'essayer ou t'en inspirer :

Sub importe_données()

Dim typfichier As String
Dim classimport As Variant
Dim filtrindex As Integer
Dim titre As String
Dim nomceclass As String
Dim msg, titre2 As String
Dim bouton As Integer
Dim rep As Long
Dim CW As Workbook
Dim Wimport As Workbook
Dim I As Integer
Dim donnéeimporT(1 To 87)

Application.ScreenUpdating = False
'Application.DisplayAlerts = False

nomceclass = ThisWorkbook.Name
Set CW = Workbooks(nomceclass)

'demande du classeur à importer
typfichier = "Rapport (*.xls), *.xls" 'là tu dois pouvoir modifier
pour ne rien préciser
filtrindex = 1
titre = "Choisir le Rapport à ouvrir pour traitement" 'idem à adapter

classimport = Application.GetOpenFilename(typfichier, filtrindex,
titre)

If VarType(classimport) = vbBoolean Then
msg = "Action annulée,"
msg = msg & vbNewLine
msg = msg & "Aucun fichier sélectionné"
titre2 = "Annulation"
bouton = vbRetryCancel + vbInformation
rep = MsgBox(msg, bouton, titre2)
Else
Set Wimport = GetObject(classimport)
For I = 2 To 87
CW.Sheets("données importées").Range("B" & I).Value Wimport.Sheets("echange données").Range("B" & I).Value ' là tu mets
les cellules à copier
Next I
End If

If rep = 4 Then importe_donées

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Avatar
Didier NOVARIN
Re,
en effet, mais comme ce n'est pas forcément moi qui fera la manip...
En plus les nom sont assez tordu du genre :
Fichier du suivi des délais de réponse 2006 - 2007...
Je te remercie, et vais étudier tous cela
Didier


"JB" a écrit dans le message de news:

Si l'autre classeur est OUVERT comme tu le dis dans ton post, il
suffit de mettre le nom de ce classeur dans une cellule du premier (B2
par exemple)

=INDIRECT("[" &B2&"]janvier!d2") ira chercher automatiquement la
valeur de la cellule D2 par exemple.

On peut changer le nom de l'autre classeur écrit dans la cellule B2.

JB


On 9 fév, 19:24, "Didier NOVARIN" wrote:
Bonsoir JB
Merci beaucoup
Mais le pb est que le nom du classeur n'est pas forcément le même, mais
c'est obligatoirement le 2ème classeur.
Comment puis-je faire afin qu'il récupère les données de "l'autre"
classeur
?
Je te remercie
Didier

"JB" a écrit dans le message de news:

Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:



Bonsoir
Je souhaite importer des données qui se trouvent dans un autre classeur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeurs
de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
JB
Avec cette version, le nom de l'autre classeur est récupéré
automatiquement par une fonction:

Ecrire en B2: =LautreClasseur() pour récupérer le nom de l'autre
classeur ouvert

=INDIRECT("["&B2&"]Feuil1!A1") ' récupère A1 de l'autre classeur

Donne le nom de l'autre classeur ouvert:

Dans un module:Alt+F11 puis insertion/module:

Function LautreClasseur()
Application.Volatile
If Workbooks.Count = 1 Then
LautreClasseur = "Un classeur ouvert"
Else
If Workbooks.Count > 2 Then
LautreClasseur = "PlusDeDeux"
Else
For Each i In Workbooks 'on parcourt la collection des
classeurs
If UCase(i.Name) <> UCase(ThisWorkbook.Name) Then
LautreClasseur = i.Name
End If
Next i
End If
End If
End Function

http://cjoint.com/?cjvzgfeFU6

JB
On 9 fév, 20:15, "Didier NOVARIN" wrote:
Re,
en effet, mais comme ce n'est pas forcément moi qui fera la manip...
En plus les nom sont assez tordu du genre :
Fichier du suivi des délais de réponse 2006 - 2007...
Je te remercie, et vais étudier tous cela
Didier

"JB" a écrit dans le message de news:

Si l'autre classeur est OUVERT comme tu le dis dans ton post, il
suffit de mettre le nom de ce classeur dans une cellule du premier (B2
par exemple)

=INDIRECT("[" &B2&"]janvier!d2") ira chercher automatiquement la
valeur de la cellule D2 par exemple.

On peut changer le nom de l'autre classeur écrit dans la cellule B2.

JB

On 9 fév, 19:24, "Didier NOVARIN" wrote:



Bonsoir JB
Merci beaucoup
Mais le pb est que le nom du classeur n'est pas forcément le même, mais
c'est obligatoirement le 2ème classeur.
Comment puis-je faire afin qu'il récupère les données de "l'autre"
classeur
?
Je te remercie
Didier

"JB" a écrit dans le message de news:

Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:

Bonsoir
Je souhaite importer des données qui se trouvent dans un autre clas seur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des valeu rs
de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeu r B
Je vous remercie
Didier- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -




Avatar
Didier NOVARIN
Merci beaucoup JB
Très sympa de ta part
Très bonne soirée
Didier

"JB" a écrit dans le message de news:

Avec cette version, le nom de l'autre classeur est récupéré
automatiquement par une fonction:

Ecrire en B2: =LautreClasseur() pour récupérer le nom de l'autre
classeur ouvert

=INDIRECT("["&B2&"]Feuil1!A1") ' récupère A1 de l'autre classeur

Donne le nom de l'autre classeur ouvert:

Dans un module:Alt+F11 puis insertion/module:

Function LautreClasseur()
Application.Volatile
If Workbooks.Count = 1 Then
LautreClasseur = "Un classeur ouvert"
Else
If Workbooks.Count > 2 Then
LautreClasseur = "PlusDeDeux"
Else
For Each i In Workbooks 'on parcourt la collection des
classeurs
If UCase(i.Name) <> UCase(ThisWorkbook.Name) Then
LautreClasseur = i.Name
End If
Next i
End If
End If
End Function

http://cjoint.com/?cjvzgfeFU6

JB
On 9 fév, 20:15, "Didier NOVARIN" wrote:
Re,
en effet, mais comme ce n'est pas forcément moi qui fera la manip...
En plus les nom sont assez tordu du genre :
Fichier du suivi des délais de réponse 2006 - 2007...
Je te remercie, et vais étudier tous cela
Didier

"JB" a écrit dans le message de news:

Si l'autre classeur est OUVERT comme tu le dis dans ton post, il
suffit de mettre le nom de ce classeur dans une cellule du premier (B2
par exemple)

=INDIRECT("[" &B2&"]janvier!d2") ira chercher automatiquement la
valeur de la cellule D2 par exemple.

On peut changer le nom de l'autre classeur écrit dans la cellule B2.

JB

On 9 fév, 19:24, "Didier NOVARIN" wrote:



Bonsoir JB
Merci beaucoup
Mais le pb est que le nom du classeur n'est pas forcément le même, mais
c'est obligatoirement le 2ème classeur.
Comment puis-je faire afin qu'il récupère les données de "l'autre"
classeur
?
Je te remercie
Didier

"JB" a écrit dans le message de news:

Bonjour,

1-Si le classeur B est ouvert, on utilise Indirect()

-On a en B2 le nom du fichier (classeur B)
-On veut lire B2 de l'onglet Janvier

=INDIRECT("[" &B2&"]janvier!b2")

2- Si le classeur B est fermé:

En VBA:

Sub LitClasseurFermé()
ChampOuCopier = "C2:C3"
Chemin = ActiveWorkbook.Path & "source"
Fichier = "stock.xls"
onglet = "Janvier"
ChampAlire = "B2:B3"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).Formula = "='" & Chemin & "[" & Fichier & "]"
& onglet & "'!" & ChampAlire
Range(ChampOuCopier).Value = Range(ChampOuCopier).Value
End Sub

http://cjoint.com/?cjte3GAiMW

http://cjoint.com/?cjtfU1UHCf

Cordialement JB

On 9 fév, 18:49, "Didier NOVARIN" wrote:

Bonsoir
Je souhaite importer des données qui se trouvent dans un autre
classeur.
J'ai un classeur A puis j'ouvre un classeur B.
Je souhaite par un clic sur un bouton, du classeur A copier des
valeurs
de
cellules du classeur B.
Le problème est que je ne connais pas forcément le nom du classeur B
Je vous remercie
Didier- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des
messages précédents -


- Afficher le texte des messages précédents -




Avatar
plexus
Tiens une petite variante qui te demande d'ouvrir un classeur
(n'importe lequel) et te dis la valeur de A1 de la feuille1 du
classeur choisi

Sub importe-données()
Dim typfichier As String
Dim classimport As Variant
Dim filtrindex As Integer
Dim titre As String
Dim nomceclass As String
Dim msg, titre2 As String
Dim bouton As Integer
Dim rep As Long
Dim CW As Workbook
Dim Wimport As Workbook
Dim I As Integer
Dim R As Range
Dim donnéeimporT(1 To 87)

Application.ScreenUpdating = False
'Application.DisplayAlerts = False

nomceclass = ThisWorkbook.Name
Set CW = Workbooks(nomceclass)

'demande du classeur à importer
typfichier = ", *.xls"
filtrindex = 1
titre = "Choisir le fichier à ouvrir pour traitement" 'A adapter

classimport = Application.GetOpenFilename(typfichier, filtrindex,
titre)
Set Wimport = GetObject(classimport)

If VarType(classimport) = vbBoolean Then
msg = "Action annulée,"
msg = msg & vbNewLine
msg = msg & "Aucun fichier sélectionné"
titre2 = "Annulation"
bouton = vbRetryCancel + vbInformation
rep = MsgBox(msg, bouton, titre2)
Else
Set Wimport = GetObject(classimport)
MsgBox Wimport.Sheets(1).Range("A1").Value ' ici tu mets tes
opérations entre les 2 classeurs CW.(...).value = Wimport.(...).value
End If

If rep = 4 Then importe-données

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Avatar
Didier NOVARIN
Merci beaucoup Plexus
Je regarde tout cela
Bon we
Didier

"plexus" a écrit dans le message de news:

Tiens une petite variante qui te demande d'ouvrir un classeur
(n'importe lequel) et te dis la valeur de A1 de la feuille1 du
classeur choisi

Sub importe-données()
Dim typfichier As String
Dim classimport As Variant
Dim filtrindex As Integer
Dim titre As String
Dim nomceclass As String
Dim msg, titre2 As String
Dim bouton As Integer
Dim rep As Long
Dim CW As Workbook
Dim Wimport As Workbook
Dim I As Integer
Dim R As Range
Dim donnéeimporT(1 To 87)

Application.ScreenUpdating = False
'Application.DisplayAlerts = False

nomceclass = ThisWorkbook.Name
Set CW = Workbooks(nomceclass)

'demande du classeur à importer
typfichier = ", *.xls"
filtrindex = 1
titre = "Choisir le fichier à ouvrir pour traitement" 'A adapter

classimport = Application.GetOpenFilename(typfichier, filtrindex,
titre)
Set Wimport = GetObject(classimport)

If VarType(classimport) = vbBoolean Then
msg = "Action annulée,"
msg = msg & vbNewLine
msg = msg & "Aucun fichier sélectionné"
titre2 = "Annulation"
bouton = vbRetryCancel + vbInformation
rep = MsgBox(msg, bouton, titre2)
Else
Set Wimport = GetObject(classimport)
MsgBox Wimport.Sheets(1).Range("A1").Value ' ici tu mets tes
opérations entre les 2 classeurs CW.(...).value = Wimport.(...).value
End If

If rep = 4 Then importe-données

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub