Vba
Résolu
herve27f
Messages postés
7
Statut
Membre
-
herve27f Messages postés 7 Statut Membre -
herve27f Messages postés 7 Statut Membre -
Bonjour,
quelqu'un pourrait-t-il m aider
je suis un utilisateur hyper débutant je cherche à copier et coller sur une autre feuille des cellules sous conditions de résultat d'une cellule
merci d'avance
quelqu'un pourrait-t-il m aider
je suis un utilisateur hyper débutant je cherche à copier et coller sur une autre feuille des cellules sous conditions de résultat d'une cellule
merci d'avance
5 réponses
merci beaucoup de votre réponse je bosse dessus ce weekend et je ne manquerai pas de vous répondre plus longuement
amicalement ! =)
amicalement ! =)
Bonjour,
Puisque tu commences, prends les bonnes habitudes dès le début, utilises des références de cellules précises (classeur.feuille.cellules), évites les références implicites et si possible les objets actifs :
Puisque tu commences, prends les bonnes habitudes dès le début, utilises des références de cellules précises (classeur.feuille.cellules), évites les références implicites et si possible les objets actifs :
Option Explicit
Public Sub CopierSousCondition()
Dim Plage_à_copier As Range
Dim Cellule_de_destination As Range
Dim Cellule_à_tester As Range
Dim Condition_remplie As Boolean
' Définition des varaibles
Set Plage_à_copier = ThisWorkbook.Worksheets(1).Range("C4:F12")
Set Cellule_de_destination = ThisWorkbook.Worksheets(2).Range("H3")
Set Cellule_à_tester = ThisWorkbook.Worksheets(1).Range("B12")
Condition_remplie = Cellule_à_tester.Value = 15
' Copie sous condition
If Condition_remplie Then
Plage_à_copier.Copy Destination:=Cellule_de_destination
End If
End Sub
tout d'abord merci à tous pour c'est renseignement c'est vraiment super-sympa de passer de votre temps à aider les autres
pour en revenir à mon problème je ne m'en sors toujours pas je me suis certainement mal expliqué.
J'ai une feuille de calcul avec plusieurs lignes non définies ainsi que plusieurs colonnes j'aimerais tester une cellule et selon résulta de celle-ci copier et coller des cellules de cette même ligne sur une autre feuille j’espère avoir été plus explicite par avance merci
j'essai bien evidament d'avancer de mon cote en vous remercient par avance
amicalment
pour en revenir à mon problème je ne m'en sors toujours pas je me suis certainement mal expliqué.
J'ai une feuille de calcul avec plusieurs lignes non définies ainsi que plusieurs colonnes j'aimerais tester une cellule et selon résulta de celle-ci copier et coller des cellules de cette même ligne sur une autre feuille j’espère avoir été plus explicite par avance merci
j'essai bien evidament d'avancer de mon cote en vous remercient par avance
amicalment
Bonjour,
Effectivement, tes explications manquent cruellement de précisions !!!
« J'ai une feuille de calcul avec plusieurs lignes non définies ... »
Est-ce à dire que tu ne connais pas le contenu de ces lignes, ou que certaines lignes sont vides (non définies) ou que tu ne sais pas combien de lignes il y a ? ou ... ?
« ... ainsi que plusieurs colonnes ... »
même question que pour les lignes ?
« ... j'aimerais tester ... »
Quel genre de test ?
« ... une cellule .... »
Laquelle ?
« .... et selon résultat de celle-ci ....>
Quel type de résultat ?
Patrice
Effectivement, tes explications manquent cruellement de précisions !!!
« J'ai une feuille de calcul avec plusieurs lignes non définies ... »
Est-ce à dire que tu ne connais pas le contenu de ces lignes, ou que certaines lignes sont vides (non définies) ou que tu ne sais pas combien de lignes il y a ? ou ... ?
« ... ainsi que plusieurs colonnes ... »
même question que pour les lignes ?
« ... j'aimerais tester ... »
Quel genre de test ?
« ... une cellule .... »
Laquelle ?
« .... et selon résultat de celle-ci ....>
Quel type de résultat ?
Patrice
Re,
Si j'ai bien compris ton problème :
- Tu veux tester chaque cellule de la colonne K d'un tableau dont tu ne connais pas le nombre de lignes.
- Quand la cellule de la colonne k contient la valeur 1, tu veux copier la ligne correspondante vers une autre feuille.
Voila un code :
Si j'ai bien compris ton problème :
- Tu veux tester chaque cellule de la colonne K d'un tableau dont tu ne connais pas le nombre de lignes.
- Quand la cellule de la colonne k contient la valeur 1, tu veux copier la ligne correspondante vers une autre feuille.
Voila un code :
Option Explicit
Public Sub CopierSousCondition()
Dim Plage_à_analyser As Range
Dim Plage_à_tester As Range
Dim Cellule_de_destination As Range
Dim Cellule_à_tester As Range
Dim Condition_remplie As Boolean
' Définition des variables
' - plage des cellules contenant les données
Set Plage_à_analyser = _
ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
' - plage des cellules à tester
Set Plage_à_tester = Plage_à_analyser.Columns("K")
' - cellule de destination
Set Cellule_de_destination = ThisWorkbook.Worksheets(2).Range("A1")
' Copie de la ligne des titres
' - Copie de la 1° ligne
Plage_à_analyser.Rows(1).Copy Destination:=Cellule_de_destination
' - Définition de la destination suivante
Set Cellule_de_destination = Cellule_de_destination.Offset(1)
' Analyse de la plage
For Each Cellule_à_tester In Plage_à_tester.Cells
' - Test de la cellule de la colonne K
Condition_remplie = Cellule_à_tester.Value = 1
' - Copie sous condition
If Condition_remplie Then
' -- Copie de la ligne entière
Cellule_à_tester.EntireRow.Copy _
Destination:=Cellule_de_destination
' -- Définition de la destination suivante
Set Cellule_de_destination = Cellule_de_destination.Offset(1)
End If
Next Cellule_à_tester
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour herve27f,
Pour cet exemple, tu dois avoir un classeur Excel avec 2 feuilles de calcul. Pour ces 2 feuilles, fais ceci :
a) Colonne A : Largeur 5 b) Lignes 1 à 7 : Hauteur 18
c) Zoom de la feuille : 120 % (à adapter selon la taille de ton écran)
C'est tout pour la feuille 2 : laisses-la vierge. Comme un dessin vaut
mieux qu'un long discours, voici une copie d'écran de la feuille 1 :

