Copier des cellules d'un onglet A vers un B avec tri

En deux parties j'ai une errer à la première

image

Alors là je vois pas parce qu'il y a le message en plein milieu. Mais il y a marqué Attendu : = . Donc, apparamment, il manque un égal où il n'a pas bien été saisi...

Je l'ai réécrite à la main ça ne fonctionne pas non plus

Peux-tu mettre le haut de ton code, jusqu'à cette ligne ?

Et une image du fichier au moment du bug ?

Alors spoutnikousse,

Pas de nouvelles, bonnes nouvelles ?

Désolé je n'ai pas eu le temps, mais j'aimerais qu'on abandonne l'histoire du tableau CONF, peux-tu faire sans ?

Merci

Regarde cette exemple, on pourrait faire un truc similaire

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
' Loop through each row
For x = 2 To FinalRow

' Decide if to copy based on column D
ThisValue = Cells(x, 4).Value
If ThisValue = "CEN DOP2R" Or ThisValue = "DIJON DOP2R" Or ThisValue = "DEV Dijon" Or ThisValue = "CSH DIJON" Then

Le dernière ligne 139, j'ai mis PACAC dans la cellule 4 pour avoir que ce qui correspond à la prod

image image

Salut spoutnik,

T'inquiète, on va trouver, c'est juste une question de version (vu que ça marchait chez moi). Essaie avec XlListObjectHasHeaders au lieu de HasHeaders

Et si la ligne ne bloque plus, essaie ensuite de la remettre telle qu'elle était au départ, c'est-à-dire avec le nom défini au moment de la création.

Quand je mets cette ligne .ListObjects.Add(Source:=Range("A1:F2"), HasHeaders:=xlYes), j'ai un retour erreur de syntaxe !

L'erreur a changé

image image

Donc le tableau est créé déjà ? C'est bien !

As-tu renommé la colonne CSM par hasard (ou le tableau) ?

Edit : tout changement de référence sur la feuille doit donner lieu au changement correspondant dans le code.

Tout à fait, j'avais changé de classeur pour voir si le fichier initial n'était pas corrompus et du coup j'ai oublié d'insérer le tableau dans le nouveau classeur

Je vais de le re-tester le recherche des critères différents ne fonctionne pas, y'a t-il moyen de les forcer ?

Tu sais, quand je t'ai renvoyé le fichier, tout marchait correctement. Le truc, c'est que tu modifies peut-être précipitamment le code ou le fichier ce qui produit des effets contre-bénéfiques.

Normalement, quand une cellule de la colonne 4 (donc CSM[CSM]) est modifiée, la recherche s'effectue bien en fonction de la valeur de cette cellule. Toutes les valeurs correspondant à l'ensemble des critères (dont la valeur relève) sont collées sur env.conf. Pour l'instant, on a 2 ensembles : les DIJON et compagnie (définis), et les autres PACAC etc (non définis, donc par défaut). C'est là où je me suis arrêté. Sinon, si il y a eu du changement, il faut que je connaisse le nouvel objectif et que j'ai le code à jour.

3GB, je n'ai rein changé sur le fichier je peux même en faire un nouveau pour essayer, voici ton code avec un trace sur la colonne 4 du V6 dans le env.conf

Si je tape PACAC une fois, il me copie les lignes hors prod, si je le retape une 2eme fois il me mets des lignes prod mais mélanger avec du hors prod !!!

Sub EnvoiConf(Cible As Range)

Dim shV6 As Worksheet, shEnv As Worksheet, shVP As Worksheet
Dim cell As Range
Dim Lcible As Long, NvL As Long
Dim txts$

Set shV6 = Worksheets("V6.x")
Set shVP = Sheets("Param")

txts = Join(Array("DIJON DOP2R", "DEV Dijon", "CSH DIJON", "CNE DOP2R"), "")
Lcible = Cible.Row 'ligne en cours

If Worksheets(Worksheets.Count).Name = "env.conf" Then 'si env.conf existe
    Set shEnv = Sheets("env.conf") 'shEnv = env.conf 'affectation de shEnv
Else
    Set shEnv = Sheets.Add(After:=Worksheets(Worksheets.Count)) 'sinon, Creation d'un nouvel onglet
    With shEnv
        .Name = "env.conf" 'on le renomme env.conf
        .ListObjects.Add(Source:=Range("A1:F2"), XlListObjectHasHeaders:=xlYes).Name = "CONF" 'crŽe tableau structurŽ nommŽ CONF
        .Range("CONF[#Headers]").Value = Array("", "", "", "", "", "") 'nomme les colonnes
        .Range("CONF[#Headers]").HorizontalAlignment = xlHAlignCenter 'centre les entetes
        Worksheets("Param").Range("A1:F11").Copy .Range("CONF").Cells(1) 'envoie les valeurs de Paramen dŽbut de tableau
    End With
