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 ..
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
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 !