Tous les nombres de la feuille 1 sont des nombres choisis au hasard.
La cellule B2 est là pour ce que tu demandais : « sous conditions de résultat d'une cellule ». En effet, c'est elle qui sera testée :
si B2 <> 75, sortir aussitôt.
Tu trouveras ci-dessous un code VBA qui contient 4 subs. Et toutes font un copier / coller. Mais pourquoi 4 ?
----------------------------------------------------------------------------
1) Parce que les 2 premières subs font le copier / coller à partir de la feuille 1 alors que les 2 subs suivantes font le copier / coller à partir de la feuille 2. Et par précaution, la 1ère ligne de la sub EssaiN teste la feuille de départ et sort immédiatement de la sub si tu ne la lance pas à partir de la bonne feuille !
----------------------------------------------------------------------------
2) Les subs Essai1 et Essai3 font une copie intégrale, formats compris : formats des nombres, alignement, bordures, motifs
et autres ; ce sont 2 exemples de Paste (collage).
Si tu veux faire la copie sans ces formats, avec uniquement
les valeurs, utilises alors les subs Essai2 ou Essai4 : ce sont
2 exemples de PasteSpecial (collage spécial).
----------------------------------------------------------------------------
C'est bien sûr Copy qui fait la copie dans le Presse-papiers.
Et c'est lui qui affiche une bordure de tirets défilants autour de la plage source. 2 solutions pour enlever cette bordure clignottante : manuellement, appui sur la touche Échap ; par le code VBA : Application.CutCopyMode = False.
Je ne t'ai pas tout dit sur Paste et PasteSpecial : tu trouveras plein d'autres informations complémentaires dans l'aide de Visual Basic.
Mais c'est quand même un bon début ! 😉
Voici maintenant le code (à toi de bien l'étudier pour en analyser toutes les différences) :
Bonne chance ! 😊
Pour cet exemple, tu dois avoir un classeur Excel avec 2 feuilles de calcul. Pour ces 2 feuilles, fais ceci :
a) Colonne A : Largeur 5 b) Lignes 1 à 7 : Hauteur 18
c) Zoom de la feuille : 120 % (à adapter selon la taille de ton écran)
C'est tout pour la feuille 2 : laisses-la vierge. Comme un dessin vaut
mieux qu'un long discours, voici une copie d'écran de la feuille 1 :

