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+
Configuration: Windows XP
Internet Explorer 7.0

22 réponses

  1. En effet, maintenant cela fonctionne.

    Je veut dire un GRAND MERCI à Cel92 et Wilfried_42.

    Merci beaucoup.

    A+.
    1. Contributeur
      bonjour

      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
      1. 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. 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
          1. 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
            1. ( 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)
              1. 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+
                1. 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
                  1. 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.
                    1. Argh !!!!!!

                      Je n'y arrive toujours pas.

                      Toujours ce même message d'erreure.

                      Un peu d'aide SVP.

                      Merci.
                      1. 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
                        1. 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 ...
                          1. 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+
                            1. 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+
                              1. 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
                                1. 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+.
                                  1. 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
                                    1. 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+.
                                      1. 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
                                        1. 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