End If

With shEnv.Range("CONF") 'sur env.conf
    NvL = .Rows.Count + 1 'NvL = nb lignes tableau env.conf + 1 (plus besoin condition car CONF non vide)
    If InStr(txts, Cells(Lcible, 4).Value) > 0 Then 'si ligne cliquŽe correspond au critre
        For Each cell In Range("CSM[CSM]") 'parcourt chaque cellule de la col 4 du tableau v6
            If Not cell.Value = "" And InStr(txts, cell.Value) > 0 Then 'qd correspondance avec critre trouvŽe
                Lcible = cell.Row  'Lcible prend valeur de la ligne en cours
                .Cells(NvL, 1).Value = "ENV;"
                .Cells(NvL, 2).Value = " ;"
                .Cells(NvL, 3).Value = "XDUAS_COMPANY;"
                .Cells(NvL, 4).Value = shV6.Cells(Lcible, 2).Value & ";" 'en col 4 env.conf : recoit valeur colonne 2
                .Cells(NvL, 5).Value = "XDUAS_PORT;"
                .Cells(NvL, 6).Value = Left(shV6.Cells(Lcible, 3), 6)
                .Cells(NvL, 7).Value = shV6.Cells(Lcible, 4)
                NvL = NvL + 1 'incrŽmentation de NvL pour suivant
            End If
        Next cell
    Else 'sinon, critre absent (idem mais quand critre absent)
        For Each cell In Range("CSM[CSM]")
             If Not cell.Value = "" And InStr(txts, cell.Value) = 0 Then
                Lcible = cell.Row
                .Cells(NvL, 1).Value = "ENV;"
                .Cells(NvL, 2).Value = " ;"
                .Cells(NvL, 3).Value = "XDUAS_COMPANY;"
                .Cells(NvL, 4).Value = shV6.Cells(Lcible, 2).Value & ";"
                .Cells(NvL, 5).Value = "XDUAS_PORT;"
                .Cells(NvL, 6).Value = Left(shV6.Cells(Lcible, 3), 5)
                .Cells(NvL, 7).Value = shV6.Cells(Lcible, 4)
                NvL = NvL + 1
            End If
        Next cell
    End If
End With

With shEnv.Range("CONF")
    .Columns.EntireColumn.AutoFit 'ajuste largeur colonnes
    .HorizontalAlignment = xlHAlignCenter 'centre les valeurs
End With

End Sub

je ne suis pas sûre, mais je pense que le pb vient du if > 0 et if = 0, parce que il fait la 1ere instruction quand je tape PACAC la 1ere fois, et à la 2eme quand je me PACAC c'est à ce moment là qu'il va chercher les colonne qui vont avec !

Mais est-ce que ton besoin a changé ? Que te faut-il concrètement ?

Pour l'instant, Quand un cellule CIBLE change, (outre la partie env.conf) :
- il regarde si CIBLE.value est présent dans la chaine des critères (1è fonction Instr),
- si c'est le cas : il boucle sur toute la colonne et copie les valeurs de toutes les cellules présentant un des critères (2è instr),
- si c'est pas le cas (else) et donc que CIBLE.value est absent de la 1è chaine des critères : il boucle sur la colonne et copie les valeurs de toutes les cellules n'ayant aucun des critères (3è instr, celui qui est = 0)

Donc, à chaque changement, il répète cette opération en ne faisant qu'une des 2 boucles où il prend toutes les valeurs d'un des 2 groupes de critères.

Mon besoin est le suivant :

Si la cellule 4 la ligne renseignée du V6 est égale à Dijon alors on récupère toutes lignes Dijon uniquement du V6 pour les mettre dans le env.conf

C'est ta 1ere boucle "> 0"

Si la cellule 4 la ligne renseignée du V6 est égale à hors Dijon alors on récupère toutes lignes hors Dijon uniquement du V6 pour les mettre dans le env.conf

C'est ta 1ere boucle "= 0"

je pense que c'est ça que t'as compris ?

Franchement il y a un problème, voici les lignes que je viens de taper dans le V6

La 1ere fois il ma mis le Dijon et la 2 eme fois le hors Dijon, alors que la 4eme cellule est la meme !

image

Il faut que tu m'envoies le fichier à nouveau. Si j'ai bien compris, l'objectif est resté le même.

Si les recherches ne marchent pas, c'est parce que (comme je te l'ai dit tout à l'heure) tu fais des modifications qui ne sont pas sans conséquence et que toute modification sur la feuille doit impérativement entraîner la correction adéquate dans le code. Peut-être que je me trompe mais je pense que tu as changé l'ordre des colonnes. Tu as une colonne nommée CSM qui n'a pas les bonnes valeurs.

Je vais bientôt repartir du fichier que je t'ai joint et je vais modifier le code.

Rechercher des sujets similaires à "copier onglet tri"