Copier cellule d'un fichier dans un autre fichier -Macro

Bonjour,

Je cherche à récupérer des valeur dans un onglet du fichier "Fiche _ PR GRAGNAGUE", et à les copier dans le fichier sur lequel je travail. En regardant à droite à gauche sur le forum j'ai réussi à trouver le code adéquat suivant.

Sub PR() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet source) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Worksheets("Caractéristique PR") Workbooks.Open Filename:="K:\DOSSIERS\AFFAIRES\21_Affaires 2019\01-TLS\APS_E19047 GRAGNAGUE SDA\TECHNIQUE\2 - PHASE 1 - Etat des lieux\Fichier de travail\Fiche _PR GRAGNAGUE.xlsx" Set CS = Workbooks("Fiche _PR GRAGNAGUE.xlsx") 'définit le classeur source CS Set OS = CS.Worksheets("PR général 2") OS.Range("F37").Value.Copy OD.Cells(4, "F") 'copie/colle F37 source dans la colonne F ligne 4 destination OS.Range("G37").Value.Copy OD.Cells(4, "G") 'copie/colle G37 source dans la colonne G ligne 4 destination End Sub

Cependant, j'obtiens une erreur 424 au niveau de "OS.Range("F37").Value.Copy OD.Cells(4, "F") 'copie/colle F37 source dans la colonne F ligne 4 destination"

Est ce que quelqu'un a une idée d'où cela provient ?

Merci d'avance!

Bonjour Prob, et bienvenue sur le Forum,

Edit

Supprime juste le .value de la ligne qui déconne :

OS.Range("F37").Copy OD.Cells(4, "F")

Bonjour,

Merci beaucoup! Cela fonctionne parfaitement !

J'ai une autre petite question. Je sais maintenant comment copier des cellules présentes dans un onglet, mais est ce qu'il est possible de copier le nom de l'onglet d'un classeur dans la cellule d'un autre classeur ?

Re -

Bonjour,

Merci beaucoup! Cela fonctionne parfaitement !

Bon bah super

J'ai une autre petite question. Je sais maintenant comment copier des cellules présentes dans un onglet, mais est ce qu'il est possible de copier le nom de l'onglet d'un classeur dans la cellule d'un autre classeur ?

Oui bien sur !

Tu sais maintenant comment cibler une cellule grâce à ton code ci-dessus

Pour obtenir le nom d'un onglet, là méthode change selon ce que tu veux faire :

Si tu veux obtenir le nom de la feuille active du classeur actif :

MsgBox ThisWorkbook.ActiveSheet.Name

Si tu veux obtenir le nom d'une feuille spécifique d'un classeur spécifique et ouvert :

MsgBox Workbooks("Nom_du_classeur.xlsx").Sheets(1).Name

Si tu veux obtenir le nom d'une feuille de la même manière que tu as déjà :

MsgBox OS.Name

A dispo !

D'accord, mais je ne comprends pas bien comment réussir à coller le nom de l'onglet récupéré avec "msgBOx" dans une cellule d'un autre fichier ..

Parce que si je fais le code suivant cela ne fonctionne pas .

OS.Range("MsgBox OS.Name").Copy OD.Cells(4, "F")

Je sais que ça doit être à cause du Range . Mais comme je suis novice en Macro je ne sais pas trop quoi mettre d'autre.)

Ah merde ! Désolé je pensais que tu savais cibler une cellule pour mettre du contenu à l'intérieur

Tu sais maintenant comment cibler une cellule grâce à ton code ci-dessus

Mais visiblement c'est pas le cas ! Donc pour mettre une donnée à l'intérieur d'une cellule :

Sur une cellule de la feuille active du classeur actif :

Range("A1") = OD.Name

Sur une cellule d'une feuille spécifique d'un classeur spécifique et ouvert :

Workbooks("Nom_du_classeur.xlsx").Sheets(1).Range("A1") = OD.Name

Sur une cellule avec la méthode que tu as déjà :

OS.Range("A1") = OD.Name

PS : Le MsgBox sert juste a afficher un message dans une boîte de dialogue (comme pour le message d'erreur que tu as eu)

A dispo !

Ah oui ça marche tout de suite mieux comme ça ! Merci!

J'ai complexifié mon code. Car j'aimerai remplir un tableau dont la première colonne comprend les noms des onglets d'un autre classeur. En sautant un onglet sur deux.

Je mets le code a la suite.

Sub PR() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet source) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Worksheets("Caractéristique PR") Workbooks.Open Filename:="K:\DOSSIERS\AFFAIRES\21_Affaires 2019\01-TLS\APS_E19047 GRAGNAGUE SDA\TECHNIQUE\2 - PHASE 1 - Etat des lieux\Fichier de travail\Fiche _PR GRAGNAGUE.xlsx" Set CS = Workbooks("Fiche _PR GRAGNAGUE.xlsx") 'définit le classeur source CS i = 2 j = Worksheets.Count n = 4 While i <= j Set OS = CS.Sheets(i) OD.Range("C4") = OS.Name OS.Range("F37").Copy OD.Cells(n, "F").PasteSpecial Paste:=xlPasteValues OS.Range("G37").Copy OD.Cells(n, "G").PasteSpecial Paste:=xlPasteValues OS.Range("F27").Copy OD.Cells(n, "E").PasteSpecial Paste:=xlPasteValues i = i + 2 n = n + 1 Wend CS.Close False End Sub

