Copier/Coller des cellules vers une feuille sous conditions

Salut,

Je suis débutant en VBA et c'est aussi ma première visite sur ce forum. Je viens vers vous solliciter une aide précieuse...

voilà:

Un grand merciii d'avance pour votre temps!

Je veux faire un copier/coller de certaines cellules de la feuille "Statut" à la feuille "DI" sous condition:

La condition: si pour la ligne correspondante on a une réponse 'Non' à la colonne "DI créée" alors on copie la 'Date ajout' et le 'Nom du sites' qui seront copier dans la feuille "DI"

Après cela on revient changer la réponse à la colonne 'E' (Autrement dit: le 'Non' passe en 'Oui')

Merciii

63test.zip (23.64 Ko)

Bonjour,

Essaie d'éviter les "Select" et autres "Activate" pour ce type de traitement.

143test.zip (13.01 Ko)

A+

Merci infiniment... et je retiens le conseil pour les 'select et activate'

Bonjour tout le monde,

J'aurai besoin de votre aide pour créer une macro copier coller avec conditions. J'ai lu plusieurs discussions sur ce sujet mais je ne m'en sort pas...

Je vous explique :

Dans la feuille 1 j'ai une liste récapitulative de documents avec leur nom, leur date de création et leur diffusion sur les 2 sites de production de l'entreprise. Si le document est diffusé, la cellule contient un 1 sinon elle est vide.

Je voudrais que la feuille 2 reprenne le nom et la date de création de tous les documents diffusés sur le SITE 1, la feuille 3 les documents du site 2.

Pouvez vous m'aider ?

D'avance merci beaucoup, je ne sais pas par où commencer....

Je vous joint le fichier simplifié

48macro.xlsx (10.11 Ko)

Rebonjour tout le monde,

Personne pour m'aider ?

Merci par avance

Bonjour Gastou,

Si tu avais créé un nouveau sujet au lieu de squatter celui de Galgui tu aurais sûrement eu beaucoup plus de succès .

Voici une proposition.

112macro.xlsm (22.00 Ko)

A+

Bonjour Frangy,

Effectivement... Mais comme les sujets étaient similaires... Bref

Merci beaucoup pour ton aide ! Le bouton pour déclencher la macro ne fonctionne pas mais je pense savoir le réparer

Par contre, mon vrai fichier est plus complexe que celui que j'ai posté en exemple, du coup je voudrais modifier la macro pour l'adapter à ce vrai fichier. Mais je ne comprends pas tout dans le code de la macro....

Je voudrais comprendre pour réussir la macro de ce fichier et puis pouvoir faire d'autres macros sur d'autres fichiers qui sait ?!

Je ne vois pas dans le code l'endroit où tu désignes les cellules à copier...

Il y a aussi ''If Cel.Offset(0,2)" ou (0,3), à quoi cela correspond ?

Merci pour ton aide


Bonjour Frangy,

Effectivement... Mais comme les sujets étaient similaires... Bref

Merci beaucoup pour ton aide ! Le bouton pour déclencher la macro ne fonctionne pas mais je pense savoir le réparer

Par contre, mon vrai fichier est plus complexe que celui que j'ai posté en exemple, du coup je voudrais modifier la macro pour l'adapter à ce vrai fichier. Mais je ne comprends pas tout dans le code de la macro....

Je voudrais comprendre pour réussir la macro de ce fichier et puis pouvoir faire d'autres macros sur d'autres fichiers qui sait ?!

Je ne vois pas dans le code l'endroit où tu désignes les cellules à copier...

Il y a aussi ''If Cel.Offset(0,2)" ou (0,3), à quoi cela correspond ?

Merci pour ton aide

Bonjour,

''If Cel.Offset(0,2)" ou (0,3), à quoi cela correspond ?

Offset (0,2) représente un décalage de 0 ligne et 2 colonnes par rapport à la cellule désignée (Cel).

Si Cel est A2, Cel.Offset(0,2) représente C2.

De même, Cel.Offset(0,3) représente D2.

Je ne vois pas dans le code l'endroit où tu désignes les cellules à copier...

Voici quelques commentaires pour mieux comprendre le code

    'On balaye la plage de données dans la colonne A de la Feuil1 (Nom document)
    For Each Cel In WsS.Range("A2:A" & WsS.Range("A" & Rows.Count).End(xlUp).Row)
        'Si le site 1 est repéré avec "1", alors on copie le nom du document et la date correspondants _
        puis on colle ces données dans la Feuil2, à partir de la première cellule vide de la colonne A.
        If Cel.Offset(0, 2) = "1" Then Cel.Resize(1, 2).Copy WsC1.Range("A" & Rows.Count).End(xlUp).Offset(1)
        'Si le site 2 est repéré avec "1", alors on copie le nom du document et la date correspondants _
        puis on colle ces données dans la Feuil3, à partir de la première cellule vide de la colonne A.
        If Cel.Offset(0, 3) = "1" Then Cel.Resize(1, 2).Copy WsC2.Range("A" & Rows.Count).End(xlUp).Offset(1)
    Next Cel

A+

Merci pour ces explications.

J'ai modifié le code pour l'adapter à mon fichier mais j'ai le message d'erreur "nbre d'arguments incorrect ou affectation de propriété incorrecte" et le .Range se met en surbrillance quand je fais ok...

Voici le code que j'ai réécrit :

Sub Copier()

Dim WsS As Worksheet, WsC1 As Worksheet, WsC2 As Worksheet, WsC3 As Worksheet, WsC4 As Worksheet, WsC5 As Worksheet, WsC6 As Worksheet

Dim Cel As Range

Description des feuilles avec le nom des 6 sites

Set WsS = Worksheets("Liste complète")

