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
Statisticien - 2 déc. 2014 à 09:59
A voir également:
- Condition sur la première cellule
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Verrouiller cellule excel - Guide
- Si la cellule contient le mot alors ✓ - Forum Excel
- Premiere pro gratuit - Télécharger - Montage & Édition
6 réponses
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
26 nov. 2014 à 13:01
26 nov. 2014 à 13:01
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 )
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
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.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
26 nov. 2014 à 13:57
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
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
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
26 nov. 2014 à 14:08
j'en ai plus de 1746 et ça sera récurrent.
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
26 nov. 2014 à 14:39
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.
...
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
...
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
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 !
j'ai essayé de spécifier le worbook avec : Workbooks("Classeur2").Sheets("Feuil1") . Toujours rien !
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
26 nov. 2014 à 15:35
26 nov. 2014 à 15:35
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...
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
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
26 nov. 2014 à 16:12
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.
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 26/11/2014 à 15:40
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
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
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
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.
Merci encore une autre fois. Jordane, merci beaucoup.
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
26 nov. 2014 à 17:36
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
( 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
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
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!!!
Merci Merci à toutes et à tous.
(Merci Merci )^2000 à Jordane!!!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
27 nov. 2014 à 06:53
27 nov. 2014 à 06:53
Merci pour le "au passage, elle a l'air bien"...
quelle suffisance !!!
quelle suffisance !!!
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
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.
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.