Condition sur la première cellule

Statisticien Messages postés 26 Statut Membre -  
 Statisticien -
Bonjour tout le monde,

je cherche à copier les lignes figurant dans la feuille 1 dont la cellule qui se trouve à la première colonne est égale = 83654. Et les coller dans la feuille 2.
Pouvez-vous m'aider ? je vous remercie d'avance.

6 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Pouvez-vous m'aider ?

    Oui.

    Sur quoi bloques tu ?

    Tu as plusieurs façons de faire...
    La plus simple étant une BOUCLE ...

    => Tu boucles sur toutes les cellules de ta feuille 1
    A chaque fois que la cellule Ax (x etant le numéro de ligne où tu te trouves)..
    Tu copie la ligne... tu affiches la feuille 2 .. tu colles la ligne ( au passage tu incrémente un compteur qui permettra de savoir sur quelle ligne coller la nouvelle donnée)

    => Une autre méthode serait de passer par la méthode FIND ( mais là.. c'est plus compliqué.. donc je ne t'en parlerai pas plus )
    0
  2. Statisticien Messages postés 26 Statut Membre
     
    Vu que je suis toujours débutant, j'ai pas su formuler le code. Puisque le problème, c'est que mon fichier de départ comporte plusieurs celulles séparées contenant la valeur cherchée. Alors à chaque fois que je dois coller, je dois coller après les celulles collées auparavant.
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour

      Si tu as peu de lignes, le problème peut se résoudre par formules sans VBA...
      Voir:
      https://www.cjoint.com/?3KAjpHbNwnz

      Si tu en as beaucoup, combien environ ?...
      dans cette attente
      0
      1. Statisticien Messages postés 26 Statut Membre > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        j'en ai plus de 1746 et ça sera récurrent.
        0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Voici le code... à l'aide d'une boucle.
    On peut l'améliorer en passant par un FINDALL... mais bon.. je ne pense pas que ça te soit vraiment utile.

    
    
    Sub copieRows()
    Application.ScreenUpdating = False
        Dim Fsource As Worksheet
        Dim Fcible As Worksheet
        Dim RngSource As Range
        Dim LasRow As Long
        Dim crit As String
        Dim NumLignAcopier As Long
        
        'Feuille source
        Set Fsource = Sheets("Feuil1")
        
        'Feuille cible
        Set Fcible = Sheets("Feuil2")
        
        'Critère de comparaison
        crit = "83654"
        
        ' On défini la plage contenant les cellules à traiter
        Set RngSource = Range("A1:A2000")
        
        'On boucle sur les cellules..
        For Each cell In RngSource
         valCel = cell.Value
         If valCel = crit Then
            NumLignAcopier = cell.Row
            
            'Copie de la ligne:
            Rows(NumLignAcopier).Select
            Selection.Copy
            
            'On se place dans la feuille Cible
            Fcible.Activate
            'On trouve la dernière ligne non vide + 1
            LastRow = Derniere_Ligne(Fcible.Name)
            'On colle la ligne
            Cells(LastRow, 1).Select
            ActiveSheet.Paste
            'On se remet dans la feuille 1
             Fsource.Activate
         End If
        Next
    Application.ScreenUpdating = True
    End Sub
    
    
    Function Derniere_Ligne(Nom_Feuille As String) As Long
     Sheets(Nom_Feuille).Activate
     Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1 'pour les lignes
    End Function
    
    


    ...
    0
  4. Statisticien Messages postés 26 Statut Membre
     
    Je te remercie infiniment Roxane. Ton code est très bien détaillé. Problème : quand j'exécute rien ne se passe !!! absolument rien ! une idée peut être ?
    j'ai essayé de spécifier le worbook avec : Workbooks("Classeur2").Sheets("Feuil1") . Toujours rien !
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Roxane ???

      j'ai essayé de spécifier le worbook avec : Workbooks("Classeur2").Sheets("Feuil1")

      Où ça ?


      Problème : quand j'exécute rien ne se passe !!! absolument rien ! une idée peut être ?

      Tu as essayé en mode PAS A PAS .. et tu regarde ce que le programme fait.

      PS: Pour gagner du temps dans l'execution du programme j'ai désactivé l'affichage (temps réel) .. il suffit de commenter la ligne :
      Application.ScreenUpdating = False
      

      ( ou de la mettre à TRUE ) pour voir "bouger" le classeur...
      0
      1. PlacageGranby Messages postés 402 Statut Membre 26 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonjour Statisticien, tu as mentionné être débutant.

        Donc, pour trouver le problème d'une macro, comme spécifié par jordane45.
        Tu peux aller dans l'éditeur Visual Basic et mettre un point d'arret dans le code.

        Tu click dans la marge gauche, et ça fait un point rouge.
        Quand le code va s'exécuté, il va arrêter à cet endroit, et ensuite tu fais F8 pour avancer lentement ligne par ligne.
        Tu peux voir lors de l'éxécution le contenu des variables si tu "mouse over", et tu peux voir s'il entre ou pas dans les condition IF

        En gros, c'est l'outil ultime du programmeur et ce n'est pas conseillé de s'enfoncer dans le code sans se familiariser avec les moyen pour debuggé le code.

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

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Re,

    version peut-^tre + rapide (en supposant qu'il y ait des entêtes en ligne1 afin d'éviter de recopier une ligne entière inutilement)
    Au besoin met un extrait de ton classeur sur Cjoint.com

    Option Explicit
    Const valeur As Long = 83654
    '---
    Sub copier_si()
    Dim Derlig As Integer, Dercol As Integer, Nbre As Integer
    Dim T_in, T_out, Idx_in As Integer, Idx_out As Integer, Col As Integer
    Dim start As Single

    'initialisations
    start = Timer
    Application.ScreenUpdating = False
    With Sheets(1)
    Dercol = .Rows(1).Find("*", , , , , xlPrevious).Column
    Derlig = .Columns("A").Find(valeur, , , , , xlPrevious).Row
    Nbre = Application.CountIf(.Columns("A"), valeur)
    T_in = Range(.Cells(1, "A"), .Cells(Derlig, Dercol))
    ReDim T_out(1 To Nbre, 1 To Dercol)
    End With

    'Recherche lignes avec valeur
    For Idx_in = 1 To UBound(T_in)
    If T_in(Idx_in, 1) = valeur Then
    Idx_out = Idx_out + 1
    For Col = 1 To Dercol
    T_out(Idx_out, Col) = T_in(Idx_in, Col)
    Next
    End If
    Next
    'restitution
    Sheets(2).Range("A1").Resize(Nbre, Dercol) = T_out
    Application.ScreenUpdating = True
    MsgBox "durée: " & Timer - start & " sec."

    End Sub


    Michel
    0
  7. Statisticien Messages postés 26 Statut Membre
     
    Je vous remercie tous pour votre aide et spécialement jordane. Effectivement, je suis encore débutant mais le code généré par l'enregistrement de la macro, sans commentaires, est très difficile à maîtriser pour un débutant. Encore pire, ça embrouille encore plus le débutant. Si vous avez des liens utiles pour moi, je vous serais très reconnaissant.
    Merci encore une autre fois. Jordane, merci beaucoup.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Avec plaisir.
      ( au passage .. la version de Michel a l'air bien également... même si elle manque, pour toi, de commentaires...)

      par contre..
      Si la question est résolue..
      Merci de ne pas oublier de clôturer le sujet
      (en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

      Cordialement,
      Jordane
      0
    2. Statisticien Messages postés 26 Statut Membre
       
      Je vais marqué comme résolu, mais avant je voudrais vous remercier encore une autre fois, puisque grâce à vous j'ai pu résoudre un problème qui m'a irrité pendant toute une journée.

      Merci Merci à toutes et à tous.

      (Merci Merci )^2000 à Jordane!!!
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Merci pour le "au passage, elle a l'air bien"...

      quelle suffisance !!!
      0
    4. Statisticien Messages postés 26 Statut Membre
       
      Michel_m, je te remercie sincèrement pour ton aide. C'est juste que comme je suis encore débutant, je ne l'ai pas bien comprise. Merci encore une autre fois et à la prochaine.
      0
    5. Statisticien
       
      Bonjour à toutes et à tous,

      Toujours dans le même sujet. La dernière fois que ça a marché, j'exuctais avec un bouton qui figurait dans la même feuille de calcul. Maintenant, que j'ai crée un autre classeur excel : automated, depuis lequel on peut manipuler l'autre classeur, ça bloque. On souligne dans le code donné par jordane : Set Fsource = Sheets("balance22")
      et on me dit l'indice n'appartient pas à la séléction.

      Avez-vous une idée ?

      Merci beaucoup les amis.
      0