Copie automatique sous conditions

19releve-forum-vba.xlsm (279.41 Ko)

Bonjour,

Il est possible que ce sujet soit déjà traité mais je me permets de le relancer avec un tableau modèle parce que j'ai regardé sur plusieurs forum et je n'arrive pas à adapter mon code VBA.

Je débute plus ou moins et j'arrive à me dépatouiller à peu près lorsque je comprends comment fonction le code VBA.

Je vous explique ce que je souhaite : vous allez voir c'est assez simple, le plus dur c'est le mettre en pratique

- J'ai une feuille relevé sur lequel je relève les heures de mes salariés

- J'ai eu une formule qui m'indique s'il y a un traitement à faire en heures supplémentaires ou en absences (colonne AS et AT)

- Je souhaite copier les nom des salariés pour lesquels la valeur est égal à "OUI"

pour le moment mon code VBA est le suivant : cela me copie l'ensemble des salariés mais je ne veux que ceux pour qui la valeur en AS est "OUI"

Sub MAJ_salariés_HS()

Feuil3.Range("A10:A9999").ClearContents 'efface les données existantes
Feuil1.Range("A2:A70").Copy Feuil3.Range("A10") 'copie ma liste de salariés

End Sub

j'ai essayé avec le code IF mais il ne me prend en compte que la première ligne.

Si quelqu'un peut me donner une code qui marche ça serait génial.

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

Merci infiniment pour votre retour, je vais pouvoir finaliser mon tableau après plusieurs jours de recherches.

Autre question pour finir ma micro formation VBA : est-il possible de mettre plusieurs condition avant la copie (sous forme SI(ET(condition 1 ; condition 2); alors; sinon) ?

merci encore pour votre retour

J'ai essayer de copier le code VBA sur mon fichier final mais il ne semble pas fonctionner.

Je vous joins le nouveau fichier (il y a eu quelques modifications par rapport au tableau d'origine)
à l'origine, mes lignes démarraient en A10 et maintenant en A12 = sur votre code VBA était indiqué A9, j'ai mis A11 pour faire suivre le décalage.
de plus, j'ai rajouté sous le bouton "Effacer le relevé" le nombre de valeur du tableau : je me sert de cette cellule comme nombre pour le compte des ligne i& dans le code VBA
j'ai également protégée mes feuilles comm elles doivent l'être au final : le code est "testvba"
j'ai également créer le code VBA pour ma feuille "Abs", cela ne fonctionne pas non plus.

pouvez-vous m'aider ? me dire si c'est correct et éventuellement pourquoi ça ne fonctionne pas sur mon fichier final ?


Merci de votre aide

Nouvelle version

Bye !

Merci, la fonctionne enfin correctement.

J'ai juste 2 questions complémentaire, put-être que vous pourrais m'y répondre :

- Pouvez-vous m'expliquer les 3 lignes en bleu ci-dessous, je ne comprend pas pourquoi le nombre 12, pouvez-vous me traduire ces lignes ?

Dim i&, ln&
Feuil3.Range("A12:A9999").ClearContents 'supprime les données préexistantes
For i = 12 To Feuil2.Range("A11").End(xlDown).Row
On Error Resume Next
If Feuil2.Range("AS" & i) = "OUI" Then
If Err.Number = 0 Then
ln = 12
Do While Feuil3.Range("A" & ln) <> ""
ln = ln + 1
Loop
Range("A" & ln) = Feuil2.Range("A" & i)
End If
End If
Next i

- est-il possible d'appliquer plusieurs conditions ? si oui comment l'applique-t-on ?

admettons que je veuille comme critère :

Feuil2.Range("AS" & i) = "OUI" et Feuil2.Range("AT" & i) = "OUI"

comment je dois le formuler ?

vous remerciant par avance

Bonjour

For i = 12 To Feuil2.Range("A11").End(xlDown).Row

La première ligne des données dans le tableau de la feuille Relevé est la ligne 12.

Cette instruction va permettre de passer en boucle toutes les lignes de données de ce tableau.

ln = 12

on met dans la variable ln le n° de la première ligne vide du tableau de la feuille HS.

ln = ln + 1

puis, chaque fois qu'on écrit un résultat dans cette ligne, on incrémente la variable ln pour écrire le prochain résultat à la ligne suivante

admettons que je veuille comme critère :

Feuil2.Range("AS" & i) = "OUI" et Feuil2.Range("AT" & i) = "OUI"

comment je dois le formuler ?

Dans ce cas, il faudrait écrire :

If Feuil2.Range("AS" & i) = "OUI" and Feuil2.Range("AT" & i) = "OUI" Then

Et si tu veux retenir la ligne s’il y a un OUI dans l’une ou l’autre des colonnes AS et AT,

Il faut écrire :

If Feuil2.Range("AS" & i) = "OUI" Or Feuil2.Range("AT" & i) = "OUI" Then

Ok ?

Un grand merci. Mon tableau est terminé grâce à vous.

Bonjour,

je reviens vers vous concernant mon tableau que j'ai fait évoluer depuis la dernière fois mais j'ai toujours des interrogations que je n'arrive pas à résoudre. voilà ce que je souhaite faire :

- Onglet absence : je copie actuellement ma liste de salarié sur la colonne A et je fais une formule = en colonne B. est-il possible de copier en colonne B directement mais en respectant le format de la cellule fusionné qui prend 3 ligne pour chaque copie ? (je ne sais pas si c'est clair ^^)

- Onglet absence : lorsque je modifie le relevé (onglet relevé), la liste sur l'onglet absence ne se met pas à jour. exemple : si je modifie le jour 1 du salarié nom 01 et que je met 0, la colonne AV se met bien en "oui" (c'est mon critère de filtre). ce que je souhaite c'est que quand j'appuie sur le bouton mise à jour de l'onglet absence, il me rajouter les salariés qui n'y sont pas et qui devrait y être toujours sur la même base de filtre. pour le moment, il me recopie toutes les lignes j'ai donc des doublons et si j'efface la colonne A pour recopier à nouveau, toutes mes valeurs manuelles ne suivent pas les lignes

- Onglet HS : je souhaite supprimer les lignes si la cellule A est vide. en fonction des mois je vais avoir 1 ou plusieurs ligne et je souhaite supprimer les lignes (sauf la n°13) pour lesquelles il n'y a pas de salarié (ici de la ligne 18 et les suivantes)

j'espère que vous allez pouvoir m'aider une fois encore.

vous remerciant par avance.

Rechercher des sujets similaires à "copie automatique conditions"