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