Recopie de valeurs sous condition

Bonjour,

J'ai 2 feuilles. La première est une base avec sur chaque ligne des séquences de 39 cellules qui commence en az4 et qui sont alimentées par un userform

Je voudrais sur la feuille 2 en fonction d'une valeur la recopie à la suite d'un certain nombre des séquence des valeurs de la feuille 1

Bien sûr, vous comprendrez bien mieux avec le fichier ci-joint

Je vous remercie d'avance pour votre aide. Ce projet est important pour moi

Si vous avez des questions n'hésitez pas à me le faire savoir

Amicalement de la Réunion

Bonjour,

Ton fichier en retour

A+

Merci

Tu as compris exactement ce que je voulais

Ton code est balaise, ça m'épate

Je n'aurais jamais trouvé ça (pour l'instant en tout cas)

A toi un grand

Bonne soirée

Amicalement

Excuse-moi, je te resollicite

mais je voudrais que les données recopiées puissent ensuite (à la fin de la procédure) être classées par ordre de date de début

sachant que la liste est variable en fonction du nombre de locat°

Merci de m'apporter à nouveau ton aide

Amicalement

J'ai ajouté les lignes de code pour le tri suivant la date de début

Private Sub Generer_Click()
Dim LigneS As Integer, DerColS As Integer, ColS As Integer, Col As Integer
Dim LigneC As Integer
Dim DerLigS As Long, Lig As Long
Dim WsC As Worksheet
Dim MaPlage As Range
    Set WsC = Worksheets("Planning_mat")
    LigneC = 7 'Première ligne de données dans la feuille "Planning_mat"
    WsC.Range(WsC.Range("A7:Q7"), WsC.Range("A7:Q7").End(xlDown)).ClearContents
    With Worksheets("Materiels")
        LigneS = 4 'Ligne d'en-tête de colonnes dans la feuille "Materiels"
        ColS = 52 'Première colonne "Num_location" dans la feuille "Materiels"
        DerLigS = .Range("D" & Rows.Count).End(xlUp).Row 'Dernière ligne renseignée dans la feuille "Materiels"
        DerColS = .Cells(LigneS, Columns.Count).End(xlToLeft).Column 'Dernière colonne renseignée dans la feuille "Materiels"
        If DerLigS > LigneS Then
            For Lig = LigneS + 1 To DerLigS
                If .Cells(Lig, 4).Value = WsC.Range("A3").Value Then
                For Col = ColS To DerColS Step 39
                    If .Cells(Lig, Col) <> "" Then
                        .Cells(Lig, Col).Resize(1, 9).Copy WsC.Cells(LigneC, 1)
                        .Cells(Lig, Col).Offset(0, 24).Copy WsC.Cells(LigneC, 10)
                        .Cells(Lig, Col).Offset(0, 28).Resize(1, 2).Copy WsC.Cells(LigneC, 11)
                        .Cells(Lig, Col).Offset(0, 33).Copy WsC.Cells(LigneC, 13)
                        .Cells(Lig, Col).Offset(0, 35).Resize(1, 4).Copy WsC.Cells(LigneC, 14)
                        LigneC = LigneC + 1
                    End If
                Next Col
                End If
            Next Lig
        End If
    End With
    Set MaPlage = WsC.Range(WsC.Range("A6:Q6"), WsC.Range("A6:Q6").End(xlDown))
    MaPlage.Sort Key1:=MaPlage.Cells(1, 3), Order1:=xlAscending, Header:=xlYes
End Sub

A+

frangy un grand

ton code est parfait et correspond exactement à ce que je veux.

je l'ai modifié un petit peu (moins de valeurs recopiées en fin de compte)

tu peux voir dans mon fichier ce que j'en ai fait. En lançant l'userform, choisir le premier numéro de la liste et cliquer sur peupler.

j'aimerais beaucoup que tu me donne ton avis et peut être une solution pour accélérer la procédure et arriver à mieux cerner la disponibilité (mais pour moi c'est déjà super d'être arriver à là)

