Bonsoir à toutes et tous !
Je ne comprends pas pourquoi le programme dans le fichier en annexe ne me renvoie pas les bonnes dates.
Merci beaucoup pour votre aide !
Version imprimable
Bonsoir à toutes et tous !
Je ne comprends pas pourquoi le programme dans le fichier en annexe ne me renvoie pas les bonnes dates.
Merci beaucoup pour votre aide !
Bonsoir,
La formule en B1 est la suivante :
A partir de là tu devrais pouvoir extrapoler pour la colonne C ;)Code:=SI(JOURSEM(A1;2)=3;A1+3;SI(JOURSEM(A1;2)=7;A1+4;"A VOIR"))
(A1;1) --> dimanche = 1 --> samedi = 7
(A1;2) --> lundi = 1 --> dimanche = 7
Ce que je souhaite, c'est que si c'est un mercredi, la date de la cellule de droite devienne le samedi et le mercredi si c'est un samedi.
Thx !!
Donc je pense quedoit être correct.Code:=SI(JOURSEM(A1;2)=3;B1+3;SI(JOURSEM(A1;2)=6;A1+4;"A VOIR"))
lundi = 1, mardi = 2, mercredi = 3, jeudi = 4, vendredi = 5, samedi = 6, dimanche = 7
en effet, la 2ème condition est 6 et pas 7 (sorry)
donc en B1 ça donne...
bien vu ;)Code:=SI(JOURSEM(A1;2)=3;A1+3;SI(JOURSEM(A1;2)=6;A1+4;"A VOIR"))
OK, super.
Maintenant, toujours pour ce programme, mais rien à voir :
Quelle formule utiliser pour dire que :
Si B14=10, mettre une bordure intérieure ("croix") aux 10 cellules à droite, donc de C14 à L14.
Merci !
Ca marche, donc OK.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Option Explicit Sub test2() Dim c As Range If Cells(14, 2).Value = 10 Then For Each c In Range("c14:L14") With c.Borders(xlDiagonalDown) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With c.Borders(xlDiagonalUp) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With c.Borders(xlEdgeLeft).LineStyle = xlNone c.Borders(xlEdgeTop).LineStyle = xlNone c.Borders(xlEdgeBottom).LineStyle = xlNone c.Borders(xlEdgeRight).LineStyle = xlNone c.Borders(xlInsideVertical).LineStyle = xlNone Next c End If End Sub
Thx !
Juste pour économiser de l'encre :D, toutes les lignes se terminant par xlNone tu peux les supprimer, en gros pas besoin de lui dire "tu ne dois pas mettre de ligne"
Idem pour les lignes ColorIndex = xlAutomatic, si aucune précision quant à la couleur, il prendra par défaut la couleur "Auto"
;)
Bien sûr, merci !!
Autre problème dans le fichier suivant.
Je ne comprends pas pourquoi le programme plante.
Merci pour l'aide ! :king:
SAlut
Normal, fais du pas a pas et tu verra que tu essais de mettre dans number le contenu d'une cellule vide ... hors le vide c'est pas numeric
En se qui concerne la macro en elle meme, tu devrais mettre tes indentement comme il faut par ce quela c'est illisible.
Une autre chose
Faudra m'expliquer a quoi ca sert ^^Code:
1
2 number = Cells(ligne, colonne - 1).Value '????? If Cells(ligne, colonne - 1).Value = number Then '????? pas de gros risque que ce soit pas le cas
A++
Qwaz
La cellule n'est pas vide ; colonne 2, ligne 2 = rien mais bien dans les autres cellules, donc le problème ne vient pas de là.
Pour la ligne avec "number", j'essaye de lui faire lire les valeurs introduites en colonne B (chaque fois décalées par rapport au cellules où il faut mettre des croix) et mettre un nombre de croix correspondant aux nombres introduits dans les colonnes.
THx
Re
Ben tu m'excuse mais dans le tableau que tu as joins les cellules sont vide et il suffit d'une cellule vide pour planter ta macro.
Pour ton explication, désolé mais je ne saisi pas, je sais que toi tu es "dedans" mais pas nous alors sois plus claire stp ;)
Pour le bout de code dont je te parlais avant c'est comme si tu disais
y'a une des 2 ligne qui ait de trop ...Code:
1
2
3 I = 8 If 8 = I Then
A++
Qwaz
Très juste, désolé.
J'ai un peu modifié le fichier et il y a un résultat mais qui n'est pas le bon.
Je voudrais "simplement" qu'en fonction de la valeur entrée dans la colonne B, les cellules "en regard" reçoivent cette bordure intérieure en croix.
Je continue de mon côté.
Merci de m'aider !
Re
Deja fais des indentation comme il faut
Le probleme reste le meme avec ton IfCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Sub test3() Dim c As Range, number As Integer Dim ligne%, colonne% For ligne = 2 To 23 For colonne = 3 To 12 number = Cells(ligne, colonne - 1).Value If Cells(ligne, colonne - 1).Value = number Then For Each c In Range("C2:L23") With c.Borders(xlDiagonalDown) .LineStyle = xlContinuous .Weight = xlThin End With With c.Borders(xlDiagonalUp) .LineStyle = xlContinuous .Weight = xlThin End With Next c End If Next colonne Next ligne End Sub
J'essais de comprendre.
+
Re
Je devine pas trpo ce que tu veux faire, regarde ca si ca t'inspire
ca met des croix dans toutes les cases de la ligne dons la case b est renseignée.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub test4() Dim CelCol As Range, C As Range For Each CelCol In Sheets(1).Range("B2:B23") 'on scann la colonne deja If CelCol.Value <> "" Then With Sheets(1).Range(Sheets(1).Cells(CelCol.Row, "C"), Sheets(1).Range("B1").End(xlToRight).Offset(CelCol.Row - 1, 0)) .Borders(xlDiagonalDown).LineStyle = xlContinuous .Borders(xlDiagonalDown).Weight = xlThin .Borders(xlDiagonalUp).LineStyle = xlContinuous .Borders(xlDiagonalUp).Weight = xlThin End With End If Next End Sub
[Edit]
Ou peut etre plutot ca
Cette fois ça met le nombre de croix en fonction de la somme....Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub test4() Dim CelCol As Range, C As Range For Each CelCol In Sheets(1).Range("B2:B23") 'on scann la colonne deja If CelCol.Value <> "" Then With Sheets(1).Range(Sheets(1).Cells(CelCol.Row, "C"), Sheets(1).Range("B1").End(xlToRight).Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2)))) .Borders(xlDiagonalDown).LineStyle = xlContinuous .Borders(xlDiagonalDown).Weight = xlThin .Borders(xlDiagonalUp).LineStyle = xlContinuous .Borders(xlDiagonalUp).Weight = xlThin End With End If Next End Sub
Mme Irma êtes vous parmi nous, vos lumières nous seraient utiles
[/Edit]
++
Qwaz
Super, ça marche bien !
Sauf que je ne capte pas tout ;-)
J'aurais bien besoin de tes lumières !
Merci beaucoup !!!
SAlut
Quel code as tu gardé, et quel renseignement tu souhaite?
[Edit]
Je pense que c'est cette ligne qui te pose probleme
Alors on va decomposer.Code:With Sheets(1).Range(Sheets(1).Cells(CelCol.Row, "C"), Sheets(1).Range("B1").End(xlToRight).Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2))))
CelCol représente une case contenant une des somme, déterminé en fonction de for each, donc on navigue de l'une après la suivante.
Pour selectionner une plage de cellule de "A1" à "A6", par exemple, je fais comme ca
On retrouve cette partie la dans la ligne du début iciCode:
1
2 Range(Range("A1"),range("A6"))
A la place deCode:With Sheets(1).Range(Sheets(1).Cells(CelCol.Row, "C"), Sheets(1).Range("B1").End(xlToRight).Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2))))
j'aiCode:Range("A1")
qui me permet de sélectionner la cellule qui se trouve sur la même ligne que CelCol, mais dans la colonne C, cette cellule est donc la 1ere de notre futur sélection.Code:Sheets(1).Cells(CelCol.Row, "C")
Ensuite a la place denous avonsCode:range("A6")
Procédons par étapesCode:Sheets(1).Range("B1").End(xlToRight).Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2)))
On se place sur la cellule "B1" et on fait la combinaison de touche (Fin + flèche droite), ce qui a pour effet de déplacer notre position jusqu'à la dernière case non vide de la ligne (puisque B1 était pleine).On pointe donc sur la dernière date en haut de ton fichier.Code:Sheets(1).Range("B1").End(xlToRight)
Offset permet de donner un décalage en nombres de ligne et de colonneCode:
1
2 .Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2)))
NbrLigne = CelCol.Row - 1Code:Offset(Nbrligne,Nbrcolonne)
Pour aller a la ligne ou se trouve CelCol il faut que nous nous décalions vers le bas. Nous somme a la ligne une il ne nous reste donc plus qu'a nous décaler du nombre de ligne ou se trouve CelCol moins une ligne (puisqu'on part de la ligne 1 ça crée un décalage)
NbrCol = -(10 - CInt(CelCol.Value2))
On regarde la valeur contenu dans CelCol, pas value mais value2, value2 ne prête pas attention au formatage de la cellule
Value = 1,00€ => value2 = 1
CInt permet de transtyper cette chaine de caractères en valeur numérique de type Integer (entier).
On retranche cette valeur a 10 (ce qui est maladroit de ma part d'ailleurs j'y reviendrais)
Puisqu'on a 10 colonne, on enlève le nombre de colonne qui doivent être cochées
Ainsi on va bien se décaler vers la gauche afin que notre sélection ne comporte le bon nombre de case
exemple 7 euro -> 7 cases à remplir.
10-7 = 3
Une fois que l'on pointe sur notre cellule tout au bout a droite, il faut bien que l'on se décale de 3 colonnes vers la gauche pour que notre sélection ne comporte plus que 7 cases.
Tu notera le moins tout au début pour bien se décaler dans le bon sens
NbrCol = -(10 - CInt(CelCol.Value2))
Ben voila normalement tu as tout compris
On sélectionne la 1ere cellule contenant la somme
On commence une sélection a la case juste a droite de la cellule contenant la somme
On vas tout au bout du tableau et on revient sur nos pas pour ne sélectionner que le nombre de cellules a cochées.
A++
Qwaz
[/Edit]
Je ne comprends pas la commande suivante :
Je me demande aussi s'il est possible d'en faire une fonction plutôt qu'une procédure.Code:With Sheets("Paiements (Série 11)").Range(Sheets("Paiements (Série 11)").Cells(CelCol.Row, "C"), Sheets("Paiements (Série 11)").Range("B1").End(xlToRight).Offset(CelCol.Row - 1, -(10 - CInt(CelCol.Value2))))
Je me rends compte que le programme peut réellement être intéressant s'il peut s'adapter aux modifications, donc "en cours de frappe".
En plus, comment pourrait-on (légèrement) adapter le code pour que le programme tienne compte des éventuelles dates qu'on ajouterait ?
--> Exemple : appliquer le range jusqu'à "M23" au lieu de "L23"
Thx !!!!
Rectification : OK pour le code.
1.) Reste mon problème de transformer la procédure en fonction.
2.) Si je mets "0" en B... (aucun paiement effectué), ça ne marche pas super.
MERCI ;-)
J'ai edité mon message precedent avec plein d'explication je vais en rajouter d'autre en editant celui ci, mais tu as deja du boulot avec l'autre ;)
[Edit]
Comme dis dans mon autre message j'ai commis une maladresse
En effet ici contrairement au reste de mon code je n'est pas tenu compte du nombre de colonne qui peuvent varierCitation:
Envoyé par Qwazerty
Pour corriger ca il faut remplacer "10" par
On regarde le numero de la derniere colonne et on lui soustrait celui de celCol, aon pourait aussi lui soustraire tout simplement 2 je suis en train de pensais, puisque le tableau commence toujours a la colonne3Code:(Sheets(1).Range("B1").End(xlToRight).Column - CelCol.Column)
Voila ca c'est fait, je regarde pour la valeur 0Code:(Sheets(1).Range("B1").End(xlToRight).Column - 2)
[Edit2]
On va tout simplement ne pas executer le code si la valeur est "0"
J'ai juste rajouté And CelCol.Value2 > 0 a la condition IfCode:
1
2
3 For Each CelCol In Sheets(1).Range("B2:B23") 'on scann la colonne deja If CelCol.Value <> "" And CelCol.Value2 > 0 Then
[/Edit2]
A++
Qwaz
[/Edit]