Copier en boucle avec une condition

Bonjour,

Je souhaiterais copier/coller uniquement les valeurs, de la feuille HSAL à la feuille heures.

Cependant j'aurais 1 condition (ou plusieurs je ne sais pas si c'est possible !).

Dans mon fichier, si HSAL / C6="", ne rien faire, si C7="", copier la ligne B6:J6, si la ligne C8="" copier les lignes B6:J7, .......

Si quelqu'un peu m'aider !!! Merci d'avance

RQ

8test.xlsx (15.10 Ko)

Bonjour,

Votre fichier est à utiliser sous MAC ou pas ?
Au vu de votre profil et de votre fichier je suis presque certain que non

Sinon pour votre demande :
- on vérifie quelle est la dernière ligne vide en colonne C et on copie les lignes précédentes vers la feuille Heure
- est ce que la feuille Heure doit être vidée avant ou doit-on recopier en dessous de la dernière ligne remplie ?
- est-ce qu'une fois les lignes copiées on doit vider la feuille HSAL ?

Désolé pour les questions

Crdlt

Bonjour,

Le fichier est utiliser sous windows

Les données que l'on rempli sous la feuille HSAL, doivent être copié/coller à la feuille heures, puis effacer les données de la feuille HSAL.

Cependant, si je remplis la ligne HSAL/6 uniquement le copié coller doit ce faire uniquement sur cette ligne.

Si je rempli les ligne HSAL/6 7 8 9 , je veux que seulement celle ci soit copiée en non pas le bloc de HSAL/6 à 27.

J'espère avoir été clair, si toutefois je reste disponible !

Re

Merci des infos

- ALT + F11 sur votre clavier. Cela vous amène dans l'éditeur VBA
- Menu -> Insertion --> choisir l'option "Module"
- dans la fenêtre, collez le code ci-dessous

Sub Copie()
Dim lig As Byte

lig = Sheets("HSAL").Range("C" & Rows.Count).End(xlUp).Row 'dernière ligne colonne C
If lig < 6 Then Exit Sub

With Sheets("HSAL").Range("B6:J" & lig)
    .Copy Sheets("Heures").Range("A2")
    .ClearContents
End With
End Sub

- Associez le code à un bouton à dessiner sur votre feuille
- veillez à enregistrer le fichier au format XLSM pour pouvoir utiliser les macros

Crdlt

Bonjour,

Je pense que je me suis mal exprimé:

Les données qui figure dans la feuille HSAL (ligne à partir de 10). Si il n'y a rien d'indiquer sur les cellules C11,C12, C13, C14, C15,C16, C17 ... C31, ne pas prendre ces valeur pour copier prendre uniquement quand il y a des valeur dans C10 à C31.

Puis copier coller les valeur uniquement dans la feuille "heures" à la suite des données déjà enregistrées.

Merci par avance

8test.xlsx (15.71 Ko)

re

Heu attendez que je comprenne bien.
Si vous avez juste la ligne 10 mentionnée, on ne copie rien ?
En gros on ne copie que si C10 à C31 sont remplies ?

Si il C10= vierge je ne fais rien, si C10 il y a quelque chose, je copie B10:J10

SI C11= vierge je ne fais rien, si C11 il y a quelque chose, je copie B11:J11

...

Jusqu'a la ligne 31

re

Si il C10= vierge je ne fais rien, si C10 il y a quelque chose, je copie B10:J10
SI C11= vierge je ne fais rien, si C11 il y a quelque chose, je copie B11:J11

heu je ne comprends plus là

c'est du ligne par ligne que vous voulez ?

Prenons votre dernier fichier posté : C10 à C12 sont remplis, donc le code copie les lignes 10 à 12. Correct ou pas ?

oui c'est ça il copie B10:J12 et colle les valeur à la suite des données de la feuille "heures"

Ben je vous ai donné le code pour cela dans un post précédent

Il vous suffit de remplacer les deux chiffres 6 mentionnés par le chiffre 10

Si ok, pensez à cloturer le fil

NB : vous en avez pas mal non cloturé dans votre profil --> https://forum.excel-pratique.com/membre/23767

Cordialement

je viens d'essayer mais ca bloque

Private Sub CommandButton1_Click()
Dim lig As Byte
Dim derlig

lig = Sheets("HSAL").Range("C" & Rows.Count).End(xlUp).Row 'dernière ligne "HSAL" colonne C
derlig = Sheets("heures").Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne "heures" colonne A
If lig < 10 Then Exit Sub

With Sheets("HSAL").Range("B10:J" & lig).Copy

    Sheets("Heures").Range("A" & derlig).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 '       Sheets("HSAL").Range.("C10:C31").ClearContents
End With

End Sub

Mais c'est différent çà...
Les Select et selection c'est à éviter à tout prix

Il est placé où votre code ? dans votre feuille HSAL ?

Crdlt

