Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Balance-liste-doublons-FFO

8 réponses
Avatar
Sunburn
Rebonjour FFO,
désolé pour le retard de la réponse.
Je t'écris là, et sur un l'ancien post, pour up.

je remet ton classeur
http://www.cijoint.fr/cjlink.php?file=cj200901/cijkkWvYBa.xls

Donc, oui, ça me va bien.
Par contre, tu ne défini pas les onglets précisement.
en effet, je vais intégrer ces feuilles dans un classeur avec pas mal
d'onglets.
Donc, il faudrait pouvoir nommer les feuilles sur lesquelles on effectue les
calculs, soit "GA10", "GA11", "GA12".
j'ai modifié comme ça, tu peux me dire si je suis pas trop mauvais ?? :

Merci d'avance.

----
Sub Traitement()
'calcul de la balance en temps réel
If Sheets("Bal2").Range("A3") <> "" Then
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Clear
End If
Sheets("GA10").Range("A3", "F" &
Sheets("GA10").Range("A65535").End(xlUp).Row).Copy
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)
Départ = Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0).Row
For Each I In Sheets(Array("GA11", "GA12", "GA14"))
'If Sheets(I).Name Like "GA*" Then
If Sheets(I).Range("C12") <> "" Then
Sheets(I).Range("C12", "F" & Sheets(I).Range("C65535").End(xlUp).Row).Copy
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)
End If
End If
Next
Sheets("Bal2").Range("B" & Départ, "B" &
Sheets("Bal2").Range("B65535").End(xlUp).Row).Offset(1, 0).Clear
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Interior.ColorIndex = xlNone
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort Key1:=Range("A3"),
Order1:=xlAscending
I = 3
Ligne = 2
Do While Range("A" & I).Row < Range("A65535").End(xlUp).Offset(1, 0).Row
If Range("A" & I) <> Range("A" & I - 1) And Range("A" & I) <> Range("A" &
Ligne) Then
Ligne = I
End If
A = Range("A" & I)
B = Range("A" & Ligne)
If Range("A" & I) = Range("A" & Ligne) And I > Ligne Then
Range("C" & Ligne) = Range("C" & Ligne) + Range("C" & I)
Range("D" & Ligne) = Range("D" & Ligne) + Range("D" & I)
Range("B" & I).EntireRow.ClearContents
End If
I = I + 1
Loop
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort Key1:=Range("A3"),
Order1:=xlAscending
Sheets("Bal2").Range("A" &
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0).Row,
"A65535").EntireRow.Delete
'
End Sub
-------

8 réponses

Avatar
FFO
Rebonjour à toi

"Donc, il faudrait pouvoir nommer les feuilles sur lesquelles on effectue les
calculs, soit "GA10", "GA11", "GA12"."

Ton adaptation est imparfaite :
For Each I In Sheets(Array("GA11", "GA12", "GA14"))
'If Sheets(I).Name Like "GA*" Then

Si tu définis les onglets concernés :

Sheets(Array("GA11", "GA12", "GA14"))

tu n'as plus besoin de la ligne qui suit qui elle restreignait les onglets
concernés :
'If Sheets(I).Name Like "GA*" Then

Tu as mis une cote pour l'inhiber mais il faut penser à inhiber le End If
qui lui correspond ici

Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)
End If
End If

Inhibe un de ces 2 End If de la même manière

Ces lignes :

Sheets("GA10").Range("A3", "F" &
Sheets("GA10").Range("A65535").End(xlUp).Row).Copy
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)


dans ma proposition correspondaient à la première recopie des lignes de
l'onglet "Balances" celui pour lequel les libellés devaient être pris en
compte

Or dans ta modification ce n'est plus l'onglet "Balances" qui est considéré
mais "GA10"
Est ce normal ???

Quel est l'onglet qui détient les libellés à concerver ???

C'est cet onglet qui doit être considéré dans ces lignes
Attention aussi au colonne à recopier
Dans l'onglet "Balances" c'était les colonnes A à F à partir de la ligne 3
En est il pareil pour "GA10" :

Sheets("GA10").Range("A3", "F" &
Sheets("GA10").Range("A65535").End(xlUp).Row).Copy


A toi de voir

Pour le reste celà semble correct

Tiens moi informé !!!!
Avatar
Sunburn
re,
alors, en fait, mon ancien "Balances" est désormais nommé "GA10". c'est
l'onglet où j'ai mes libellés, et aussi celui où il y a la balance principale.
Mes onglets "GA11", "GA12", et "GA14" sont mes onglets que je dois
additionner à "GA10"

