Condition sur la première cellule
Statisticien
Messages postés
26
Statut
Membre
-
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
- Proteger cellule excel - Guide
- Aller à la ligne dans une 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.