Macro

Bonjour,

je voudrais faire une petite macro qui travaille sur 2 feuilles du même fichier excel.

Je souhaite qu'elle me demande dans quelle feuille je veux chercher, la macro cherche dans cette feuille une cellule X et copie les cellules A(a,a'), B(b,b') et C(c,c') dans le feuille Cible en vérifiant s'il n'y a pas déjà une ligne avec ces valeurs (auquel cas elle ne la copie pas).

J'ai du mal notamment à travailler sur 2 worksheet.

Merci de votre aide.

Bonjour,

Joins un extrait de ton fichier pour illustrer ta demande

Amicalement

Claude

Ca casse pas des briques, j'ai fait ça et bien sûr, ça ne veut pas compiler. Mes boucles sont mal construites.

Option Explicit

Const Parcours = 6
Const Col1 = 1
Const ColP = 8
Const ColT = 9
Const ColMy = 10

Sub Extraction()
    Dim premiereligne, derniereligne As Integer
    Dim resultats, Faron As Range
    Dim i, j, My, Poids As Integer
    Dim Jour, temps As Date
    j = 1

    ActiveSheet = resultats
    premiereligne = Application.InputBox("premiere ligne")
    derniereligne = Application.InputBox("derniere ligne")

    For i = premiereligne To derniereligne

        If Cells(i, Parcours).Value = "TL2" Then
          Jour = Cells(i, Col1).Interior.Value
          temps = Cells(i, ColT).Interior.Value
          My = Cells(i, ColMy).Interior.Value
          Poids = Cells(i, ColP).Interior.Value
        Else: i = i + 1

    ActiveSheet = Faron
        If Cells(j, Col1).Interior.Value = " " Then
            Cells(j, Col1).Interior.Value = Jour
            Cells(j, Col1 + 1).Interior.Value = temps
            Cells(j, Col1 + 2).Interior.Value = My
            Cells(j, Col1 + 3).Interior.Value = Poids
        Else: j = j + 1

        End If
    ActiveSheet = resultats
    Next i

End Sub
5temps.zip (18.61 Ko)

Bonsoir,

Pas trop compris ce que tu veux faire,

1) tes macros devraient être dans un module au lieu du ThisWorkbook

2) soit tu complète les colonnes A:D de la feuille lst_parcours, soit tu fais un tableau.

ici, on teste toute la colonne "F", mais on peut ajouter les InputBox pour déterminer la plage.

Sub ComplèteDonnées()
Dim Lg%, i%, c As Range
        Application.ScreenUpdating = False
        Lg = Range("a65536").End(xlUp).Row
    For i = 2 To Lg
        With Sheets("lst_parcours")
            Set c = Range("choix_parcours").Find(Cells(i, "f"), LookIn:=xlValues)
            If Not c Is Nothing Then
                Cells(i, "b") = .Range(c.Address).Offset(0, 1) 'sport
                Cells(i, "c") = .Range(c.Address).Offset(0, 2) 'distance
                Cells(i, "d") = .Range(c.Address).Offset(0, 3) 'dénivelée
            End If
        End With
    Next i
End Sub

3) Que veux-tu faire sur les feuilles "Faron" et MtCaume ?

à te relire

Amicalement

Claude

Bonjour,

quelques précisions sur ce que souhaite faire.

je voudrais faire une petite macro qui travaille sur 2 feuilles du même fichier excel (resultats_2011 et Faron)

Je souhaite qu'elle me demande dans quelle feuille je veux chercher (ici je choisirai resultats_2011, la macro cherche dans cette feuille une cellule X (TL2 dans la 6eme colonne de la feuille resultats_2011) et copie les cellules A(a,a'), B(b,b') et C(c,c') (ici les valeurs de la ligne où se trouve TL2 et des colonnes 1, 8, 9, 10) dans les colonnes 1, 2, 3 et 4 de la première ligne vide de la feuille Cible (ici Faron) en vérifiant s'il n'y a pas déjà une ligne avec ces valeurs (auquel cas elle ne la copie pas).

Les autres feuilles ne servent pas pour le moment.

J'ai du mal notamment à travailler sur 2 worksheet.