Donc j'ai modifié comme tu m'as dis, en testant, il y avait un "end if" en
trop.
cependant, il bug à :
If Sheets(I).Range("C12") <> "" Then
????

je te remet un fichier.
http://cjoint.com/?bxnZcZjtbV

PS : pour l'instant, on calcul la balance "online" sur l'onglet "Bal2". Dans
le futur, j'aimerais pouvoir la calculer sur l'onglet "GA13", c'est à dire
que de "GA10", les colonnes A, B, C et D vont dans "GA13" en C,H,E et F.
mai smon problème est celui de la longeur, car j'ai 150 lignes sur GA13, et
en fait il faudrait pouvoir en insérer si il y a plus de lignes. Donc en
"Bal2" pour l'intermédiaire.

Après, il faudra que je trouve comment passer de "Bal2" à "GA13"......

Merci beaucoup.
YANN
Avatar
FFO
Rebonjour à toi

Normal que celà Bug

Dans ma proposition je mettais :

For i = 1 To Sheets.Count
If Sheets(i).Name Like "GA*" Then
If Sheets(i).Range("C12") <> "" Then

i représente un chiffre de 1 au nombre de feuille représenté par Sheets.Count
Donc si on veux faire appel à un onglet avec cette variable il faut
l'accompagner de l'instruction Sheets ainsi :

Sheets(i)

Dans le code que tu as modifié tu mets :

For Each I In Sheets(Array("GA11", "GA12", "GA14"))
'If Sheets(I).Name Like "GA*" Then
If Sheets(I).Range("C12") <> "" Then


I représente un des onglets cité avec Sheets(Array("GA11", "GA12", "GA14"))

On ne peux plus donc pour faire appel à l'un d'entre eux en mettant
l'instruction Sheets :

Sheets(I)

mais on doit mettre uniquement cette variable ainsi :

For Each I In Sheets(Array("GA11", "GA12", "GA14"))
'If I.Name Like "GA*" Then
If I.Range("C12") <> "" Then

Sur ce lien ton document corrigé ainsi

http://www.cijoint.fr/cjlink.php?file=cj200901/cijTVocDer.xls

J'en est profité pour utiliser une autre variable pour la partie :

I = 3
Ligne = 2
Do While Range("A" & I).Row < Range("A65535").End(xlUp).Offset(1, 0).Row

J'ai utilisé la lettre "j"

j = 3
Ligne = 2
Do While Range("A" & j).Row < Range("A65535").End(xlUp).Offset(1, 0).Row
idem pour la suite du code

Fais des essais et dis moi !!!!
Avatar
Sunburn
Re,
j'ai fais des test, et c'est vraiment très bien.
Par contre, j'ai insérer dans la procédure, de quoi insérer une colonne C en
fin de procédure, et de la supprimer en début de procédure. Bien sur, j'ai
insérer manuellement une colonne C avant d'executer ma procédure.
Est-ce correct ce que j'ai fais selon toi, ou y-a-t-il mieux ?

Merci beaucoup.
YANN
----
Sub Traitement()
'supprime la colonne C
Sheets("Bal2").Columns("C:C").Delete Shift:=xlToLeft
'calcul de la balance en temps réel
If Sheets("Bal2").Range("A3") <> "" Then
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Clear
End If
Sheets("GA10").Range("A3", "F" &
Sheets("GA10").Range("A65535").End(xlUp).Row).Copy
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)
Départ = Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0).Row
For Each I In Sheets(Array("GA11", "GA12", "GA13"))
If I.Range("C12") <> "" Then
I.Range("C12", "F" & I.Range("C65535").End(xlUp).Row).Copy
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0)
End If
Next
Sheets("Bal2").Range("B" & Départ, "B" &
Sheets("Bal2").Range("B65535").End(xlUp).Row).Offset(1, 0).Clear
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Interior.ColorIndex = xlNone
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort Key1:=Range("A3"),
Order1:=xlAscending
J = 3
Ligne = 2
Do While Range("A" & J).Row < Range("A65535").End(xlUp).Offset(1, 0).Row
If Range("A" & J) <> Range("A" & J - 1) And Range("A" & J) <> Range("A" &
Ligne) Then
Ligne = J
End If
A = Range("A" & J)
B = Range("A" & Ligne)
If Range("A" & J) = Range("A" & Ligne) And J > Ligne Then
Range("C" & Ligne) = Range("C" & Ligne) + Range("C" & J)
Range("D" & Ligne) = Range("D" & Ligne) + Range("D" & J)
Range("B" & J).EntireRow.ClearContents
End If
J = J + 1
Loop
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort Key1:=Range("A3"),
Order1:=xlAscending
Sheets("Bal2").Range("A" &
Sheets("Bal2").Range("A65535").End(xlUp).Offset(1, 0).Row,
"A65535").EntireRow.Delete
Sheets("Bal2").Columns("C:C").Insert Shift:=xlToRight
Sheets("Bal2").Columns("C:C").ColumnWidth = 3
'
End Sub
-----
Avatar
Sunburn
re,
par contre, avec ma modif, la colonne F devient G.
Je dois tout modifier partout ? lesquels ?
tous ???
Merci.
YANN
Avatar
Sunburn
re,
quand je lance le traitement en étant sur une autre page, il me met un
message d'erreur :
"erreur d'execution 1004 :
reférrence de tri non valide. verifiez qu'elle se trouve bien parmi les
données à trier et que la zone Trier par n'est pas identique ou vide"

