Correction code et enchainement de deux sub

Bonjour,

Je recherche de l'aide car mon code fonctionnait sur un tableau de test et lorsque je le passe sur mon tableau réel ayant la même structure, cela ne fonctionne plus. Je cherche donc à savoir ce qui cloche dans mon code et si il n'y a pas des modifications à faire dedans.

Ce code est censé faire la somme des cellules de la colonne L, si on trouve la même chaine de caractère sur deux ligne successives dans la colonne F. De plus il supprime la ligne qui a été ajouté à la seconde car je cherche à n'avoir qu'une ligne pour chaque chaine de caractères que l'on trouve plusieurs fois.

Le code est le suivant :

Sub somme_montants()

dl = Cells(Rows.Count, "F").End(xlUp).Row

For i = dl - 1 To 2 Step -1

If Cells(i + 1, "F") = Cells(i, "F") Then

Cells(i, "L") = Cells(i + 1, "L") + Cells(i, "L")

Rows(i + 1).Delete shift:=xlUp

End If

Next i

End Sub

Je souhaite également savoir si il est possible de mettrecle code une fois qu'il sera corrigé, à la suite du code ci dessous, afin de ne faire plus qu'une seule macro :

Sub sup_les_lignes()

Dim i As Integer

Application.ScreenUpdating = False

For i = Range("H" & Rows.Count).End(xlUp).Row To 18 Step -1

If LCase((Range("H" & i))) <> Range("A10") And Range("H" & i) <> "" Then Rows(i).Delete

Next i

End Sub

Ce second code a pour but de supprimer les lignes ou l'on ne trouve pas la chaine ce caractère présente dans la cellule A10 (cellule arbitraire à titre d'exemple), ce dernier fonctionne lui très bien.

Merci par avance pour votre aide

Bonjour Razlor, bonjour le forum,

Ton code prend en compte les cellules vides. C'est peut-être pour ça que ça ne convient pas.

Une proposition des deux macros compilées :

Sub Macro1()
Dim i As Integer
Dim dl As Integer

Application.ScreenUpdating = False
For i = Range("H" & Rows.Count).End(xlUp).Row To 18 Step -1
    If LCase((Range("H" & i))) <> Range("A10") And Range("H" & i) <> "" Then Rows(i).Delete
Next i
dl = Cells(Rows.Count, "F").End(xlUp).Row
For i = dl - 1 To 2 Step -1
    If Cells(i + 1, "F") = Cells(i, "F") And Cells(i, "F") <> "" Then
        Cells(i, "L") = Cells(i + 1, "L") + Cells(i, "L")
        Rows(i + 1).Delete shift:=xlUp
    End If
Next i
Application.ScreenUpdating = True
End Sub

Slt ThauThème,

Le fait que la première macro prenne en compte les cases vides est normal, en effet le tableau initial avant l'utilisation de ma première macro en contient.

J'ai de plus testé ta macro complète et celle ci ne fonctionne pas, elle efface toutes les lignes restantes dans mon tableau (du fichier joint)

Pourrais tu m'aider à corriger ce problème ?

Merci par avance

Salut Razlor,

J'ai bien reçu ton message en privé.

Au lieu de dire ce qui ne joue pas dans ta macro, tu ferais mieux de dire ce que tu désires réaliser.

En prenant comme base le fichier ci-joint, ta macro Sub somme_montants() recherche les lignes de la colonne F ayant une similitude entre elle. Comme tu commences à chercher depuis la dernière valeur de la colonne F, ton code passe en revue les lignes 30 et 31 et ne trouve pas d’analogie entre les cellules F30 et F31. Il continue et cherche une similitude entre F29 et F30 et ne trouve toujours rien. Entre F28 et F29, par contre, il trouve que ces deux cellules sont identiquement vides. Il applique donc ton souhait d’additionner les cellules L28 et L29, mais comme tu as des messages d’erreur dans ces deux cellules, le code bloque !

Non seulement le code bloque, mais veux-tu vraiment – dans le fichier ci-joint – additionner les totaux de ces deux cellules puis supprimer la ligne 29 ou ne voudrais-tu commencer à effectuer ce travail qu’à partir de la ligne 23, dans mon tableau 2 ?

Oublions-donc ta macro et dis-moi avec des mots ce que tu désires réaliser dans le fichier ci-joint. Pour tes descriptions, utilises toujours les références aux objets Excel, tels que lignes, colonnes, plages de cellules, tableaux titrés, etc.

Si jamais ce fichier ne présente pas tous les cas possibles à traiter, simule un fichier les présentant.

Cordialement.

Bonjour Yvouille,

Ce que je souhaite c'est que la macro "somme montants" fasse le calcul des valeurs contenues dans les cellules de la colonne L, lorsque l'on trouve deux lignes consécutives qui possèdent des cellules dans la colonne F, qui elles mêmes ont des chaines de caractères identiques. Puis que la ligne qui a été ajoutée à la précédente ou la suivante suivant comment tourne la boucle, soit supprimée.

ex : que les lignes 22 et 23 soient additionnées pour la colonne L, car on retrouve la chaine "bn123" dans la colonne F et que l'on n'ait plus qu'une seule ligne à la place des deux.

Bien entendu je souhaite que les cellules vides ne comptent pas dans la recherche de cellules identiques dans la colonne F.

Pour répondre à ta question Yvouille, oui je souhaite que la recherche ne commence qu'à partir du tableau 2. Cependant cette macro devra s'enchainer en ne faisant qu'une seule et unique macro, après celle qui trouve les "FAR" d'un certains mois que tu m'as déjà codée. De plus je tiens à te signaler que suivant les fichier sources, le nombres de lignes dans le tableau 2 résultant de la macro trouvant les "FAR" pourra varier.

