VBA copie cellules sous conditions
Fermé
cricri94
-
17 févr. 2008 à 19:32
blue007 Messages postés 1 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 10 mai 2012 - 10 mai 2012 à 11:15
blue007 Messages postés 1 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 10 mai 2012 - 10 mai 2012 à 11:15
A voir également:
- VBA copie cellules sous conditions
- Copie cachée - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Copie écran samsung - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie disque dur - Guide
6 réponses
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
18 févr. 2008 à 00:01
18 févr. 2008 à 00:01
Bonsoir Cricri,
il y a de bonnes idées dans ce que tu as écrit, mais tout ne me semble pas toujours dans le bon ordre
Je te propose de t'inspirer de la petite procédure ci-dessous, qui suit le schéma suivant :
- sélection de la feuille "à lire" ("Paris")
- lecture de chaque ligne, tant que la cellule A n'est pas vide
- si la ligne répond aux deux conditions, alors écriture des données des colonnes C-D-B et K dans la feuille "à écrire" ("SHB-"), sans l'activer
A toi de jouer !
Dim DerniereLigne As Long 'dans la feuille à écrire
Dim LigneActive As Long 'dans la feuille à lire
Sub Procedure()
Sheets("Paris").Select
Range("A2").Select
While ActiveCell.Value <> Empty
LigneActive = ActiveCell.Row 'n° de la ligne "à lire"
If Cells(LigneActive, 6).Value = "H" And Cells(LigneActive, 11).Value = "B-" Then
'écriture dans la feuille "SHB-"
With Sheets("SHB-")
DerniereLigne = .Range("A65536").End(xlUp).Offset(1, 0).Row 'n° de la ligne "à écrire"
.Cells(DerniereLigne, 1).Value = Cells(LigneActive, 3).Value 'écrit dans la 1ère colonne la valeur trouvée dans la colonne C
.Cells(DerniereLigne, 2).Value = Cells(LigneActive, 4).Value ' écrit dans la 2è colonne la valeur trouvée dans la colonne D
.Cells(DerniereLigne, 3).Value = Cells(LigneActive, 2).Value ' écrit dans la 3è colonne la valeur trouvée dans la colonne B
.Cells(DerniereLigne, 4).Value = Cells(LigneActive, 11).Value 'écrit dans la 4è colonne la valeur trouvée dans la colonne K
End With
End If
ActiveCell.Offset(1, 0).Activate
Wend
End Sub
il y a de bonnes idées dans ce que tu as écrit, mais tout ne me semble pas toujours dans le bon ordre
Je te propose de t'inspirer de la petite procédure ci-dessous, qui suit le schéma suivant :
- sélection de la feuille "à lire" ("Paris")
- lecture de chaque ligne, tant que la cellule A n'est pas vide
- si la ligne répond aux deux conditions, alors écriture des données des colonnes C-D-B et K dans la feuille "à écrire" ("SHB-"), sans l'activer
A toi de jouer !
Dim DerniereLigne As Long 'dans la feuille à écrire
Dim LigneActive As Long 'dans la feuille à lire
Sub Procedure()
Sheets("Paris").Select
Range("A2").Select
While ActiveCell.Value <> Empty
LigneActive = ActiveCell.Row 'n° de la ligne "à lire"
If Cells(LigneActive, 6).Value = "H" And Cells(LigneActive, 11).Value = "B-" Then
'écriture dans la feuille "SHB-"
With Sheets("SHB-")
DerniereLigne = .Range("A65536").End(xlUp).Offset(1, 0).Row 'n° de la ligne "à écrire"
.Cells(DerniereLigne, 1).Value = Cells(LigneActive, 3).Value 'écrit dans la 1ère colonne la valeur trouvée dans la colonne C
.Cells(DerniereLigne, 2).Value = Cells(LigneActive, 4).Value ' écrit dans la 2è colonne la valeur trouvée dans la colonne D
.Cells(DerniereLigne, 3).Value = Cells(LigneActive, 2).Value ' écrit dans la 3è colonne la valeur trouvée dans la colonne B
.Cells(DerniereLigne, 4).Value = Cells(LigneActive, 11).Value 'écrit dans la 4è colonne la valeur trouvée dans la colonne K
End With
End If
ActiveCell.Offset(1, 0).Activate
Wend
End Sub
Bonjour Cricri,
Ah ! les joies du bénévolat en milieu associatif, qui te fait bosser un dimanche soir sur un %##! de fichier à 27 feuilles !
Difficile de donner une réponse précise sans avoir l'obje sous les yeux, mais voici quelques pistes (je ne suis pas non plus spécialiste, ce ne sont que des suggestions ) :
Pour descendre une à une toutes les lignes de ton tableau, il te faudra une boucle
par exemple : la boucle s'effectue jusqu'à ce qu'on arrive à une cellule vide (en fait, tant que (while) la cellule active n'est pas vide)
While Activecell.value <> empty
[.....]
[.....]
Activecell.offset(1,0).activate 'activer la cellule suivante vers le bas
Wend
Pour faire tes tests, il te faut une condition si...alors (if... then)
If Cells (activecell.row,6) = "H" And Cells(activecell.row,11) = "B-" then
[...]
End If
J'utilise ici une des nombreuses façons d'identifier une cellule : Cells(n° ligne, n° colonne), avec ici n° ligne qui est activecell.row (n° de la ligne de la cellule active) et n° colonne = 6 pour la colonne F et 11 pour la colonne K
Pour aller écrire à la fin de ta feuille "SHB-", on peut essayer qqch comme :
Sheets ("SHB-").range("A1").end(xldown).offset(1,0)
ce qui se traduit par :
dans la feuille ("SHB-"), à partir de la cellule A1, aller jusqu'à la dernière valeur trouvée vers le bas (end(xldown)) et passer à la ligne suivante (offset(1,0) décale d'une ligne vers le bas et de 0 colonne, c'est à dire passe à la ligne suivante)
Bon courage ! N'hésite pas à consulter l'aide en ligne de l'éditeur VBA, c'est trèsinstructif !
Ah ! les joies du bénévolat en milieu associatif, qui te fait bosser un dimanche soir sur un %##! de fichier à 27 feuilles !
Difficile de donner une réponse précise sans avoir l'obje sous les yeux, mais voici quelques pistes (je ne suis pas non plus spécialiste, ce ne sont que des suggestions ) :
Pour descendre une à une toutes les lignes de ton tableau, il te faudra une boucle
par exemple : la boucle s'effectue jusqu'à ce qu'on arrive à une cellule vide (en fait, tant que (while) la cellule active n'est pas vide)
While Activecell.value <> empty
[.....]
[.....]
Activecell.offset(1,0).activate 'activer la cellule suivante vers le bas
Wend
Pour faire tes tests, il te faut une condition si...alors (if... then)
If Cells (activecell.row,6) = "H" And Cells(activecell.row,11) = "B-" then
[...]
End If
J'utilise ici une des nombreuses façons d'identifier une cellule : Cells(n° ligne, n° colonne), avec ici n° ligne qui est activecell.row (n° de la ligne de la cellule active) et n° colonne = 6 pour la colonne F et 11 pour la colonne K
Pour aller écrire à la fin de ta feuille "SHB-", on peut essayer qqch comme :
Sheets ("SHB-").range("A1").end(xldown).offset(1,0)
ce qui se traduit par :
dans la feuille ("SHB-"), à partir de la cellule A1, aller jusqu'à la dernière valeur trouvée vers le bas (end(xldown)) et passer à la ligne suivante (offset(1,0) décale d'une ligne vers le bas et de 0 colonne, c'est à dire passe à la ligne suivante)
Bon courage ! N'hésite pas à consulter l'aide en ligne de l'éditeur VBA, c'est trèsinstructif !
Bon, j'en suis là, donc un peu nulle part...
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
Sheets("Paris").Select
For Each Ligne In Sheets("Paris")
Sheets("SHB-").Activate ' feuille de destination
NumLig = 2 'N° de la 1er ligne de données
With Sheets("Paris") ' feuille source'
NbrLig = .Cells(65536, Col).End(xlUp).Row
End With
If Cells(ActiveCell.Row, 6).Value = "B-" Then
If Cells(ActiveCell.Row, 11).Value = "H" Then
Cells(Lig, Col).Column("C", "D", "B", "K").Copy
NumLig = NumLig + 1
Sheets("SHB-").Cells(NumLig, 1).Insert Shift:=xlDown
'ici pour insérer ou .Paste pour coller'
End If
MsgBox ("C'est fini !!")
End Sub
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
Sheets("Paris").Select
For Each Ligne In Sheets("Paris")
Sheets("SHB-").Activate ' feuille de destination
NumLig = 2 'N° de la 1er ligne de données
With Sheets("Paris") ' feuille source'
NbrLig = .Cells(65536, Col).End(xlUp).Row
End With
If Cells(ActiveCell.Row, 6).Value = "B-" Then
If Cells(ActiveCell.Row, 11).Value = "H" Then
Cells(Lig, Col).Column("C", "D", "B", "K").Copy
NumLig = NumLig + 1
Sheets("SHB-").Cells(NumLig, 1).Insert Shift:=xlDown
'ici pour insérer ou .Paste pour coller'
End If
MsgBox ("C'est fini !!")
End Sub
C'est super !! ça marche !! Sauf que... les valeurs sont doublées cad que mes résultats sont copiés deux fois dans la feuille de destination (SHB-)... Je vais essayer de trouver où ça coince... Ou ce serait abuser de demander si tu as encore une idée...
En tout cas, vraiment merci beaucoup...
En tout cas, vraiment merci beaucoup...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Rectification, ça marche très bien...
La 1ère fois, effectivement, les résultats étaient doublés mais je viens de réessayer depuis le début et c'est IMPECCABLE!!
Merci beaucoup beaucoup...
A bientôt,
Cricri
La 1ère fois, effectivement, les résultats étaient doublés mais je viens de réessayer depuis le début et c'est IMPECCABLE!!
Merci beaucoup beaucoup...
A bientôt,
Cricri
blue007
Messages postés
1
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
10 mai 2012
Modifié par blue007 le 10/05/2012 à 12:10
Modifié par blue007 le 10/05/2012 à 12:10
Bonjour cricri94,
Donc je ne sais pas si vous êtes toujours inscris sur ce forum, mais j'ai besoin de vos conseils, j'ai appliqué ton algo sur une table que j'utilise et sa marche nikel mais le problème il ne parcoure pas ligne pas ligne, en gros il fait la 1er ligne et il s'arrête.
Vous avez une solution ?
Merci
Donc je ne sais pas si vous êtes toujours inscris sur ce forum, mais j'ai besoin de vos conseils, j'ai appliqué ton algo sur une table que j'utilise et sa marche nikel mais le problème il ne parcoure pas ligne pas ligne, en gros il fait la 1er ligne et il s'arrête.
Vous avez une solution ?
Merci
24 mars 2009 à 20:52