En gros je lui demande que tant que le compteur i ne dépasse pas le nombre d'onglet il doit refaire la manip. Ca marche nickel quand je choisi des cellules à copier dans les cellules d'un autre fichier. Mais pour ce qui est de la première colonne "C" qui doit contenir les noms des onglets OD.Range("C4") = OS.Name ça ne fonctionne pas car je ne peux pas rentrer le compteur 'n' qui me sert à changer de ligne .. et je ne peux donc pas mettre OD.Range("Cn") = OS.Name

Des idées pour ce petit problème ?

Je ne sais pas si je suis très claire ..

Re-

et je ne peux donc pas mettre OD.Range("Cn") = OS.Name

Si si tu peux ! Mais c'est pas la bonne synthaxe. Voici comme on l'écrit :

OD.Range("C" & n) = OS.Name

Après tu peux aussi utiliser la méthode "Cells" :

OD.Cells(n, 3) = OS.Name

A dispo!

Merci ! Je manque de pratique c'est évident ! Ca va rentrer j'en suis sure !

Je suppose qu'il y a aussi un moyen de copier le contenu de zone de texte dans une cellule n'est ce pas ? Ca m'aiderait beaucoup aussi !

et autre petite question, est ce qu'il est possible avec les macro d'aller vérifier qu'une case est cochée ? Je vous mets un exemple en pièce jointe pour plus de clarté. Il y a des cases permettant de dire si oui ou non le poste présente la caractéristique . Est ce qu'il est donc possible de réaliser une action si la case 'oui' est cochée, et une autre si c'est le 'non' qui est coché ?

Merci beaucoup !

Re-

Est ce qu'il est donc possible de réaliser une action si la case 'oui' est cochée, et une autre si c'est le 'non' qui est coché ?

Alors oui c'est possible, mais il va falloir que tu définisse le nom de chacune de tes cases à cocher (CheckBox) et que tu sache à quoi chacune d'elle fait référence.

Une fois que tu sais sa, tu peux utiliser le code ci-dessous pour boucler sur tout tes checkbox, à la recherche de celles qui t'interesse et pour tester si oui ou non elle est coché :

Sub Check_CheckBox_xlOn()
Dim ch As CheckBox
For Each ch In ThisWorkbook.Sheets(1).CheckBoxes
    If ch.Value = xlOn Then MsgBox "La CheckBox intitulé " & ch.Name & " est cochée"
Next ch
End Sub

Je suppose qu'il y a aussi un moyen de copier le contenu de zone de texte dans une cellule n'est ce pas ?

Tu peux préciser stp :p ? Je pense pas avoir compris et veux pas répondre à côté :

Par zone de texte tu entend quoi ?

A dispo!

D'accord merci, je regarderai pour les checkbox demain !

Par zone de texte je veux dire les formes rectangulaires que l'on crée et dans lesquelles on peut écrire. Il y en a dans le fichier joint dans le message précédent. Et je suppose que c'est comme pour les boites à cocher, il va falloir que je leur donne un nom ...

Alors le nom est déjà créé par défaut!

Par exemple, si je met une case à cocher sur ma feuille Excel, alors celle-ci s’appellera automatiquement 'CheckBox1'

Si j'en met une deuxième, elle s'appellera 'CheckBox2'

Après quand je te dit que [...]

mais il va falloir que tu définisse le nom de chacune de tes cases à cocher (CheckBox) et que tu sache à quoi chacune d'elle fait référence.

[...] c'est que je sous-entend que tu dois connaître leurs noms, pour faire appel à eux dans ton code !

Disons par exemple que l'une de mes cases à cocher me sert à dire "souhaitez-vous fermer le classeur après exécution du code ?"

Comment, dans mon code, je vais faire comprendre que si ma case à cocher est.. bah cocher, alors le Classeur doit se fermer après exécution, sachant que j'ai une cinquantaine de case ?

Il faut connaître le nom de chacune de mes cases, et savoir à quoi elles font références pour pouvoir les utiliser.

En espérant que avoir été clair

Bonjour,

D'accord merci !

Je vais essayer tout ça dès maintenant !

Re bonjour,

Je viens de tester le code suivant. Il fonctionne parfaitement jusqu'au "if" des Checkbox. Il me dit qu'il y a une erreur 438! Je pense que ça viens du .Value=True Mais je ne sais pas quoi mettre à la place ... Des idées?

Pour être un peu plus claire je souhaite qu'il aille vérifier que les cases 63 et 62 présentent dans une feuille d'un autre fichier sont cochées ou non et ensuite en fonction de de leur état me remplisse une case de mon fichier de travail.

