[Excell] Comparer 2 cellule dans 1 colone

Résolu/Fermé
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 - Modifié par NarcisseJulien le 23/06/2011 à 10:37
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 - 24 juin 2011 à 13:14
Bonjour,

Des chiffres aléatoire figurent dans la colone AK.
Ce qui m'intéresse de faire c'est :
- si la valeur d'une cellule "AKn+1" vaut k+1 sachant que la valeur de la cellule "AKn" est k, faire une somme des deux lignes sur la deuxieme ligne, et supprimer la premiere. La subtilité serait de concerver la valeur k+1 dans la colone Ak de cette seconde ligne afin de recomparer avec la 3 ligne aussi, si jamais elle vaut k+2 et ect...

- si la valeur de la cellule "Akn+1" est différent de k+1, alor passé à la cellule en dessous et relancer la vérification.



Exemple :

cellule"AK34"=25
cellule"AK35"= 47
cellule"Ak36"=48

ici , il faut sommer les lignes 35 et 36 dans la ligne 36 et supprimer la ligne 35. Et conserver 48 dans la cellule Ak36 ( qui se nomera ak35 apres suppression de la ligne précedente)


De ce fait cela ne coucircuiterait pas une éventuelle situation où 3 voir 4 cellule qui se suivent ont également des valeur qui se suivent.

Si quelqu'un a une petite idée sa serait vraiment gentil =)

Voilà ce que j'ai écrit :

Sub tri()

With Sheets("Pièces")

If Range("AK13") = 0 Then GoTo erreur:
Application.ScreenUpdating = False
For i = 1 To 65536
sto = .Range("AK12" + i + 1).Value
If Range("AK12+i").Value = Range("AK12+i+1").Value + 1 Then
Sheets("Pièces").Row("AK12+i+1") = (Sheets("Pièces").Row("AK12+i+1")) + (Sheets("Pièces").Row("AK12+i"))
Sheets("Pièces").Row("AK12+i").Delete
Sheets("Pièces").Range("AK12+i").Value = sto

End If
Next
End With
erreur:
MsgBox "Pièce inconnue", vbCritical
End Sub




A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 juin 2011 à 12:15
pour le "i" j'ai dit "et encore" (ce serait long à t'expliquer mais si un jour tu suis des cours au CNAM, tu te feras jeter des labos à juste titre) :o)

tu veux additionner toutes les cellules de la colonne E à AG (sauf le jour bien sûr); mais il faudrait dire quelles colonnes ne sont pas à additionner

au besoin

mettre un extrait du classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
3
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
23 juin 2011 à 13:35
http://www.cijoint.fr/cjlink.php?file=cj201106/cij8M3EYse.xls

J'ai refait un pti classeur avec des donnée totalement aléatoire où figure un exemple de ce ke j'ai, et le resultat que je cherche a obtenir.

En fait :

- faire un test sur deux lignes (Si les jours se suivent ou pas )
- si oui ( additionner la totalité de la ligne 2 avec la ligne 1) et ecrire le jour de la deuxieme ligne dans la celule du jour.
-si non passez au couple de ligne suivante.
et continuer a verifier jusk'en ba du tableau.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 juin 2011 à 13:43
OK, c'est parti
0
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
23 juin 2011 à 14:14
Merci =)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 juin 2011 à 18:06
des soucis ailleurs, sois patient et excuses moi pour ce retard (je pense demain aprem)
0
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
Modifié par NarcisseJulien le 23/06/2011 à 18:22
Okok =) deja je te remercie beaucoup pour ton aide ^^
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 juin 2011 à 23:01
voilà la b^te
https://www.cjoint.com/?0FxwZg6K3fW

j'ai voulu faire ça ce soir car demain matin de bonne heure, arrachage de 1 ou 2 dents "ya du boulot" m'a dit le bourreau.... alors l'après-midi ne sera pas tellement XL mais plutôt doliprane!

la restitution se fait dans la feuille provisoire pour l'instant. Tu m'as dit que les jours étaient des numéros, OK, mais il y aura peut-^tre des problèmes si tu es au format date

la macro pour amuser les touristes CCM:
Option Explicit
Option Base 1

Sub regrouper_dates_continues()
Dim Lig_fin As Integer, Nbre As Integer, Col As Byte
Dim Cptr_in As Integer, Cptr_out As Integer, Cptr As Integer
Dim T_in, T_out

'-------Préparation
With Sheets("pieces")
     Lig_fin = .Range("AK35000").End(xlUp).Row
     T_in = .Range("E13:AK" & Lig_fin).Value
     Nbre = UBound(T_in)
     ReDim T_out(Nbre, 33)
End With
Nbre = UBound(T_in)
Cptr_out = 1

