Je n'arrive pas à avoir le bon code
Résolu
Momo
-
Momo2292 Messages postés 4 Statut Membre -
Momo2292 Messages postés 4 Statut Membre -
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
Merci mille fois de votre aide
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
3 réponses
-
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 ifSub 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 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-
-
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
-
-
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
-
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 -
-