• Initiateur de la discussion Initiateur de la discussion peyronthomas
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

peyronthomas

Guest
Bonjour,

D'abord je commence par saluer tout le monde inscrit sur ce forum

Voilà, j'ai un petit soucis sur une macro excel sachant que je n'ai jamais fait de macro excel, voici mon problème:
j'ai un tableau excel sur lequel chaque ligne est quadruplé c'est à dire le contenu d'une ligne est le même sur les 3 lignes qui suit cela fait 3 jour que je suis sur ce problème.
Mon tableau excel contient 26000 lignes, je ne sais pas du tout comment m'y prendre pour faire une macro qui pourrait me faire le ménage dans ces quadruples ligne

Pouvez-vous m'aider ou m'expliquer comment faire cette macro miracle?
merci d'avance

ps : je met en pièce jointe une partie du tableau avec moins de lignes, je pense que le code sera le même quelque soit le nombre de ligne
 

Pièces jointes

Re : Problème de Macro

Bonjour Thomas

essaye le code ci-dessous si cela peut t'aider :

Code:
Option Explicit
Sub test()
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 2 Step -4
    Rows(i - 2 & ":" & i).Delete
Next i
End Sub

Attention le classeur que tu nous as fourni, provoque chez moi (excel2003) une erreur de périphérique en fin de procédure, sur autre classeur ce code fonctionne bien...

bonne soirée
@+
 
Re : Problème de Macro

Bonsoir à tous.
Voici un classeur à adapter selon les besoins.
Placer les données dans la feuille A_NETTOYER.
Exécuter la procédure SupDoublons.
Voir le résultat dans la feuille NETTOYE.
La procédure fonctionne indépendamment du nombre de colonnes et de lignes contigües.​
Bonne nuit !
ROGER2327
 

Pièces jointes

Re : Problème de Macro

je vous remercie ca a bien fonctionné
Mais j'ai un autre problème qui m'a été remonté qui est le suivant :
il faudrait que je supprimer toutes les lignes qui n'ont pas dans la case description le mot UC

Vous serait-il possible de m'aider?
merci d'avance
 

Pièces jointes

Re : Problème de Macro

Bonjour à tous.
À peyronthomas : En utilisant le classeur que vous avez déposé ce jour, j'ai constaté que la procédure que je vous ai proposée bloque sur la ligne
Code:
ThisWorkbook.Sheets("NETTOYE").Range(.Cells(1, 1), .Cells(1, 1).Offset(uD - 1, uS1 - 1))[B].Value = transpose(Dst)[/B]
Cela tient au fait qu'un des champs de vos enregistrements comporte plus de 911 caractères. Il convient de modifier le code de la procédure doublon comme suit :
Code:
Sub Doublon()
Dim i As Long, j As Long, k As Long, uS1 As Long, uS2 As Long, uD As Long, s As String, d As String
Dim Src(), Dst()[COLOR="Red"][B], tf As Long, ts As Integer[/B][/COLOR]
    Src = transpose(ThisWorkbook.Sheets("A_NETTOYER").Cells(1, 1).CurrentRegion.Value)
    uS1 = UBound(Src, 1)
    uS2 = UBound(Src, 2)
    uD = 1
    ReDim Dst(1 To uS1, 1 To uD)
    For i = 1 To uS1
        Dst(i, 1) = Src(i, 1)
    Next i
    For j = 1 To uS2
        s = ""
        For k = 1 To uS1
            s = s & "#" & Src(k, j)
        Next k
        For i = 1 To uD
            d = ""
            For k = 1 To uS1
                d = d & "#" & Dst(k, i)
            Next k
            If d = s Then Exit For
        Next i
        If i > uD Then
            uD = i
            ReDim Preserve Dst(1 To uS1, 1 To uD)
            For k = 1 To uS1
                [COLOR="Red"][B]If VarType(Src(k, j)) = vbString Then
                    If Len(Src(k, j)) > 911 Then tf = tf + 1
                    Dst(k, uD) = Left$(Src(k, j), 911)
                Else[/B][/COLOR]
                    Dst(k, uD) = Src(k, j)
                [COLOR="Red"][B]End If[/B][/COLOR]
            Next k
        End If
    Next j
    [COLOR="Red"][B]ts = 6
    If tf > 0 Then ts = MsgBox(tf & " champ" & IIf(tf > 1, "s", "") & " trop long" & _
            IIf(tf > 1, "s seront", " sera") & " tronqué" & IIf(tf > 1, "s", "") & _
            " à 911 caractères." & vbLf & "Voulez-vous continuer ?", vbYesNo, "Attention !")
    If ts = 6 Then[/B][/COLOR]
        With ThisWorkbook.Sheets("NETTOYE")
            With .Range(.Cells(1, 1), .Cells(1, 1).Offset(uD - 1, uS1 - 1))
                .Value = transpose(Dst)
                .HorizontalAlignment = xlGeneral
                .VerticalAlignment = xlTop
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
        End With
    [COLOR="Red"][B]End If[/B][/COLOR]