Le but c'est en fait, en fonction d'une date choisie de savoir si le matériel est dispo ou non (en prenant en compte les dates début et fin.

Si c'est trop de demander et que cela te dérange, ne t'inquiète pas je comprendrais

Je te remercie pour ce que tu as déjà fait, ça m'est très utile dans mon projet

Amicalement

Bonjour,

Pour le traitement de la disponibilité

Private Sub CommandButton88_Click() 'Disponibilité
    Application.ScreenUpdating = False
    Me.TextBox2.Value = "DISPONIBLE"
    Me.TextBox2.BackColor = &HFF00&
    With Worksheets("Planning_mat")
        For i = .Range("A" & Rows.Count).End(xlUp).Row To 7 Step -1
            If .Range("C" & i) <= CDate(TextBox1.Value) And .Range("D" & i) >= CDate(TextBox1.Value) Or _
            .Range("C" & i) <= CDate(TextBox4.Value) And .Range("D" & i) >= CDate(TextBox4.Value) Then
                TextBox2.Value = "INDISPONIBLE"
                Me.TextBox2.BackColor = &HFF&
            End If
        Next i
    End With
    Application.ScreenUpdating = True
End Sub

Cela dit, je n'ai pas compris pourquoi tu effectues un premier traitement avec une feuille intermédiaire (Planning_mat).

Pourquoi ne pas réaliser directement le traitement avec la ListBox1 ?

A+

frangy il est super ton dernier code, il gère à merveille la disponibilité exactement ce que je voulais

Tu es vraiment très fort en vba

ta question : pourquoi tu effectues un premier traitement avec une feuille intermédiaire (Planning_mat).

Pourquoi ne pas réaliser directement le traitement avec la ListBox1 ?

En fait, je voudrais bien mais je n'ai su faire que comme ça. Bien entendu j'aimerais beaucoup procéder autrement pour gagner en rapidité et alléger mon fichier.

Si tu veux bien m'aider à réaliser le traitement directement avec la listbox1, j'en serais plus que que ravi.

Ensuite je voudrais, si tu le souhaites te demander ton aide sur un userform de mon projet qui me pose une difficulté (c'est un userform calendrier).

Bonjour,

Voici un exemple de traitement direct avec la Listbox11

A+

Bonjour, frangy

Désolé pour le retard mais j'étais absent quelques jours.

J'ai récupéré le fichier avec le traitement direct avec la Listbox11.

un grand

C'est super et fonctionne trop bien. Chapeau pour le code

Mais en l'adaptant à mon projet, j’ai cette erreur

erreur de compilation

variable non définie avec : j surligné à cette ligne

For j = 1 To 5

Sais-tu d'où cette erreur peut elle venir ? et comment la résoudre ?

En attendant ta réponse je vais essayer de trouver comment résoudre ce problème

Bonjour,

C'est très certainement parce que tu utilises l'instruction Option Explicit en tête de module.

Elle impose la déclaration explicite de toutes les variables.

Ajoute la déclaration :

Dim j As Integer, i As Integer, k As Integer

A+

Bonjour, frangy

J'ai ajouté la déclaration

Dim j As Integer, i As Integer, k As Integer

et ça fonctionne super

beaucoup, c'est très sympa de m'aider.

Je t'avais dit que j'ai un petit souci avec un userform calendrier qui m'est utile pour mon projet, j'aimerais beaucoup que tu m'aides a optimiser son utilisation.

Tu trouveras le calendrier en vba dans le fichier ci-joint

pour l'utiliser il faut enregistrer dans windows/system 32 ou windows/sysWOW64 le module mscomct2.ocx

dispo ici sur mon drive, si tu ne l'as pas

https://drive.google.com/file/d/0B0kw2MMJFfaaRXdFZjBHRzVOcjg/view?usp=sharing

Mon problème c'est quand je sélectionne un date de début et une date de fin, je voudrais que le nombre de jours ne comprennent pas les week-ends (surlignés en jaune) et jours fériés (surligné en rouge). Sauf si je sélectionne que le week-end.

C'est un petit calendrier très utile mais tu as peux être mieux à me proposer

Merci d'avance de ta collaboration

Rechercher des sujets similaires à "recopie valeurs condition"