Merci de ton aide.

Bonsoir,

Comme tu ne tiens même pas compte de mes remarques précédentes,

j'abandonne

désolé !

Amicalement

Claude

Je suis contarié de t'avoir contrarié.

Je voulais répondre à la question :

Pas trop compris ce que tu veux faire,

(J'ai essayé de reformuler)

1) tes macros devraient être dans un module au lieu du ThisWorkbook

(Ca, je l'ai fait)

2) soit tu complète les colonnes A:D de la feuille lst_parcours, soit tu fais un tableau.

(Là c'est moi qui ne comprends pas, pourquoi on utilise la feuille lst_parcours)

Sur le script que tu as eu la gentillesse de me proposer,

il y a beaucoup de choses nouvelles pour moi :

    Sub ComplèteDonnées()
    Dim Lg%, i%, c As Range
            Application.ScreenUpdating = False
            Lg = Range("a65536").End(xlUp).Row
        For i = 2 To Lg
            With Sheets("lst_parcours")
                Set c = Range("choix_parcours").Find(Cells(i, "f"), LookIn:=xlValues)
                If Not c Is Nothing Then
                    Cells(i, "b") = .Range(c.Address).Offset(0, 1) 'sport
                   Cells(i, "c") = .Range(c.Address).Offset(0, 2) 'distance
                   Cells(i, "d") = .Range(c.Address).Offset(0, 3) 'dénivelée
               End If
            End With
        Next i
    End Sub

Que signifie le % de Lg% ?

Je ne connais pas non plus Application.ScreenUpdating,

Ni Range("a65536").End(xlUp),

Ni la signification de Set c = Range("choix_parcours").Find(Cells(i, "f"), LookIn:=xlValues).

J'ai essayé d’exécuter la macro mais je n'arrive pas au résultat espéré. Je ne voulais pas compléter la feuille resultats_2011 mais en "extraire" la valeur de certaines cellules pour les envoyer vers la feuille Faron

Encore merci et bonne soirée.

4temps.zip (17.66 Ko)

Bonsoir

A voir

Merci beaucoup,

je vais essayer de comprendre ta macro. Le résultat, en tous cas, c'est celui que je voulais.

Bonne soirée.

Bonjour,

je ne connais pas la fonction find

J'ai essayé de "l'adapter" en remplaçant Set Cel = .Columns("F").Find(what:=Range("Q2"), LookIn:=xlValues, lookat:=xlWhole) par Set Cel = .Columns("F").Find("TL2", LookIn:=xlValues, lookat:=xlWhole).

Comment faire pour que la recherche puisse se faire pour plusieurs mots, je n'y suis pas arrivé en rajoutant un Or "A/Faron" par exemple.

Mes autres essais se sont aussi avérés infructueux.

Merci de votre aide.

With Sheets(Feuille)
    Set Cel = .Columns("F").Find("TL2", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do

Bonjour

Pour connaitre la fonction Find : Dans l'éditeur VB Tu places le curseur sur ce mot et tu appuies sur F1

Sinon le code

Set Cel = .Columns("F").Find("TL2", LookIn:=xlValues, lookat:=xlWhole)

Fonctionne correctement

Pour rechercher sur plusieurs mots je ne connais pas de méthode à part d'y aller par pallier

Recherche le premier mot

une fois trouvé on cherche dans la ligne le 2ème mot

etc ...

Bonne journée

En fait, je souhaiterai que les cellules contenant la valeur A/Faron soit selectionnées aussi, c'est à dire faire la même chose avec :

 Set Cel = .Columns("F").Find("A/Faron", LookIn:=xlValues, lookat:=xlWhole)

Est ce qu'il faut que je recopie tout je script ou est ce que je peux mettre un Or quelque part.

With Sheets(Feuille)
    Set Cel = .Columns("F").Find("TL2", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do
        Ok = True
        Sheets("Faron").Range("A" & Lg) = Cel.Offset(0, -5)

Bonjour

Une idée

Tu lances la macro avec TL2 en Q2 puis tu relances la macro avec A/Faron en Q2

C'est ce résultat que tu veux ?

Oui.

Rechercher des sujets similaires à "macro"