Condition sur la première cellule
Statisticien
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
Statisticien -
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.
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.
A voir également:
- Condition sur la première cellule
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Proteger cellule excel - Guide
- Telecharger adobe premiere pro gratuit windows 10 - Télécharger - Montage & Édition
- Dans le document à télécharger : affichez l'ensemble des diapositives à l'écran avec 5 diapositives par ligne. repérez le groupe de 3 diapositives avec une fleur identique alignées verticalement, supprimez la première d'entre elles. un nouveau groupe de 3 diapositives avec une fleur identique alignées verticalement apparaît, supprimez encore la première d'entre elles. déplacez les 3 premières diapositives de la 4e ligne au début de la présentation. quel mot est formé par les lettres de la première colonne ? - Forum Powerpoint
6 réponses
Bonjour,
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 )
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 )
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.
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
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
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.
...
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
...
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 !
j'ai essayé de spécifier le worbook avec : Workbooks("Classeur2").Sheets("Feuil1") . Toujours rien !
Roxane ???
Où ça ?
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 :
( ou de la mettre à TRUE ) pour voir "bouger" le classeur...
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...
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
Michel
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
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.
Merci encore une autre fois. Jordane, merci beaucoup.
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
( 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
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.
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.