Set WsC1 = Worksheets("RMV")

Set WsC2 = Worksheets("La Varoise")

Set WsC3 = Worksheets("Romann")

Set WsC4 = Worksheets("Pocancy")

Set WsC5 = Worksheets("Narbonne")

Set WsC6 = Worksheets("SFA")

With WsC1

A7 jusqu'à H7 correspond aux cellules que je veux coller selon si le document est présent ou non sur le site

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

With WsC2

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

With WsC3

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

With WsC4

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

With WsC5

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

With WsC6

.Range(.Range("A7"), .Range("B7"), .Range("C7"), .Range("D7"), .Range("E7"), .Range("F7"), .Range("G7"), .Range("H7").End(xlDown)).ClearContents

End With

For Each Cel In WsS.Range("A7:A" & WsS.Range("A" & Rows.Count).End(xlUp).Row)

22,23,24 etc correspond comme tu me l'a expliqué au décalage des colonnes par rapport à ma cellule de référence A7

If Cel.Offset(0, 22) = "1" Then Cel.Resize(1, 2,).Copy WsC1.Range("A" & Rows.Count).End(xlUp).Offset(1)

If Cel.Offset(0, 23) = "1" Then Cel.Resize(1, 2).Copy WsC2.Range("A" & Rows.Count).End(xlUp).Offset(1)

If Cel.Offset(0, 24) = "1" Then Cel.Resize(1, 2).Copy WsC3.Range("A" & Rows.Count).End(xlUp).Offset(1)

If Cel.Offset(0, 25) = "1" Then Cel.Resize(1, 2).Copy WsC4.Range("A" & Rows.Count).End(xlUp).Offset(1)

If Cel.Offset(0, 26) = "1" Then Cel.Resize(1, 2).Copy WsC5.Range("A" & Rows.Count).End(xlUp).Offset(1)

If Cel.Offset(0, 27) = "1" Then Cel.Resize(1, 2).Copy WsC6.Range("A" & Rows.Count).End(xlUp).Offset(1)

Next Cel

End Sub

Vois - tu d'où vient mon erreur ?

Bonjour,

J'ai mis un coup de balayette, ça a bien dépoussiéré

Sub Copier()
Dim WsS As Worksheet
Dim Cel As Range
Dim Feuilles
Dim f As Byte
    Set WsS = Worksheets("Liste complète")
    Feuilles = Array("RMV", "La Varoise", "Romann", "Pocancy", "Narbonne", "SFA")
    For f = 0 To UBound(Feuilles)
        With Worksheets(Feuilles(f))
            .Range(.Range("A7:B7"), .Range("A7:H7").End(xlDown)).Clear
        End With
    Next f
    For Each Cel In WsS.Range("A7:A" & WsS.Range("A" & Rows.Count).End(xlUp).Row)
        For f = 0 To UBound(Feuilles)
            If Cel.Offset(0, 22 + f) = "1" Then
                Cel.Resize(1, 2).Copy Worksheets(Feuilles(f)).Range("A" & Rows.Count).End(xlUp).Offset(1)
            End If
        Next f
    Next Cel
End Sub

A+

Effectivement, tu as fait de la place

Quand je copie le code dans le Microsoft Visual Basic, l'erreur "d’exécution 9" apparait et quand je retourne voir le code la ligne

Set WsS = Worksheets("Liste complète") est surlignée en jaune. J'ai essayé de retaper le code (pensant que cela venait du copier/coller) mais non...


Je te joins le fichier pour t'aider peut être...


27gastou-1.xlsx (145.43 Ko)

Certains noms de feuille avait un espace à la fin, ce qui explique qu'ils n'étaient pas reconnus.

A+

30gastou-1.xlsm (153.13 Ko)

Bonjour Frangy,

Merci beaucoup de ton aide et désolé d'abuser mais j'ai encore un soucis.

La macro fonctionne mais les valeurs copiées ne correspondent pas, elles sont décalées d'une feuille je pense.

Si je modifie dans la liste complète, les informations pour Narbonne, ces modifications apparaissent dans la feuille SFA...

Est ce que le problème ne viendrait pas de ce +f : If Cel.Offset(0, 22 + f) = 1 Then

ou du 1 dans la parenthèse : Cel.Resize(1, 8).Copy Worksheets(Feuilles(f)).Range("A" & Rows.Count).End(xlUp).Offset(1)

Merci

Bonjour,

Effectivement, la valeur du décalage est erronée (j'ai été piégé par la colonne W qui est masquée).

Je l'ai corrigée avec Cel.Offset(0, 23 + f)

44gastou-1.xlsm (153.22 Ko)

A+

C'est super !!! Merci Merci Merci

J'ai copier la macro dans mon vrai fichier mais le message ''erreur d’exécution '9'" apparait.

Dans la fenêtre "Macro", je sélectionne cette macro et je voudrais la mettre dans un répertoire commun et pas seulement dans ce classeur pour pouvoir l'utiliser dans d'autres fichiers... Mais je n'ai pas cette proposition, faut il passer par un autre endroit ?

Comme je te l'ai dit précédemment, il est impératif que les noms des feuilles soient strictement identiques à ceux indiqués dans le programme :

"Liste complète","La Varoise", "Romann", "Pocancy", "Narbonne", "SFA")

La moindre différence (accent, espace, ...) peut générer l'erreur 9.

A+

J'ai vérifié mais je n'ai pas trouvé ! Je me suis débrouillée autrement en copiant le contenu de mon vrai fichier dans le fichier qui fonctionnait !

Tout est parfait ! Je te remercie beaucoup beaucoup beaucoup !

Vous êtes des génies d'Excel

Merci et à bientôt peut être

Rechercher des sujets similaires à "copier coller feuille conditions"