VBA Copie colle ligne en fonction critéres avec changement de cellule

Bonjour à tous,

Je seche un peu sur un problème lié au VBA sur Excel. Mon niveau est débutant mais j’ai fais pas mal de recherches pour en arriver à mon fichier aujourd’hui.
Donc mon problème est le suivant :
J’ai mon code qui est le suivant :
nbligne = Range(« A1 »).CurrentRegion.Rows.Count

For li = nbligne To 2 Step -1
If (Range(« B » & li).Value) = (Range(« B » & li - 1).Value) And (Range(« C » & li).Value) = (Range(« C » & li - 1).Value) _
And (Range(« D » & li).Value) = (Range(« D » & li - 1).Value) And (Range(« E » & li).Value) = (Range(« E » & li - 1).Value) _
And (Range(« F » & li).Value) = (Range(« F » & li - 1).Value) And (Range(« G » & li).Value) = (Range(« G » & li - 1).Value) _
And (Range(« H » & li).Value) = (Range(« H » & li - 1).Value) And (Range(« I » & li).Value) = (Range(« I » & li - 1).Value) _
And (Range(« J » & li).Value) = (Range(« J » & li - 1).Value) And (Range(« K » & li).Value) = (Range(« K » & li - 1).Value) _
Then Rows(li - 1).Delete

Je pense qu’il y a moyen de l’arranger mais bon, ma question n’est pas la.

Je demande en VBA de verifier si toutes les valeurs des cellules sont identiques alors on supprime la ligne. Mon problème a ce jour est que si une valeur entre colonne B et K est différente, j’aimerai qu’il me copie les valeurs qui sont différentes de la ligne-1 sur la ligne.

J’ai essayé plein de choses mais rien ne fonctionne correctement.

Avez vous une idée svp en ces temps de confinement ?

MERCI

Bonjour
Ci-joint ma proposition
Cliques en Feuil1 sur le bouton « Traitement »
La ligne de la donnée D en colonne A est mise à jour par rapport à la ligne du dessus donnée C en colonne A des données colonne F et I différentes
La première ligne identique à la 2° est supprimée
J’ai fais une archive de ces données en Feuil2 pour pouvoir les remettre facilement par copier/coller en Feuil1 et de rejouer le traitement si besoin

Fais des essais et dis moi

Merci beaucoup.
Je vais essayer cela.
Au besoin je joins un fichier pour essayer de comprendre.
Il n’y a pas de code mais c’est mon fichier de test Macro.
en fait j’aimerai copier les cellules de la colonne commentaire du dessous quand la valeur colonne A est identique et les colle dans la colonne commentaire du dessus et supprimer la ligne du dessous
Classeur2.xlsx (10,1 Ko)

Ci-joint ton 2° fichier avec une procédure adaptée pour la gestion des commentaires

Fais des essais et dis moi

Merci j’essaie tout de suite sur mon fichier original et je reviens vous dire.

Merci beaucoup ca a l’air de fonctionner.
Autre petite question car je n’ai pas trouver dans ton code :

  • Si je veux rajouter 2 autres colonnes après « commentaire »
  • de plus si je veux copie egalement mon mise en forme de ma cellule d’origine car suivant mon commentaire, la couleur n’est pas la même.

Vraiment merci beaucoup car ca fait plusieurs jorus que je galere a trouver

  • Si je veux rajouter 2 autres colonnes après « commentaire »
  • de plus si je veux copie egalement mon mise en forme de ma cellule d’origine car suivant mon commentaire, la couleur n’est pas la même.

Peux tu préciser
2 colonnes de plus après la colonne « commentaire » mais celle-ci est la dernière dans ton fichier que veux tu faire ?
Pour la mise en forme il serait mieux qu’elle soit de base juste à ramener par le traitement la donnée commentaire ce serait plus judicieux
Donnes moi un exemple précis fais à la main situation avant situation après souhaitée