et ça plante là :
----
Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort Key1:=Range("A3"),
Order1:=xlAscending
----

????
Merci.
YANN
Avatar
FFO
Rebonjour à toi

Que cherches tu à faire ????
Quel est le but de cette insertion ????
Il est périlleux de modifier une structure en début et fin de code
Si le code pour une raison "X" bug en plein éxécution la première ligne que
tu as rajoutée auras fait son effet sans la dernière sensé l'annuler et donc
ta feuille se retrouvera dans une situation caduque pour une nouvelle
exécution

Pas top pas top !!!!

Si cette action met la feuille comme elle était jusqu'à maintenant
fonctionnant avec le code en l'état aucune modification à faire suite à
l'insertion
Il faut impérativement que le format qui était celui jusqu'à présent soit en
place aprés la ligne que tu as rajouté au début
A toi de te débrouiller pour qu'il en soit ainsi
Sinon il faudra effectivement apporter des corrections

Pour ton plantage suite à l'éxécution du code à partir d'une autre feuille :
Je suis trés surpris de cette configuration car le code en toute logique
doit être sollicité en cliquant sur le bouton situé dans le bon onglet
Tu ne dois donc pas être sur une autre feuille !!!!!

Toujours est il que pour résoudre cette situation surprenante il faut
modifier ces lignes ainsi :

Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort
Key1:=Sheets("Bal2").Range("A3"), Order1:=xlAscending


Celà devrait faire

Dis moi !!!!
Avatar
Sunburn
Ok, je te remercie, ça fonctionne.
mon but est de mettre à jour cette balance assez souvent, car je reporte des
montants de cette balance sur d'autres onglets. J'ai donc besoin de pouvoir
executer ce traitement sur n'importe quelle feuille.
Je te remercie.
YANN

"FFO" a écrit :

Rebonjour à toi

Que cherches tu à faire ????
Quel est le but de cette insertion ????
Il est périlleux de modifier une structure en début et fin de code
Si le code pour une raison "X" bug en plein éxécution la première ligne que
tu as rajoutée auras fait son effet sans la dernière sensé l'annuler et donc
ta feuille se retrouvera dans une situation caduque pour une nouvelle
exécution

Pas top pas top !!!!

Si cette action met la feuille comme elle était jusqu'à maintenant
fonctionnant avec le code en l'état aucune modification à faire suite à
l'insertion
Il faut impérativement que le format qui était celui jusqu'à présent soit en
place aprés la ligne que tu as rajouté au début
A toi de te débrouiller pour qu'il en soit ainsi
Sinon il faudra effectivement apporter des corrections

Pour ton plantage suite à l'éxécution du code à partir d'une autre feuille :
Je suis trés surpris de cette configuration car le code en toute logique
doit être sollicité en cliquant sur le bouton situé dans le bon onglet
Tu ne dois donc pas être sur une autre feuille !!!!!

Toujours est il que pour résoudre cette situation surprenante il faut
modifier ces lignes ainsi :

Sheets("Bal2").Range("A3", "F" &
Sheets("Bal2").Range("A65535").End(xlUp).Row).Sort
Key1:=Sheets("Bal2").Range("A3"), Order1:=xlAscending


Celà devrait faire

Dis moi !!!!