Si le fait que la colonne L contienne des références d'autres cellules et que cela bloque le code, merci de me montrer une version qui additionne les cellules des colonnes J et K qui elles ne contiennent pas de références mais bien que des valeurs.

Merci pour ton aide

Salut,

Tu m’avais dit en privé que ton ton chef te fait du forcing pour que le problème soit résolu de manière assez rapide, mais je vois que tu ne stresses pas plus que tant !

De plus tu sembles prendre le problème un peu à la légère et ne pas trop t’intéresser à ce que je t’écris. Je t’ai dit précisément que tu ne pouvais pas additionner les cellules L28 et L29 du dernier fichier que je t’ai fourni car ça bloque et maintenant tu me demandes de te fournir un fichier où ça bloque et d’additionner en remplacement les cellules des colonnes J et K à la place de la colonne L alors que dans la plage J28:K29, tu n’as strictement aucune donnée !!!!

Si tu ne commences pas bientôt à t’intéresser à ton fichier, je pense que je vais abandonner également.

razlor a écrit :

Bien entendu je souhaite que les cellules vides ne comptent pas dans la recherche de cellules identiques dans la colonne F.

Je t’avais demandé de simuler un fichier sur lequel ce problème apparaissait. Comme tu ne l’as pas fait - ou du moins pas clairement - j’ai ignoré cette partie du problème.

razlor a écrit :

Pour répondre à ta question Yvouille, oui je souhaite que la recherche ne commence qu'à partir du tableau 2.

Malgré cette instruction selon moi tout à fait imprécise, j’ai compris que tu désirais ne traiter que le tableau 2 – donc effectivement commencer la recherche qu’à partir de ce tableau – mais bien entendu ne pas traiter les tableaux 3 et 4.

Je n’ai pas compris non plus si le début du tableau 2 est toujours à la ligne 13, mais dans le doute, j’ai créé un code qui recherche au préalable ce titre ‘Tableau 2’ dans la colonne E afin de savoir où il démarre.

Pour la fin du tableau – puisque j’ai compris que le nombre de lignes peut varier, je vais rechercher le texte ‘Titre 4’ dans la colonne A, puisque selon ton exemple, tu as un texte précis à la fin de ce tableau 2.

Dans le nouveau fichier exemple ci-joint, le tableau commence donc à la ligne 20 et se termine à la ligne 35.

Si tu cliques sur le bouton ‘Contrôle Tableau 2’ mis en place dans la ligne 1, la nouvelle macro créée devrait répondre à ton attente.

Si c’est bien le cas on verra comment l’on peut combiner encore tes deux macros. Je te prierais à cet effet de simuler un fichier avant le lancement de ces deux macros successives. Indique-moi également de quelle manière tu désires déclencher ces deux codes ensemble : par un bouton, par un évènement autre ?

A te relire.

Bonjour Yvouille,

Pour ce qui est de la première ligne du Tableau 2 je ne suis pas sur qu'elle sera toujours sur la même ligne, de ce fait ta recherche via le nom "Tableau 2" me conviens parfaitement.

Ensuite je te confirme que ma recherche ne concerne que le Tableau 2.

J'ai testé ta macro "contrôle Tableau 2" qui en effet réalise l'opération que je souhaitais obtenir.

Pour ce qui est de l'enchainement des deux macros, je pense que l'utilisation d'un bouton est la solution la plus simple à mettre en place. Dans la macro que tu m'avais réalisée, tu avais utilisé une cellule contenant la chaine de caractère à conserver parmi toutes les lignes du tableau 2. Je souhaiterais pouvoir garder cette technique pour actualiser la recherche suivant divers cas qui pourront survenir.

Ps : Pour le soucis de blocage sur les additions de lignes, il y a eu un malentendu entre nous, il va de soit que je ne souhaitais pas additionner les cellules L28 et L29, vu que les cellules F28 et F29 ne contenaient elles pas les mêmes chaines de caractères. Mon appréhension résidait dans le fait que les cellules de la colonne L du Tableau 2 contiennent des références à d'autres cellules et non pas des valeurs écrites directement dedans de façon manuelle.

Merci pour ton aide et n'hésite pas à me dire si une de mes demandes ou explication n'est pas très claire.


J'avais oublié l'ajout du tableau pour ton test. Par contre dans ce fichier il n'y a pas de "tableau 4" comme dans celui que je t'ai transmis précédemment mais juste un "tableau 3".


Pour la recherche, tu pourra rechercher les "Far mai", là il y a des lignes à additionner au niveau des montants.

Merci par avance

Salut,

Ce n’est vraiment pas évident de te venir en aide. Sur ton autre fil, tu avais présenté un fichier nommé ‘classeur excel de test’ et j’avais corrigé ta macro ‘sup_les_lignes’ en fonction de ce fichier. Dans le nouveau fichier nommé ‘classeur excel de test_V1’ que je t’avais fourni, ça fonctionne parfaitement.

Cette macro a été remplacée par la nouvelle macro ‘Supprime’ dans le dernier fichier fourni ‘classeur test enchainement sub’ et elle ne fonctionne pas correctement ; à la fin du code, la ligne 13 – avec le titre ‘Tableau 2’ - par exemple a disparu !!

Tes fichiers ne sont pas les mêmes d’une fois à l’autre, tu échanges des macros, les boutons mis en place sur les fichiers disparaissent ; désolé, mais je jette l’éponge

Dans l’espoir que tu me comprennes, je te présente mes meilleures salutations.

Rechercher des sujets similaires à "correction code enchainement deux sub"