Aide excel Macro
Résolu
Bonjour,
J'ai quelques notions de VB, mais alors très peu.
Je cherche à copier dans une cellule, le texte d'une autre cellule d'un autre fichier excel, d'apres le texte qui se trouve dans la cellule de gauche.
Exemple:
si dans la case B1, il y a le texte "Nature", alors je copie le texte de la case B2.
Le problème c'est que le texte "Nature" se trouve parfois en D4 ou F8, H2 etc....
Merci d'avance pour votre aide.
A+
J'ai quelques notions de VB, mais alors très peu.
Je cherche à copier dans une cellule, le texte d'une autre cellule d'un autre fichier excel, d'apres le texte qui se trouve dans la cellule de gauche.
Exemple:
si dans la case B1, il y a le texte "Nature", alors je copie le texte de la case B2.
Le problème c'est que le texte "Nature" se trouve parfois en D4 ou F8, H2 etc....
Merci d'avance pour votre aide.
A+
Configuration: Windows XP Internet Explorer 7.0
22 réponses
-
En effet, maintenant cela fonctionne.
Je veut dire un GRAND MERCI à Cel92 et Wilfried_42.
Merci beaucoup.
A+. -
Contributeurbonjour
un objet classeur n'a pas d'objet range, mais un objet sheet, qui lui a un objet range
de plus thisworkbook pas de S
si tu fais ta saisie en minuscule, VBA transforme automatiquement les bonne lettres en majuscule au chagement de ligne ce qui permet de savoir si on n'a une erreur de frappe
dans ton cas ThisWorkBooks est reconnu comme une variable et comme tu n'as pas en premiere ligne
OPTION explicit, le compilateur ne te l'indique pas
ThisWorkbook.sheets("mafeuile").Range("K14").Value = texteDroite -
Un petit coup de pouce SVP,
Une erreure "424" sur l'avant dernière ligne, si près du but SVP aidez -moi !
Merci d'avance.
A+. -
Salut !
Rectification, le soucis vient de l'avant derniere ligne, erreure d'éxécution 424, Objet requis.
J'ai jeté un coup d'oeil dans l'aide, mais c'est compliqué en fait l'aide
Quelle est l'erreur ????????
Merci
A+.
Sub recup_text()
Dim chemin As String
chemin = ThisWorkbook.Path & "\"
Dim classeur2 As String
classeur2 = "ViewPage.xls"
Workbooks.Open Filename:=chemin & classeur2, ReadOnly:=True
Dim cellulenature As Range
Set cellulenature = Workbooks(classeur2).Worksheets("Sheet1").Columns("A:Z").Find("Nature")
If cellulenature Is Nothing Then
MsgBox "L'onglet 'Sheet1' du fichier ViewPage.xls ne contient pas de cellule contenant 'Nature'."
Exit Sub
End If
Dim texteDroite As String
texteDroite = cellulenature.Offset(0, 1).Value
ThisWorkbooks.Range("K14").Value = texteDroite
End Sub -
Merci pour ta réponse Cel
Cependant j'ai maintenant une erreure d'éxécution 424, Objet requis, au niveau de la ligne en gras.
Pourquoi ?
Encore un petit ( gros ) coup de pouce STP.
Merci d'avance
A+
Sub recup_text()
Dim chemin As String
chemin = ThisWorkbook.Path & "\"
Dim classeur2 As String
classeur2 = "ViewPage.xls"
Workbooks.Open Filename:=chemin & classeur2, ReadOnly:=True
Dim cellulenature As Range
Set cellulenature = Workbooks(classeur2).Worksheets("Sheet1").Columns("A:Z").Find("Nature")
If cellulenature Is Nothing Then
MsgBox "L'onglet 'Sheet1' du fichier ViewPage.xls ne contient pas de cellule contenant 'Nature'."
Exit Sub
End If
Dim texteDroite As String
texteDroite = cellulenature.Offset(0, 1).Value
ThisWorkbooks.Range("K14").Value = texteDroite
End Sub -
( L'astuce de l'astuce c'est que quand tu changeras tes fichiers de répertoire, ou que tu modifieras son nom, la macro fonctionnera toujours)
-
C'est parce que la variable classeur2 ne contient pas que le nom du classeur : elle contient également le chemin.
Or Workbooks(classeur2) ne veut que le nom.
Une astuce :
dim chemin as string chemin = ThisWorkbook.Path & "\" dim classeur2 as string classeur2 = "ViewPage.xls" Workbooks.Open Filename:=chemin & classeur2 , ReadOnly:=True Dim cellulenature As Range Set cellulenature = Workbooks(classeur2).Worksheets("Sheet1").Columns("A:Z").Find("Nature")
etc ...
A+ -
oui, quleques erreures de frappe; mais j'ai rectifié.
cependant j'ai toujours le message d'erreure.
Apparemment le soucis serait au niveai de la ligne en gras.
Merci pour ton aide
A+
Sub recup_text()
Workbooks.Open Filename:="P:\Test exportation Maximo\ViewPage.xls", ReadOnly:=True
Dim classeur2 As String
classeur2 = "P:\Test exportation Maximo\ViewPage.xls"
Dim cellulenature As Range
Set cellulenature = Workbooks(classeur2).Worksheets("Sheet1").Columns("A:Z").Find("Nature")
If cellulenature Is Nothing Then
MsgBox "L'onglet 'Sheet1' du fichier ViewPage.xls ne contient pas de cellule contenant 'Nature'."
Exit Sub
End If
ThisWorkbooks.Open
Dim texteDroite As String
texteDroite = cellulenature.Offset(0, 1).Value
ThisWorkbooks.Range("K14").Value = texteDroite
End Sub -
Quelle est la ligne surlignée en jaune causant l'erreur lors du débuggage ?
Attention : tu as écris :
classeur2 = "P:\Teste exportation Macro\ViewPage.xls"
pas de la même façon que dans la ligne au-dessus. -
Argh !!!!!!
Je n'y arrive toujours pas.
Toujours ce même message d'erreure.
Un peu d'aide SVP.
Merci. -
Merci encore pour ton aide Céline.
J'ai toujours le même message d'erreure malgré les modifs que j'ai faite. "erreure d' éxécution '9'
L'indice n'appartient pas à la sélection "
Peux tu m'orienter stp
Encore Merci
Workbooks.Open Filename:="P:\Test exportation Maximo\ViewPage.xls", ReadOnly:=True
Dim classeur2 As String
classeur2 = "P:\Teste exportation Macro\ViwPage.xls"
Dim cellulenature As Range
Set cellulenature = Workbooks(classeur2).Worksheets("Sheet1").Columns("A:Z").Find("Nature")
If cellulenature Is Nothing Then
MsgBox "L'onglet 'Sheet1' du fichier PageView.xls ne contient pas de cellule contenant 'Nature'."
Exit Sub
End If
Dim texteDroite As String
texteDroite = cellulenature.Offset(0, 1).Value
Thisworkbooks.Range("K14").Value = texteDroite
End Sub -
Au fait,
cela ne fonctionne que si les deuxième classeur ViewPage.xls est déjà ouvert.
Sinon, il faut déclarer un objet workbook qui va contenir le classeur ViewPage.xls qu'on va ouvrir :
dim classeur2 as workbook
set classeur2 = Workbooks.Open("P:\ViewPage.xls")
puis cela ne s'utilise plus via :
Worbook(classeur2).Worksheets... car ce n'est plus un string
mais directement via :
classeur2.Worksheets ... -
Salut,
Dans la déclaration des variables, appelle-les plutot 'classeur' (workbook) que 'feuille' (worksheet).
Tu n'as pas besoin de déclarer BTmacro puisque tu travailles dedans -> ThisWorkbook :
dim classeur2 as string
classeur2 = "P:\ViewPage.xls"
Ensuite : quand tu écris "Workbooks(feuille2)" c'est bon puisque feuille2 est une variable qui contient un string.
Mais quand tu écris après "Worksheets(Sheet1)" ça bug, puisque Sheet1 n'est ni une variable ni un string : il manque les guillemets.
Idem dans le Find("Nature").
Puis pour la dernière ligne :
Regarde l'aide pour connaître toutes les manières d'utiliser "Range" :
- Range avec des guillemets : Range("K14")
- Cells(ligne, colonne) : Cells(14, 11)
A+ -
En fait après plusieurs essais, je pense que je n'arrive pas à définir le fichier ViewPage.xls en tant que Workbooks.
Je regarde dans l'aide de VB mais c'est pas évident.
Un petit coup de main me ferais pas de mal.
Merci d'avance.
A+ -
Malgré l'aide de Céline, je n'arrive pas à réaliser la macro.
J'ai un message d'erreure d' éxécution '9'
L'indice n'appartient pas à la sélection
Voici la macro:
Merci de m'orienter vers une solution.
A+.
Sub recup_text()
feuille1 = "P:\BTmacro.xls"
feuille2 = "P:\ViewPage.xls"
Workbooks(feuille2).Worksheets(Sheet1).Activate
Dim cellulenature As Range
Set cellulenature = Workbooks(feuille2).Worksheets(Sheet1).Columns("A:Z").Find(Nature)
If cellulenature Is Nothing Then
MsgBox "L'onglet 'Sheet1' du fichier PageView.xls ne contient pas de cellule contenant 'Nature'."
Exit Sub
End If
Dim texteDroite As String
texteDroite = cellulenature.Offset(0, 1).Value
Thisworkbooks.Range(K, 14).Value = texteDroite
End Sub -
Un GRAND MERCI pour ta répons Céline.
Je pense qu'avec tes explications je suis capable de réaliser la macro.
je tente cela dès demain 8h00.
Encore Merci pour ton aide.
A+. -
Super, je crois avoir compris !
Supposons que dans le début de ta macro, tu as déjà ouvert le fichier PageView.xls et que tu le désignes par la l'objet "FichierPW" de type Workbook.
Tu codes dans le fichier BT.xls, donc ce fichier est désigné par "ThisWorkbook".
1) Tu recherches la cellule contenant "Nature" dans la feuille "NomOnglet" du fichier PageView.xls :
dim CelluleNature as range Set CelluleNature = FichierPW.Worksheets("NomOnglet").Columns("A:Z").Find("Nature")
En regardant l'aide sur "Find", tu sauras comment affiner cette recherche : la cellule ne contient que "Nature" (xlWhole), ou elle peut contenir "Nature verte" et tu faire une recherche partielle (xlPart), etc ...
Ici j'ai fait la recherche dans les colonnes A à Z, mais tu choisis où chercher :
- parmi les lignes 13 à 25 : Rows("13:25").find ...
- parmi les cellules B2 à G10 : Range("B2:G10").find ...
Remarque : CelluleNature est un 'objet' range (cellule : objet contient plein de caractéristiques : N°ligne, N°colonne, couleur de fond, police du texte, valeur contenue, ...). Donc contrairement à une simple variable string ou integer, on le définit grâce à "Set".
2) On vérifie que la cellule contenant "Nature" a été trouvée : si la variable "CelluleNature" est vide alors on prévient et on quitte la macro (toujours faire cette vérif après un Set) :
If CelluleNature Is Nothing Then MsgBox "L'onglet 'NomOnglet' du fichier PageView.xls ne contient pas de cellule contenant 'Nature'." Exit sub End If
3) On recueille la valeur contenue dans la cellule située à droite de la CelluleNature :
dim texteDroite as string texteDroite = CelluleNature.Offset(0,1).Value
4) On écrit cette valeur dans le fichier BT.xls dans la cellule F6 :
ThisWorkbook.Range("F6").Value = texteDroite
Y'a plus qu'à croiser les doigts ...
Cél -
il y a un fichier excel BT.xls et un fichier ViewPage.xls
Dans le fichier excel BT.xls , je veux que la cellule F6 affiche le texte situé dans la cellule à droite de la cellule "Nature" du fichier ViewPage.xls.
Le soucis majeure est que la cellule "Nature", ne se trouve pas toujours au méme endroit (parfois H10, ou H11 ou K10 etc......).
Parmi les 2 fichiers excels :
- dans lequel est la cellule dans laquelle tu veux écrire ? BT.xls
- dans lequel est la cellule "nature" ? PageView.xls
- dans lequel est la cellule contenant le texte à recopier ? PageView.xls
je regarde de ce pas l'aide concernant Offset !!!.
Merci de ton aide A+. -
Je n'ai toujours pas compris (argh!) :
Parmi les 2 fichiers excels :
- dans lequel est la cellule dans laquelle tu veux écrire ?
- dans lequel est la cellule "nature" ?
- dans lequel est la cellule contenant le texte à recopier ?
As-tu regardé dans l'aide comment fonctionne "offset" ? très pratique.
Dans ce que tu as déjà codé, as-tu réussi à ouvrir le second fichier ?
Cél -
Merci de ton aide Céline.
Il y a bien deux classeurs excel distinct, l'un se nomme ViewPage.xls et l'autre se nomme BT.xls
En fait une fois la cellule cible reperée, je veus copier le texte qui se situe dans la cellule de droite.
Si dans B1 il y a le texte "Nature" alors je copie le texte de la cellule B2.
A+
- 1
- 2
Suivant