Pardon pour le manque de précision :wink:, donc :

  • la colonne H « commentaire » est suivi par la colonne I et J avec d’autres commentaires car c’est un fichier a la base partagé et les colonnes I et J sont indiqués pour d’autres commentaires par d’autres utilisateurs (sur un autre classeur). Quand je fusionne les feuilles des classeurs, il se peut que les colonnes I et J soient remplis. Mais un copie colle des colonnes H à J me suffit amplement.

  • pour le code couleur, en fonction des commentaires dans la colonne H , I ou J, j’ai un code couleur avec un remplissage en jaune, en rouge, … pour telle ou telle opération.

Je joins un autre fichier pour essayer de comprendre.
Classeur2.xlsx (10,1 Ko)

Ci_joint ton dernier fichier adapté
Cliques sur le bouton
Dis moi le résultat te conviens

1 « J'aime »

C’est PARFAIT merci énormément.
Encore une derniere question, quand mon tableau est crée, j’ai mis une formule en VBA de somme sur une colonne en fonction de ma derniere ligne. Ca ca marche pas de problème.
Juste existe t’il une solution pour faire un calcul si il y a modification d’une valeur de la feuille ?
car la formule n’apparait pas en fonction aussi de la derniere ligne +1.
Merci de ton aide :call_me_hand:

Je suppose que tu veux dire que tu fais fonotionner une ligne de code qui fait la somme d une colonne en fonction de la dernière ligne
Cela fonctionne que si le code est exécuté effectivement
Pour permettre d être mis à jour suite à une modification d une donnée de la colonne 2 solutions :
Au lieu de mettre la somme mettre une formule de somme qui offre l avantage de suivre toute modification de cellules concernées par la somme
Mettre une procédure événementielle qui s activera dès qu une des cellules de la somme est modifiée reexecutant la ligne de code de la somme

À toi de voir ce qui te semble le mieux pour ton fonctionnement

Oui mettre la procédure evenementielle me semble la solution la plus adapté. Il faut juste savoir que c’est une feuille qui se crée (avec macro). Il y a ma formule qui me dit de calculer la somme :
'calcul de la somme de la colonne C
ColC = Columns(« C »).Find("*", , , , , xlPrevious).Row
Set ListeC = Range(« C2:C » & ColC)
Cells(ligT, 3).Value = Application.Sum(ListeC)
Sheets(« Tableau de bord »).Select
Range(« E15 »).Value = Application.Sum(ListeC)

Ca fonctionne sans probleme et il y meme un report sur une autre feuille.
Mais la procedure evenementielle doit fonctionner lorsque la nouvelle feuille est crée au besoin

Cela me semble d’un fonctionnement pas très simple
Si je comprends bien tu souhaites mettre la procédure évènementiel en rapport avec un future onglet à créer donc qui dans un premier temps n’existe pas
De plus cette évènement doit se déclencher sur une modification d’une cellule de l’onglet initiale pour mettre à jour la somme sur le future onglet éventuellement créé
Difficile à mettre en place
Cette procédure se met dans le VBA de la feuille
Donc celle-ci doit exister donc à mettre dans celui de la feuille d’origine initiale
Pas d’autre choix
Pour que cette procédure est une action sur l’onglet créé il faudrait rapporter son nom dans cette feuille dans une cellule à déterminer et ainsi qu’elle est la bonne cible à mettre à jour

Je ne sais pas si dans ton fonctionnement c’est réalisable

A toi de me dire
Petite question dans le code que tu viens fournir
J’ai bien compris l’ensemble des variables sauf une : ligT ici : Cells(ligT, 3).Value = Application.Sum(ListeC)
Nul par en amont n’est défini cette variable
Peut être ailleurs dans la macro
Qu’en est il ?

oui elle est bien défini tout au début de la macro.

Est ce que tu sais s’il est possible de rajouter la procédure événementielle sur la feuille, qui vient juste d’être crée (dans ma macro), voire même avant la fin de l’exécution de cette même macro après la création de la page ?

La rajouter est faisable mais la procédure sera dans une feuille qui n est pas celle qui aura l événement de modification donc cela ne fonctionnera pas
Une procédure événementielle doit être dans le VBA de la feuille qui subit l événement pour être déclenchée
Il faut plutôt jouer avec l événements dans la feuille de base et récupérer à la création de l onglet le nom de celui ci à mettre dans une cellule à déterminer

Merci beaucoup en tout cas de ton aide o combien precieuse. Ca marche à merveille !!! :grin:

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.