Edit :
Le plus simple est que je vous donne votre fichier
Votre bouton (type ActiveX) ne permet pas d'associer directement un code placé dans un module. Là il aurait fallu dessiner une autre type de bouton.
Attention ce genre de bouton ne fonctionne pas sous MAC.

Re Edit :

oups avec le fichier c'est mieux...

7test.xlsm (22.93 Ko)

Une fois le fichier téléchargé vous devez le débloquer pour utiliser les macro --> https://excel-pratique.com/fr/astuces_vba/debloquer-les-macros

Crdlt

Bonjour,

Je vous joint mon classeur.

Merci d'avance,

RQ

Re,

Merci du fichier car ce n'est pas ce que vous aviez montré au départ. Donc ce que je vous ai proposé n'est pas celui qui doit être utilisé.

Afin que je puisse compléter le code pouvez-vous me dire dans la feuille heures :

- à quelle cellule de la feuille HSAL correspond la colonne Nature dans la feuille Heure. Là vous avez mis "temps"
- si la date en colonne N est la date de la sauvegarde de la ligne (donc en gros date du jour)
- où vont les données "désignation" et "cumul" de la feuille HSAL

Une fois les données exportées, on efface tout ce qui est sur la feuille HSAL ?

Rem : En ligne 9 et suivantes, vous avez des mentions période, temps, monog, vic, etc.... pourquoi utilisez-vous cela ?

Je poste la modification dès votre réponse

Bonsoir,

Dans la feuille HSAL, Si je saisie le jour (Colonne D10), alors la ligne C10:010, doit être copié dans la feuille "heures", à la suite des données déja enregistré.

Dans la feuille HSAL, Si je saisie le jour (Colonne D11), alors la ligne C10:010, doit être copié dans la feuille "heures", à la suite des données déja enregistré.

.... Jusqu'à la ligne 32

une foie les données exportées, il faut effacé les données des colonne D10:D32, G10:H32, M10:M32 c'est tout.

Les mentions dans les colonnes C, E, F, I, J, K, L, N, O sont des données obligatoire pour le fichier heures (pour le logiciel compta de l'entreprise) ( et ce calculs auto en fonction des données mis)

Merci pour votre retour,

RQ

Bonjour,

Beau fichier que vous avez là....

Les mentions dans les colonnes C, E, F, I, J, K, L, N, O sont des données obligatoire pour le fichier heures (pour le logiciel compta de l'entreprise) ( et ce calculs auto en fonction des données mis)

Je comprends ce que vous avez prévu cela parce que vous partez sur une copier - coller. Avec le code et à moins que je me trompe, vous n'avez pas besoin de cela. Le code ci-dessous récupère les infos dans les cellules de référence plutôt que dans les colonnes.

Le code à lier à votre bouton comme ceci

Sub Copie()
Dim WsHSAL As Worksheet
Dim i As Integer, dlg As Integer, lig As Integer

Set WsHSAL = Worksheets("HSAL")
dlg = WsHSAL.Range("D" & Rows.Count).End(xlUp).Row
If dlg = 9 Then Exit Sub

For i = 10 To dlg
    With Worksheets("heures").ListObjects("Tableau8")
        If .ListRows.Count = 0 Then
            .ListRows.Add: lig = 1
        Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
        End If

        With .DataBodyRange
            .Item(lig, 1) = WsHSAL.Range("G7") 'periode
            .Item(lig, 2) = WsHSAL.Range("D" & i) 'jour
            .Item(lig, 3) = WsHSAL.Range("D" & i) 'temps
            .Item(lig, 4) = WsHSAL.Range("G4") 'monogramme
            .Item(lig, 5) = WsHSAL.Range("E" & i) 'tache
            .Item(lig, 6) = WsHSAL.Range("H" & i) 'heure
            .Item(lig, 11) = WsHSAL.Range("M" & i) 'dossier
        End With
    End With
Next i
WsHSAL.Range("D10:D32,G3,G10:H32,M10:M32").ClearContents
End Sub

Dites-moi si ok.

Rem :
- Dans votre feuille Heures, vous avez un tableau structuré. Très important --> Pour bien commencer les copies en ligne 2 et supprimer les données actuelles, sélectionnez uniquement la plage A2 à O2, faites un clic droite dans la sélection puis choisir "Supprimer" --> "Supprimer lignes de tableau" (vous devez voir cette la mention "Supprimer lignes de tableau". le cas échéant c'est que vous avez sélectionné une plage plus grande ou la ligne complète et cela risque de vous faire perdre la définition Tableau8)
- Dans votre feuille HSAL, en O10, vous avez une formule =SI(D10="";"";NO.SEMAINE(N10)). Vous devez utiliser cette formule pour que le calcul des semaines soit correct -->=SI(D10="";"";NO.SEMAINE.ISO(N10))

Cordialement

Bonjour,

Fil cloturé sans commentaires...

çà marche comme vous le vouliez ou pas parce que là j'ai toujours votre fichier en stand-by

Merci du retour si vous pouvez...

Crdlt

Rechercher des sujets similaires à "copier boucle condition"