Menu

Je n'arrive pas à avoir le bon code [Résolu]

-
Bonjour,

je vous présente mon problème :
je dispose d'un tableau de milliers de lignes variable chaque jour, et un nombre de colonne fixe (11 colonnes) , ci dessous un extrait du tableau.



Je souhaite à la base comparer ligne par ligne (sans tenir compte de la colonne 6), et si 2 lignes sont identiques, une nouvelle condition doit être respectée, que pour cette ligne avec la colonne 11 soit différente du vide , ainsi prendre le chiffre sur la 1ère ligne en colonne 9 et coller sur la 2ème ligne sur la même colonne, et écraser le chiffre sur la 1ère ligne en le remettant à 0.
c'est pour ça j'ai créé manuellement un colonne en premier qui concatène l'ensemble des éléments à comparer que je parcours ligne par ligne pour identifier 2 lignes identiques.
ci dessous mon code qui n'est pas bon et je sollicite votre soutien pour m'aider


Sub Statut()
Dim i As Integer
Dim j As Integer
For i = 1 To 'dernière ligne
For j = 2 To 'dernière ligne
If Cells(i, 1) = Cells(j, 1) Then
While Cells(j, 11) <> " "
Cells(i, 10).Copy
Cells(j, 10).Paste
Cells(i, 10).Value = 0
Wend
End If
Next
Next
End Sub


Merci mille fois de votre aide
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
23516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 décembre 2018
1
Merci
Bonjour,
Pourquoi mettre un while et non pas un IF comme pour tes autres tests ?

Sub Statut()
  Dim i As Integer
  Dim j As Integer
  For i = 1 To 'dernière ligne
    For j = 2 To 'dernière ligne
      If Cells(i, 1) = Cells(j, 1) Then
        If Cells(j, 11) <> "" then
          Cells(i, 10).Copy
          Cells(j, 10).Paste
          Cells(i, 10).Value = 0
       End If
      End If
    Next
  Next
End Sub

Ou directement dans le même if
Sub Statut()
  Dim i As Integer
  Dim j As Integer
  For i = 1 To 'dernière ligne
    For j = 2 To 'dernière ligne
      If Cells(i, 1) = Cells(j, 1) And Cells(j, 11)<>"" Then
        Cells(i, 10).Copy
         Cells(j, 10).Paste
         Cells(i, 10).Value = 0
      End If
    Next
  Next
End Sub

Merci jordane45 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM a aidé 30389 internautes ce mois-ci

Commenter la réponse de jordane45
Messages postés
4
Date d'inscription
mardi 4 décembre 2018
Dernière intervention
6 décembre 2018
0
Merci
Merci pour l’astuce oui tu as complètement raison..
Mais le code ne fonctionne pas, je pense qu'il s'agit d'un problème de fond dans mon code non ? le 'dernière ligne je ne sais pas pointer vers la dernière ligne vu que c'est dynamique, je peux mettre un chiffre énorme ..
Mais j'imagine qu'il y a quelque chose qui ne marche pas dans le code .. en l'exécutant on m'affiche " propriété ou méthode non généré pas cet objet"
Merci
jordane45
Messages postés
23516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 décembre 2018
-
Je n'avais pas vu que tes boucles n"étaient pas complètes....
Donc :
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Momo2292
Messages postés
4
Date d'inscription
mardi 4 décembre 2018
Dernière intervention
6 décembre 2018
-
Le code ne fonctionne toujours pas, il m'affiche Erreur 438 , propriété ou méthode non généré pas cet objet


Sub Statut()
Dim i As Integer
Dim j As Integer
Dim derniere_ligne As Integer
derniere_ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
For i = 1 To derniere_ligne
For j = 2 To derniere_ligne
If Cells(i, 1) = Cells(j, 1) And Cells(j, 11) <> "" Then
Cells(i, 10).Copy
Cells(j, 10).Paste
Cells(i, 10).Value = 0
End If
Next
Next
End Sub
Commenter la réponse de Momo2292
Messages postés
1840
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
5 décembre 2018
0
Merci
Bonjour,

C'est le copy/paste qui ne marche pas pour les cellules, il faut utiliser des Range. Mais dans ce cas autant faire plus simple :

Sub Statut()
  Dim i As Integer
  Dim j As Integer
  Dim DerLig As Integer
  DerLig = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To DerLig
    For j = i + 1 To DerLig
      If Cells(i, 1) = Cells(j, 1) And Cells(j, 11) <> "" Then
         Cells(j, 10) = Cells(i, 10)
         Cells(i, 10).Value = 0
      End If
    Next
  Next
End Sub


Momo2292
Messages postés
4
Date d'inscription
mardi 4 décembre 2018
Dernière intervention
6 décembre 2018
-
Top le code fonctionne !! sauf qu'en fait il faut lancer la macro une seule fois, sinon elle écrase mes chiffres, y a t il un code/moyen pour limiter l'utilisation de la macro qu'une seule fois par jour et par utilisateur ? sinon au moment du lancement de la macro pour la deuxième fois afficher un message d'alerte en disant que la macro a été utilisé une fois
Merci infiniment
yg_be
Messages postés
6995
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 décembre 2018
> Momo2292
Messages postés
4
Date d'inscription
mardi 4 décembre 2018
Dernière intervention
6 décembre 2018
-
bonjour, par exemple en mémorisant dans une cellule le moment de la dernière exécution, et ne rien faire si c'est récent.
Momo2292
Messages postés
4
Date d'inscription
mardi 4 décembre 2018
Dernière intervention
6 décembre 2018
-
mercii
Commenter la réponse de pilas31