Macro excel : chercher valeur de cellules

Résolu
Pawn -  
 Pawn -
Bonjour,

Je souhaite saisir une valeur contenue dans une cellule( Fonction copier ),
rechercher cette valeur dans une plage de cellules d'un autre classeur afin
de sélectionner une partie de la ligne située 7 cases à droite de cette cellule
contenant la bonne valeur pour ensuite copier cette nouvelle slection.
La nouvelle selection effectuée doit ensuite
être coller dans le premier classeur.
Elle doit être lancée par une MACRO.
Les essais effectués supprime les valeurs cherchées.

Pouvez vous m'indiquer quel est le Sub de MACRO pour obtenir le bon résultat ?

Merci à tous

ps : Excel 2003
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Pawn
     
    Merci Lermite222,
    la voici.

    Dim i As Integer

    Windows("classeur1").Activate
    Worksheets("feuil1").Activate

    For i = 6 To 2500

    n = n + 1

    Cells(i, 3).Value = Empty '(Si je retire value sa ne fonctionne plus)
    valcherche = Cells(B & n).Value

    Windows("Classeur2").Activate
    Worksheets("Feuil1").Activate

    If Cells(i, 3).Value = valcherche Then

    End If
    Next i

    Range(Cells(i, 8), Cells(i, 36)).Select
    Selection.Copy

    Windows("classeur1").Activate
    Worksheets("feuil1").Activate

    Range(Cells(i, 7), Cells(i, 35)).Select
    ActiveSheet.Paste '(me colle une seul ligne)
    2
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Les essais effectués supprime les valeurs cherchées
    Montre la macros qui efface les données, ont pourra peut-être la corrigé.
    A+
    1
    1. Pawn
       
      au cas ou ...

      Dim i As Integer

      Windows("classeur1").Activate
      Worksheets("feuil1").Activate

      For i = 6 To 2500

      n = n + 1

      Cells(i, 3).Value = Empty '(Si je retire value sa ne fonctionne plus)
      valcherche = Cells(B & n).Value

      Windows("Classeur2").Activate
      Worksheets("Feuil1").Activate

      If Cells(i, 3).Value = valcherche Then

      End If
      Next i

      Range(Cells(i, 8), Cells(i, 36)).Select
      Selection.Copy


      Windows("classeur1").Activate
      Worksheets("feuil1").Activate

      Range(Cells(i, 7), Cells(i, 35)).Select
      ActiveSheet.Paste '(me colle une seul ligne)
      0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    C'est dur a comprendre...
    Copie cette macro et dit-moi si elle s'arrète sur le stop. Si j'ai compris, tu prend une cellule du classeur 1 colonne B (2) et tu la recherche dans le classseur 2 à la colonne C (3)
    Si c'est comme ca, la macro devrait s'arrèter dés qu'il y a concrdance.
    Si c'est pas ca met tes 2 classeur sur Cjoint
    https://www.cjoint.com/

    Sub CopieCell()
    Dim FL1 As Worksheet
    Dim FL2 As Worksheet
    Dim i As Long, e As Long
    Dim Valcherche As Variant
        Set FL1 = Workbooks("classeur1").Worksheets("feuil1")
        Set FL2 = Workbooks("classeur2").Worksheets("feuil1")
        
        'Pour aller jusqu'a la dernière ligne renseignée.
        For i = 6 To FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
           'Valcherche = FL1.Cells(i, 2).Value 'Pas nécessaire.
            For e = 1 To FL2.Range("A1").SpecialCells(xlCellTypeLastCell).Row
                If FL2.Cells(e, 3) = FL1.Cells(i, 2).Value Then
                Stop
            Next e
        Next i
    End Sub

    1
    1. Pawn
       
      Il s'arrete à next e.

      Je ne peux pas envoyer les fichiers ils sont confidentiels :s sa complique la chose.
      il ne trouve pas de concordance.

      Je ne vois pas de compteur i et e pour incrementer les cellules

      le step by step (F8) ne passe pas.

      je vais essayer de faire rapidement des fichiers du meme type sur quelques ligne.
      0
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Pawn
         
        Ce sont les boucles i et e qui incrémente les variables.
        Et pour les fichiers, OK met quelques lignes, les même noms, les même feuilles, et avec un exemple du résultat souhaiter en le notant pour que je sache ce que tu veux.
        0
      2. Pawn > lermite222 Messages postés 9042 Statut Contributeur
         
        https://www.cjoint.com/?hdnwihiavW

        Tu trouvera un classeur avec les exemples, j'espere que sa ira.

        Merci
        0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    bonjour,
    quelque petit problèmes que je comprend pas...
    Dim i As Integer

    Windows("classeur1").Activate
    Worksheets("feuil1").Activate

    For i = 6 To 2500
    'Pourquoi un 2ém compteur
    n = n + 1

    Cells(i, 3).Value = Empty '(Si je retire value sa ne fonctionne plus)
    Empty =Rien donc tu vide la cellule
    valcherche = Cells(B & n).Value 'Où est la valeur de b

    Windows("Classeur2").Activate
    Worksheets("Feuil1").Activate

    If Cells(i, 3).Value = valcherche Then
    qu'est-ce qu'ont fait ?
    End If
    Next i

    Range(Cells(i, 8), Cells(i, 36)).Select
    Selection.Copy

    Windows("classeur1").Activate
    Worksheets("feuil1").Activate

    Range(Cells(i, 7), Cells(i, 35)).Select

    ActiveSheet.Paste '(me colle une seul ligne)
    Explique déjà ,ca..
    A+
    0
    1. Pawn
       
      Bonjour Lermite222

      Dim i As Integer

      Windows("classeur1").Activate
      Worksheets("feuil1").Activate

      For i = 6 To 2500
      'Pourquoi un 2ém compteur ==> 2 Fichiers avec un nombre different de ligne. Au debut je voulais faire i = 6 to n (si insertion de ligne)
      n = n + 1

      Cells(i, 3).Value = Empty '(Si je retire value sa ne fonctionne plus)
      Empty =Rien donc tu vide la cellule ==> je pensais à compte jusqu'à ligne vide
      valcherche = Cells(B & n).Value 'Où est la valeur de b ===> B c'est la colonne

      Windows("Classeur2").Activate
      Worksheets("Feuil1").Activate

      If Cells(i, 3).Value = valcherche Then
      qu'est-ce qu'ont fait ? ===== >Prend la valeur de la cellule pour la comparer avec l'autre classeur si identique il me copie une partie de la ligne.
      End If
      Next i

      Range(Cells(i, 8), Cells(i, 36)).Select
      Selection.Copy


      Windows("classeur1").Activate
      Worksheets("feuil1").Activate

      Range(Cells(i, 7), Cells(i, 35)).Select

      ActiveSheet.Paste '(me colle une seul ligne)


      PS : Je débute en VBA ^^'
      0
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Maintenant ont va pouvoir commencer le débogage...Mais reste quelques points obscures...
    explique où et comment tu trouve - Valcherche
    D'une manière générale essaye d'expliquer plus clairement ce que tu veux faire, avec ta macro c'est incompréhensible.
    Tu copie de Classeur? à Classeur?.. 'là je crois que c'est du 1 au 2
    Tu parle d'ajouter des lignes mais je vois ca nulle part ?
    0
    1. Pawn
       
      La macro d'ajout de ligne à été faite il y a 1 mois, c'etait juste pour donner une info : les lignes ne sont pas fixe.

      pour Valcherche je pensais prendre la valeur de la cellule cells(B,i)
      d'où le valcherche = Cells(B & i).Value

      Je copie de classeur2 ("H" & n & " : " & "AJ" & n) à classeur 1 ("G" & i & ":" & "AI" & i).
      Je ne sais pas si les 2 compteurs sont vraiment utile.
      0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Ca vaux pas la peine que je remette les classeur,copie la macro ci-dessous DANS UN MODULE (pas un module de feuille)
    Sub CopieCell()
    Dim FL1 As Worksheet
    Dim FL2 As Worksheet
    Dim i As Long, e As Long
    Dim Valcherche As Variant
       ' Set FL1 = Workbooks("classeur1").Worksheets("feuil1")
       ' Set FL2 = Workbooks("classeur2").Worksheets("feuil1")
       
       'Pour le test dans le classeurs envoyer...
       Set FL1 = Workbooks("Pour-Macro.xls").Worksheets("Classeur1   Feuil1")
       Set FL2 = Workbooks("Pour-Macro.xls").Worksheets("Classeur2    Feui 2")
       
        'Pour aller jusqu'a la dernière ligne renseignée.
        For i = 7 To FL1.Range("B1").SpecialCells(xlCellTypeLastCell).Row
            For e = 6 To FL2.Range("B1").SpecialCells(xlCellTypeLastCell).Row
                If FL2.Cells(e, 2) = FL1.Cells(i, 3).Value Then
                    FL2.Range(Cells(e, 4), Cells(e, 7)).Copy FL1.Cells(i, 4)
                End If
            Next e
        Next i
    End Sub

    Reste une chose que j'ai pas compris, la colonne avec les ok et nok, elle sert à quoi ?
    Et toutes les données sont toujours recopiées ou bien uniquement cells qui ne sont pas encore actualisées ?

    0
  8. Pawn
     
    Bonjour Lermite222,

    j'ai testé ta macro et elle ne passe pas, mais j'ai chercher encore de mon coté et j'ai réussi a copier.
    L'actualisation je sais pas faire.
    Si un la cible change de place je vois pas comment l'actualisé.
    Les Ok et nok, elle ne sert a rien c'est une colonne que j'ai rajouté pour ciblé les endroits à copier/coller.

    Comment copier que les cellules qui on été actualisé ??

    Pour infos :

    Sub CopCol()

    'Lance la mise à jour

    Windows("Classeur1.xls").Activate
    Sheets("Feuil1").Activate
    lignemaxC1 = 5
    Do
    lignemaxC1 = lignemaxC1 + 1
    Loop Until Cells(lignemaxC1, 3).Value = ""

    Windows("Classeur2.xls").Activate
    Sheets("Details DIMat-X").Activate
    lignemaxC1 = 5
    Do
    lignemaxC2 = lignemaxC2 + 1
    Loop Until Cells(lignemaxC2, 2).Value = ""

    For i = 6 To lignemaxC1 - 1
    Windows("Classeur1.xls").Activate
    Sheets("Feuil1").Activate
    Cells(i, 3).Select
    valeurchercher = ActiveCell.Value

    trouve = False
    ligne = 100
    Do
    Windows("Classeur2.xls").Activate
    Sheets("Details DIMat-X").Activate
    Cells(ligne, 2).Select
    If Selection.Value = valeurchercher Then
    trouve = True
    Range(Cells(ligne, 8), Cells(ligne, 37)).Select
    Selection.Copy
    Windows("Classeur2.xls").Activate
    Sheets("Feuil1").Activate
    Cells(i, 7).Select
    ActiveSheet.Paste
    GoTo suivantC1
    End If
    ligne = ligne + 1
    Loop Until ligne = lignemaxC2
    If trouve <> True Then
    MsgBox ("non trouvée !")
    End If
    suivantC1:

    Next i
    Range("B5").Select

    End Sub
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Si la macro "ne passe pas" c'est que tu ne l'a pas tester sur le fichier que tu m'a envoyer, je l'ai tester plusieurs fois et elle fonctionnait parfaitement.
    Attention aux nom des feuilles, plutôt que de les écrire fait un copier/coller, car une erreur est vite arrivée, regarde dans le classeur envoyé, il y a une erreur dans le 2ém nom... et si j'avais pas fait copier/coller la macro se serrait plantée.
    0
  10. Pawn
     
    Ok, un grand merci!!

    je vais regarder sa ^^.

    Bonne journée
    0
  11. Pawn
     
    Salut,

    La demande est résolue, je n'arrive pas à changer le statut.

    Encore merci!
    0