Tous les nombres de la feuille 1 sont des nombres choisis au hasard.
La cellule B2 est là pour ce que tu demandais : « sous conditions de résultat d'une cellule ». En effet, c'est elle qui sera testée :
si B2 <> 75, sortir aussitôt.
Tu trouveras ci-dessous un code VBA qui contient 4 subs. Et toutes font un copier / coller. Mais pourquoi 4 ?
----------------------------------------------------------------------------
1) Parce que les 2 premières subs font le copier / coller à partir de la feuille 1 alors que les 2 subs suivantes font le copier / coller à partir de la feuille 2. Et par précaution, la 1ère ligne de la sub EssaiN teste la feuille de départ et sort immédiatement de la sub si tu ne la lance pas à partir de la bonne feuille !
----------------------------------------------------------------------------
2) Les subs Essai1 et Essai3 font une copie intégrale, formats compris : formats des nombres, alignement, bordures, motifs
et autres ; ce sont 2 exemples de Paste (collage).
Si tu veux faire la copie sans ces formats, avec uniquement
les valeurs, utilises alors les subs Essai2 ou Essai4 : ce sont
2 exemples de PasteSpecial (collage spécial).
----------------------------------------------------------------------------
C'est bien sûr Copy qui fait la copie dans le Presse-papiers.
Et c'est lui qui affiche une bordure de tirets défilants autour de la plage source. 2 solutions pour enlever cette bordure clignottante : manuellement, appui sur la touche Échap ; par le code VBA : Application.CutCopyMode = False.
Je ne t'ai pas tout dit sur Paste et PasteSpecial : tu trouveras plein d'autres informations complémentaires dans l'aide de Visual Basic.
Mais c'est quand même un bon début ! 😉
Voici maintenant le code (à toi de bien l'étudier pour en analyser toutes les différences) :
Option Explicit
Sub Essai1()
If ActiveSheet.Name <> "Feuil1" Then Exit Sub
If [B2] <> 75 Then Exit Sub
[B4:D7].Copy
ActiveSheet.Paste Worksheets("Feuil2").[B4]
Application.CutCopyMode = False
End Sub
Sub Essai2()
If ActiveSheet.Name <> "Feuil1" Then Exit Sub
If [B2] <> 75 Then Exit Sub
[B4:D7].Copy
Worksheets("Feuil2").[B4].PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Sub Essai3()
If ActiveSheet.Name <> "Feuil2" Then Exit Sub
With Worksheets("Feuil1")
If .[B2] <> 75 Then Exit Sub
.[B4:D7].Copy: .Paste [B4]
End With
Application.CutCopyMode = False
End Sub
Sub Essai4()
If ActiveSheet.Name <> "Feuil2" Then Exit Sub
With Worksheets("Feuil1")
If .[B2] <> 75 Then Exit Sub
.[B4:D7].Copy: [B4].PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
End Sub
Bonne chance ! 😊