Macro/excel weekdays(.value) insertion cellul

Résolu/Fermé
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 21 oct. 2009 à 09:51
 anime18 - 27 mai 2010 à 13:27
Salut,

Bon je reposte mon problème car pas de réponse depuis la semaine dernière il a donc due passer inaperçu . . .

j'ai donc une ligne avec les jours de semaine en dates, je vais copier une ligne dans une autre feuille,je reviens dans ma feuille puis je la colle 2 fois dans les 2 lignes suivant celle où sont les dates je colle mon code complet et vous expose mon problème:

Private Sub crea_Click()
Application.ScreenUpdating = False

Dim a As Integer, d As Long, b As Long, x As Integer, c As Integer, i As Integer, e As Integer, f As Integer
Dim datesuite As Date
Dim depose As Date
Dim retour As Date

a = 0
b = numofcrea
c = 0
d = codearticle
e = 0
f = 4
depose = datedepose
retour = dateretour

Do
a = a + 1
Loop Until Application.Cells(a, 1) = Empty ' je cherche la 1ere cell vide dans la colo A

Cells(a, 1).Value = b ' j'inscris la valeur de b dans la 1ere cell vide de la colo A
Cells(a + 1, 1).Value = b ' puis dans la 2°
Cells(a + 2, 1).Value = b ' puis la 3°
Cells(a, 2).Value = codearticle ' j'inscris la valeur codearticle dans la 1ere cell vide de la colo B
Cells(a + 1, 2).Value = codearticle ' puis dans la 2°
Cells(a + 2, 2).Value = codearticle ' puis la 3°
Cells(a, 3).Value = datedepose ' j'inscris la valeur datedepose dans la 1ere cell vide de la colo B
Cells(a, 4).Value = dateretour ' j'inscris la valeur dateretour dans la 1ere cell vide de la colo B
Cells(a + 1, 4) = "PREVISIONNEL"
Cells(a + 2, 4) = "REEL"
Cells(a, 4).Select ' je séléctionne la cell A4

nbjours = retour - depose ' je compte le nbre de jours entre datedepose et dateretour

ActiveCell.Offset(0, 1) = depose ' j'inscris la valeur depose dans la colo C (5°) de la meem ligne

For x = 1 To nbjours ' j'inscris les jours les uns à la suite des autres
datesuite = CDate(Cells(a, x + 4).Value) + 1
Cells(a, x + 5).Value = datesuite
Next x

x = 5
For col = x To nbjours + x ' je met en forme les jours de semaine en gris
With Cells(a, col)
.NumberFormat = "ddd-dd/mm/yy"
.Borders.LineStyle = xlContinuous
.Font.Bold = True
If Weekday(.Value) = 1 Or Weekday(.Value) = 7 Then ' si samedi ou dimanche je formate en bleue
.Interior.ColorIndex = 8
Else
.Interior.ColorIndex = 15
End If
End With
Next col

Sheets("CODES ARTICLES").Select ' je séléctionne ma feuille ou sont mes code article

Do ' je cherche mon code article
c = c + 1
Loop Until Application.Cells(c, 1) = d

Do ' je cherche la derniere cell de mon code article (horizontalement)
i = i + 1
Loop Until Application.Cells(c, i) = Empty

Range(Application.Cells(c, 2), Application.Cells(c, i)).Select ' je selectionne ma plage de cells de la 2° colo jusqu'à la premiere vide
Selection.Copy ' je copie ma selection
Sheets("SUIVI DES OF").Select ' je selectionne ma feuille de synthèse

Do ' je cherche la ligne créer avec les dates mais par son numero d'OF
e = e + 1
Loop Until Application.Cells(e, 1) = b

Application.Cells(e + 1, 5).Select ' je selectionne la cellule en dessous de la 1ere date
ActiveSheet.Paste ' je colle mon code article
Application.Cells(e + 2, 5).Select ' je selectionne la cellule en dessous de la 1ere copie
ActiveSheet.Paste ' je colle mon code article une 2° fois

Do ' je cherche la ligne créer avec les dates mais par son numero d'OF
e = e + 1
Loop Until Application.Cells(e, 1) = b

Do ‘ je tourney sur la ligne trouvée
f = f + 1
Loop Until applications.Cells(e, f) = Empty

If Weekday(.Value) = 1 Then ‘ quand je trouve un samedi
Application.Cells(e + 1, f).Select ‘ je sélectionne la cellule en dessous
Selection.Insert Shift:=xlToRight ‘ j’insère une cellule
Selection.Insert Shift:=xlToRight ‘ puis une 2°
Application.Cells(e + 2, f).Select ‘ je recommence une ligne en dessous
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Else
End If

Unload Creasupp
End Sub


Alors voilà je voudrai retourner sur la ligne des dates, donc retrouver ma variable 'e', puis tourner sur cette ligne (horizontalement) et chaque fois que je trouve un samedi, insérer deux cellules dans les 2 lignes copiées depuis la feuille « code article », en décalant vers la droite.

Ma question est:

Pui-je me repositionner sur la bonne ligne juste en rappelant 'e' ou dois je refaire ma boucle? Ensuite je suppose que je dois faire une boucle horizontale pour trouver le samedi et coller le code de décalage . . . mais je ne veux pas que la boucle s'arete sur le samedi car il y en a plusieurs. . . .

Le dernier bloc d’instruction est un essai pour arriver à faire ce que je désire mais quand j'exécute ma macro voici le message que j'ai: "réference incorrecte ou non qualifiée" quand la macro s'arete sur (.value)

Donc si quelqu’un pouvait m’aider se serait tip top je ne me fais pas de souci car si ma macro en est arrivée là c’est déjà grâce à beaucoup de CCMISTES . . . merci à eux

J'espere avoir été assez explicite si ce n'est pas le cas n'hésitez pas à me poser des questions supplémentaires.

SVP,Merci


A voir également:

4 réponses

informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
21 oct. 2009 à 11:16
please heeeeEEEElp me :( :(
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
21 oct. 2009 à 14:14
bon ben zut alors je suis pourtant poli j'ecris en faisant un minimum de faute en tout cas j'essaye mais ce n'est pas très efficace :( . . . .

Personne ne sait alors?
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
21 oct. 2009 à 14:57
voilà la solution surement pas académique pour certain mais elle marche:


Do ' je cherche la ligne créer avec les dates mais par son numero d'OF
e = e + 1
Loop Until Application.Cells(e, 1) = b
e = e - 1

Do ' je cherche la derniere cellule vide
f = f + 1
Loop Until Application.Cells(e, f) = Empty


For y = 5 To f ' je sais pas trop ce que je fais
If Weekday(Cells(e, y).Value) = 1 Then ' si samedi alors
Application.Cells(e + 1, y - 1).Select
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Application.Cells(e + 2, y - 1).Select
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Else
End If
Next y


Merci
0
salut j'aurais besoin de tes connaissance est ce que tu peut m'aidé je te l'aisse mon mail "bouras18@yahoo.fr"
merci d'avance
0