Vba

Résolu/Fermé
Signaler
Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016
-
Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016
-
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

5 réponses

Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016

merci beaucoup de votre réponse je bosse dessus ce weekend et je ne manquerai pas de vous répondre plus longuement
amicalement ! =)
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 715
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 :
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

Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016

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
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 715
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
Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016
>
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021

encore merci de ton implication
je ne connais pas le nombres lignes
la cellule a tester( k ) doit etre = a 1 pour copier et coller des cellule de cette meme ligne dans une autre feuille
ps le tableau a tester comporte + de 200 ligne
encore merci
je galere
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 715
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 :
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

Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016

merci encore patrice
je ne veux pas copier toute la ligne mais plusieurs cellules provenant de cette même ligne en gros exemple(si dans le feuil9 k17 = 1 j'aimerais copier à17, b17, d17, e17 dans feuil6 et ainsi de suite encore 1000 fois merci
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 715 >
Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016

Re,

Le code ci-dessus est universel et documenté, il suffit que :
1) tu essaies de le comprendre.
2) tu l'adaptes à ton besoin
Messages postés
7
Date d'inscription
samedi 27 février 2016
Statut
Membre
Dernière intervention
16 avril 2016
>
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021

merci patrice pour ta reponse elle m'aide beaucoup tres explicite et donc je vais essayer de comprendre
bonne journee

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) :


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 !  😊