Condition sur la première cellule

Fermé
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015 - 26 nov. 2014 à 12:37
 Statisticien - 2 déc. 2014 à 09:59
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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 nov. 2014 à 13:01
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
26 nov. 2014 à 13:11
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 nov. 2014 à 13:57
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
26 nov. 2014 à 14:08
j'en ai plus de 1746 et ça sera récurrent.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 nov. 2014 à 14:39
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
26 nov. 2014 à 15:18
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 nov. 2014 à 15:35
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
26 nov. 2014 à 16:12
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

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 26/11/2014 à 15:40
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
26 nov. 2014 à 17:34
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 nov. 2014 à 17:36
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
26 nov. 2014 à 17:53
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
27 nov. 2014 à 06:53
Merci pour le "au passage, elle a l'air bien"...

quelle suffisance !!!
0
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
27 nov. 2014 à 09:16
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
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