Sub PR()

Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet source)
Dim ch As CheckBox
Dim Oui As String
Dim Non As String

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Caractéristique PR") 'à adapter à ton cas
Workbooks.Open Filename:="K:\DOSSIERS\AFFAIRES\21_Affaires 2019\01-TLS\APS_E19047 GRAGNAGUE SDA\TECHNIQUE\2 - PHASE 1 - Etat des lieux\Fichier de travail\Fiche _PR GRAGNAGUE.xlsx"
Set CS = Workbooks("Fiche _PR GRAGNAGUE.xlsx") 'définit le classeur source CS
i = 2
j = Worksheets.Count
n = 4
OD.Range("C4:G15").ClearContents

While i <= j
    Set OS = CS.Sheets(i) 'à adapter à ton cas
    OD.Range("C" & n) = OS.Name
    OS.Range("F37").Copy

'OS.Range("F37").Copy
'OD.Cells(n, "F").PasteSpecial Paste:=xlPasteValues 'copie/colle F37 source dans la colonne F ligne n destination

    OD.Cells(n, "F").PasteSpecial Paste:=xlPasteValues
    OS.Range("G37").Copy
    OD.Cells(n, "G").PasteSpecial Paste:=xlPasteValues
    OS.Range("F27").Copy
    OD.Cells(n, "E").PasteSpecial Paste:=xlPasteValues

'si la case 63 est cochée : on ecrit non, si la case 62 est coché on écrit oui, et si aucune des deux n'est cochées on écrit "-"
    If CS.Sheets(i).Shapes("Check Box 63").Value = True Then
        OD.Cells(n, "J") = Non
    ElseIf CS.Sheets(i).Shapes("Check Box 62").Value = True Then
        OD.Cells(n, "J") = Oui
    Else
        OD.Cells(n, "J") = "-"
    End If

'on recommence la boucle pour changer de feuille
    i = i + 2
    n = n + 1

    Wend

CS.Close False
End Sub

Merci Beaucoup !

Bonne journée!

Bonjour,

Dans ton code remplace [...]

If CS.Sheets(i).Shapes("Check Box 63").Value = True Then
        OD.Cells(n, "J") = Non
ElseIf CS.Sheets(i).Shapes("Check Box 62").Value = True Then
        OD.Cells(n, "J") = Oui
Else
        OD.Cells(n, "J") = "-"
End If

[...] par [...]

If CS.Sheets(i).CheckBoxes("Check Box 63").Value = xlOn Then
        OD.Cells(n, "J") = "Non"
ElseIf CS.Sheets(i).CheckBoxes("Check Box 62").Value = xlOn Then
        OD.Cells(n, "J") = "Oui"
Else
        OD.Cells(n, "J") = "-"
End If

A dispo

Merci beaucoup ! C'est nickel maintenant

Au plaisir ! Sujet clos du coup ?

Si oui [...]

Et à une prochaine ^^

Bonjour,

Je souhaite récupérer le contenu d'une zone de texte présent dans un classeur pour le mettre dans une cellule du classeur actif.

Cependant je ne sais pas quelle syntaxe utiliser! J'ai la solution pour les Checkbox, donc je me dis que la syntaxe doit être similaire. Je vous mets le code à la suite :

Sub PR()

Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet source)
Dim ch As CheckBox

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Caractéristique PR")
Workbooks.Open Filename:="K:\Fichier de travail\Fiche _PR GRAGNAGUE.xlsx"
Set CS = Workbooks("Fiche _PR GRAGNAGUE.xlsx") 'définit le classeur source CS
i = 2
j = Worksheets.Count
n = 4
OD.Range("C4:G15").ClearContents

While i <= j
    Set OS = CS.Sheets(i)
    OD.Range("C" & n) = OS.Name

'###### Diamètre et marnage ######
    If CS.Sheets(i).TextBoxes("Zone Texte 2064").Value <> "" Then
        OD.Cells(n, "D") = CS.Sheets(i).TextBoxes("Zone Texte 2064").Value
    End If

'###### Présence de Top plein######

'si la case 63 est cochée : on ecrit non, si la case 62 est coché on écrit oui, et si aucune des deux n'est cochées on écrit "-"
    If CS.Sheets(i).CheckBoxes("Check Box 63").Value = xlOn Then
        OD.Cells(n, "J") = "Non"
    ElseIf CS.Sheets(i).CheckBoxes("Check Box 62").Value = xlOn Then
        OD.Cells(n, "J") = "Oui"
    Else
        OD.Cells(n, "J") = "-"
    End If

'###### Présence de Télésurveillance######
    If CS.Sheets(i).CheckBoxes("Check Box 38").Value = xlOn Then
        OD.Cells(n, "K") = "Non"
    ElseIf CS.Sheets(i).CheckBoxes("Check Box 37").Value = xlOn Then
        OD.Cells(n, "K") = "Oui"
    Else
        OD.Cells(n, "K") = "-"
    End If

'on recommence la boucle pour changer de feuille
    i = i + 2
    n = n + 1

    Wend

CS.Close False
End Sub

Mon problème survient dans la partie 'Diamètre et marnage', où la syntaxe est surement très mauvaise !

J'aimerai récupérer le contenu de la zone de texte 2064. En testant auparavant qu'elle ne soit pas vide.

Merci d'avance !

Rechercher des sujets similaires à "copier fichier macro"