'---------Calculs
'1° des jours
For Col = 1 To 33
     T_out(1, Col) = T_in(1, Col)
Next

For Cptr_in = 2 To Nbre
 Cptr = Cptr_in - 1
     'si les jours se suivent dans T_in, on reste sur le m^me compteur T_out _
     et on implémente les lignes de T_in
     If T_in(Cptr_in, 33) - T_in(Cptr, 33) = 1 Then
          For Col = 1 To 32
               T_out(Cptr_out, Col) = T_out(Cptr_out, Col) + T_in(Cptr_in, Col)
          Next
          T_out(Cptr_out, 33) = T_in(Cptr_in, 33)

          'sinon on on implémente le compteut T_out
     Else
          Cptr_out = Cptr_out + 1
         For Col = 1 To 33
               T_out(Cptr_out, Col) = T_in(Cptr_in, Col)
          Next
          
     End If
Next


'----- Restitution en feuille provisoire
Application.ScreenUpdating = False
With Sheets("provisoire")
     With .Range("E13").Resize(Cptr_out, 33)
          .Value = T_out
          .Borders.Weight = xlThin
     End With
.Activate
End With
End Sub


1
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
24 juin 2011 à 08:48
Merci beaucoup Michel !
Je vais tester tous ça =)) , et bonne chance pour ta matiné dentaire .. et ton aprem doliprane ;)
0
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
24 juin 2011 à 11:40
Cela fonctionne parfaitement, dans le cas ou mes jours sont donc bien au format chiffre.
Ce qui me ramène à un autre problème, le cas du 31 janvier au 1 Février (par exemple), je vai essayer de voir pour modifier ce que tu m'as proposer afin qu'il fasse la comparaison avec les dates...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 24/06/2011 à 12:14
bonjour

de retour du club med...

je viens d'essayer avec des dates en AK: pas de pb
remarque: dans les jours contigus, c'est la date la + récente qui est marquée
0
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
Modifié par NarcisseJulien le 24/06/2011 à 13:14
Ouaip, c 'est bon ca marche nickel avec les dates xD
Tu est vraiment un boss Michel !
Merci infiniement =)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 23/06/2011 à 11:19
Re,

pas compris

par exemple j'ai 10 dans AK13
si j'ai 11 dans AK14 AK14 est égal à 21

dans la cellule en dessous je déclenche si j'ai 22 ou 12 ?

mais si j'ai dans cette cellule en dessous 30, je passe et encore en dessous si j'ai 31 je déclenche ou je déclenche si 13

t'y tiens aux variables à 1 lettre !!!

Michel
0
NarcisseJulien Messages postés 27 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 25 juin 2011 1
Modifié par NarcisseJulien le 23/06/2011 à 13:04
Je croyait que les variable à une lettre était tolérée dans le cas d'une utilisation dans une boucle xD, m'enfin je ferais attention maintenant, Promis ! ^^

Donc si tu veut j'ai des donnée mes ligne allant de la colone E à la colone AG. Tous mes lignes ont un chiffre dans la colone AK. (ce chiffre est le numéro du jour en fait...)(les autre donnée sur la ligne sont des donné genre,combien de pieces ont été faite ect)

Donc si tu veux entre deux lignes, si les numéro qui figure dans la colone ak se suivent, cela veut dire que les jours se sont suivit... et qu'il sagit donc en fait de une seule est unique campagne de la piece. ( en quleque sorte, sa production na pas connu d'interuption).

Je veut donc rassembler toute les lignes qui ont des jour qui se suivent en une seule est unique ligne. ( en sommant dans 1 lignes, toutes les valeur des autre lignes des jours qui se suivent)

C'est pourquoi je conserve dans la variable "sto" le chiffre de la seconde ligne du test, afin de le réinscrire dans la cellule ak apres la somme des deux lignes. pour refaire le test si jamais la troisieme ligne suivait aussi.. je te refait un exemple mieu :

Exemple :

J'ai ça :

E13 = 5 ; AK13 = 17
E14 = 4 ; AK14 = 19
E15 = 87 ; AK15 = 20

E16 = 14 ; AK16 = 22
E17 = 21 ; AK17 = 24
E18 = 45 ; AK18 = 26
E19 = 1 ; AK19 = 27
E20 = 34 ; AK20 = 28

E21 = 51 ; AK21 = 31
l
(Pastis) xD


Je veu :

E13 = 5 ; AK13 = 17
E14 = 91 ; AK14 = 20
E15 = 14 ; AK16 = 22
E16 = 21 ; AK17 = 24
E17 = 80 ; AK18 = 28
E18 = 51 ; AK18 = 31

Je croi tu comprendras mieu du coup.

Et bonne appetit =)
0