Copier des cellules si une condition est verifiée

hajars Messages postés 38 Statut Membre -  
hajars Messages postés 38 Statut Membre -
Bonjour,

Je dois créer un fichier csv qui contient certains informations que je dois importer de differentes feuilles Pour cela j'ai pensé a creer un tableau excel d'abord et apres le transformer en csv

En effet, Mon tableau que j ai créé sur la feuille"nombredetr"doit contenir en 1ere colonne le Nom et Prénom que je veux copier de la feuille "détails" si la colonne C qui est le matricule est renseignée.
En gros Si la colonne C de la feuille "details" n est pas vide Copier le nom et prénom dans lafeuille "nombredetr" Sinon passer a la ligne suivante
J ai fait ce code, ça me donne aucun résultat et aucun erreur . Je pense j'ai un problème avec l'algo que j ai fait

Sub Presentation()
Worksheets("nombredetr").Cells.Clear

Columns("A:A").ColumnWidth = 25

Worksheets("nombredetr").Range("A1").Value = "Nom et Prénom"
Worksheets("nombredetr").Range("B1").Value = "Code VAT System"
Worksheets("nombredetr").Range("C1").Value = "Code Salarié"
Worksheets("nombredetr").Range("D1").Value = "Code Rubrique"
Worksheets("nombredetr").Range("E1").Value = "Date de début"
Worksheets("nombredetr").Range("F1").Value = "Date de Fin"
Worksheets("nombredetr").Range("G1").Value = "Plage de début"
Worksheets("nombredetr").Range("H1").Value = "Plage de Fin"

With Worksheets("nombredetr").Range("A1:H1").Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 6299648
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Worksheets("nombredetr").Range("A1:H1").Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
' .HorizontalAlignment = xlCenter
' .Borders.Weight = xlThin
End With

For j = 2 To lastlign
For i = 2 To lastlign
If Worksheets("Détails").Range("C" & i) = "" Then
i = i + 1
Else
Worksheets("nombredetr").Range("A" & j) = Worksheets("Détails").Range("A" & i) & " " & Worksheets("Détails").Range("A" & i)

End If
Next i
Next j

End Sub


Merci d'avace pour votre aide

5 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Hajars, bonjour le forum,

    Essaie comme ça :

    Sub Presentation()
    Dim D As Worksheet 'déclare la variable D (onglet Détails)
    Dim N As Worksheet 'déclare la variable N (onglet nombredetr)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Byte 'déclare la variable J (incrément)
    Dim K As Integer 'déclare la variable K (incrément)
    
    Set D = Worksheets("Détails") 'définit l'onglet D
    Set N = Worksheets("nombredetr") 'définit l'onglet N
    TV = D.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    N.Cells.Clear 'efface "tout" dans toutes les cellules de l'onglet N
    N.Columns("A:A").ColumnWidth = 25 'définit la largeur de la colonne A de l 'onglet N
    N.Range("A1").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, 1) 'renvoie les étiquettes du tableau des valeur TV dans la première ligne à partir de A1 de l'onglet N
    'N.Range("A1").Value = "Nom et Prénom"'inutile si la ligne au dessus fonctionne...
    'N.Range("B1").Value = "Code VAT System"...
    'N.Range("C1").Value = "Code Salarié"...
    'N.Range("D1").Value = "Code Rubrique"...
    'N.Range("E1").Value = "Date de début"...
    'N.Range("F1").Value = "Date de Fin"...
    'N.Range("G1").Value = "Plage de début"...
    'N.Range("H1").Value = "Plage de Fin"...
    
    'mise en forme de la plage A1:H1 de l'onglet N
    With N.Range("A1:H1").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 6299648
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Worksheets("nombredetr").Range("A1:H1").Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
       ' .HorizontalAlignment = xlCenter
      '  .Borders.Weight = xlThin
    End With
    
    K = 1 'initialise la variable K
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 3) <> "" Then 'condition : si la donnée ligne I colonne 3 (=> colonnee C) deV est vide
            ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes que TV a de colonnes, K colonnes)
            For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
                TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL la valeur de la colonne J de TV (= transposition)
            Next J 'prochaijne colonne de la boucle 2
            K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 1
    'si K est supérieure à un, renvoie dans la cellule A2 redimensionnée de l'onglet N, le tableau TL transposé
    If K > 1 Then N.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.tranpose(TL)
    End Sub
    

    1