End Sub
Pour ce qui est de votre nouvelle demande, c'est possible (presque tout est possible avec un tableur), mais je n'ai pas la possibilité de répondre dans la minute. Un peu plus tard, peut-être.​
Bonne soirée,
ROGER2327
 
Dernière édition:
Re : Problème de Macro

Bonsoir à tous.
À peyronthomas :
Remplacer la ligne :
Code:
        If i > uD Then
par :
Code:
        If i > uD And InStr(1, Src(2, j), "UC", vbTextCompare) > 0 Then
vous permettra de récupérer toutes les lignes comportant "UC" dans la deuxième colonne. Vous récupérerez toutes les occurrences, y compris à l'intérieur des mots.​
Bonne nuit !
ROGER2327
 
Re : Problème de Macro

Bonjour,

Il m'a encore été demandé une autre tache qui est la suivante :
Il faut sur je croise dans mon tableau les nom des personnes de la colonne personnes dans la feuilles NETTOYE avec les noms des personnes dans la feuille user et que au final, si il y a une correspondance entre les deux, les information de la feuilles user se rajoute dans la personne de la feuille NETTOYE

Normalement ça sera ma dernière demande sur ce satané fichier excel.
PS: connaitriez-vous un bon site qui explique la syntaxe des macros

Encore Merci d'avance
 
Re : Problème de Macro

Salut tout le monde !!! je cherche où poser ma question pour avoir une réponse, je trouve pas. Jspr ke cette fois c la bonne.
j'ai cette macro pour détecter les doublons et les colorier; quand on l'éxecute on obtient un inputbox dans lequel on définit la plage concernée. Mon problème est que ma plage de cellules est en fait 3 colonnes dans 3 feuilles différentes. Comment définir ces plages pour colorier les doublons sur les différents onglets ? voici le code :

Sub MarqueLesDoublons()
Dim Plage As Range, i&, Cell As Range, Rng As Range

On Error Resume Next
Set Plage = Application.InputBox("worksheets", Type:=8)
If IsEmpty(Plage) Then Exit Sub

Application.ScreenUpdating = False

For Each Cell In Plage
For i = 1 To Plage.Count
Set Rng = Cell.Offset(i)
If Rng <> "" And Rng = Cell Then
Cell.Interior.ColorIndex = 3
Rng.Interior.ColorIndex = 3
Exit For
End If
Next i
Next Cell

End Sub
 
Re : Problème de Macro

Bonjour,

Il m'a encore été demandé une autre tache qui est la suivante :
Il faut sur je croise dans mon tableau les nom des personnes de la colonne personnes dans la feuilles NETTOYE avec les noms des personnes dans la feuille user et que au final, si il y a une correspondance entre les deux, les information de la feuilles user se rajoute dans la personne de la feuille NETTOYE

Normalement ça sera ma dernière demande sur ce satané fichier excel.
PS: connaitriez-vous un bon site qui explique la syntaxe des macros

Encore Merci d'avance
 

Pièces jointes

Re : Problème de Macro

Bonjour peyronthomas
J'ai regardé votre classeur et je n'y comprends pas grand-chose. Par exemple, une procédure fait référence à une feuille A_NETTOYER qui n'existe pas ! D'autre part vous dites
Il faut sur je croise dans mon tableau les nom des personnes de la colonne personnes dans la feuilles NETTOYE avec les noms des personnes dans la feuille user et que au final, si il y a une correspondance entre les deux, les information de la feuilles user se rajoute dans la personne de la feuille NETTOYE
que je traduis ainsi :
Si, dans la colonne Personne de la feuille NETTOYE, une valeur se retrouve dans la feuille user (utilisateur sur les sites francophones ?), alors les champs correspondants à cette valeur dans la feuille user doivent être recopiés dans la feuille NETTOYE. Si c'est ce qu'il faut comprendre, il faudrait qu'il y eût, d'une part, dans la feuille user une colonne qui contînt des valeurs de même nature que celles contenues dans la colonne Personne de la feuille NETTOYE, d'autre part, dans la feuille NETTOYE, des colonnes destinées à recueillir les données recopiées de la feuille user. Merci d'apporter les informations nécessaires. À plus tard...​
ROGER2327
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 problème d'index
Réponses
19
Affichages
513
  • Question Question
Réponses
13
Affichages
471
Réponses
2
Affichages
246
  • Question Question
XL 2021 Macro
Réponses
6
Affichages
331
Réponses
5
Affichages
199
Réponses
34
Affichages
916
Retour