Aide excel Macro

Résolu/Fermé
kaiser4 - 10 sept. 2008 à 11:31
kaiser4 Messages postés 109 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 11 mars 2024 - 12 sept. 2008 à 09:49
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+
A voir également:

22 réponses

cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
10 sept. 2008 à 11:38
Bonjour,

Si j'ai bien compris :

Ta macro est dans FichierExcel1.xls
Elle a ouvert un FichierExcel2.xls, et après avoir repéré la cellule de départ (plusieurs méthodes possibles), tu désires mémoriser la valeur de la cellule située à sa gauche.

Utilise Offset :

Si CelluleCible est une variable Range désignant la cellule de départ, alors
CelluleCible.Offset(-1,0).Value contiendra le texte recherché.

Bonne journée
Céline
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
10 sept. 2008 à 11:41
Je ne crois pas t'avoir bien compris d'ailleurs ....
0
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+
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
10 sept. 2008 à 13:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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+.
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
10 sept. 2008 à 17:34
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
0
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+.
0
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
0
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+
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
11 sept. 2008 à 15:05
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+
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
11 sept. 2008 à 15:10
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 ...
0
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
0
Argh !!!!!!

Je n'y arrive toujours pas.

Toujours ce même message d'erreure.

Un peu d'aide SVP.

Merci.
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
11 sept. 2008 à 16:54
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.
0
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
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
11 sept. 2008 à 18:05
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+
0
cel92 Messages postés 28 Date d'inscription mercredi 13 février 2008 Statut Membre Dernière intervention 16 décembre 2008 13
11 sept. 2008 à 18:08
( 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)
0
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
0
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
0
kaiser4 Messages postés 109 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 11 mars 2024 2
12 sept. 2008 à 09:30
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+.
-1