Modification code

bonjour,

j'ai ce code et ces fichiers,pour bien voir de quoi je parles:

http://cjoint.com/13ju/CGypUek9gkv.htm

http://cjoint.com/13ju/CGypUzILuz0.htm

Sub ExporterActionsParCategories()

Dim fichier, t

Dim Wbk_Source As Workbook, Wbk_Cible As Workbook

Dim Wsh_Source As Worksheet

Dim Tbl_In(), Tbl_Temp()

Dim Plage As Range, Cel As Range

Dim i As Long, drlig As Long, fin As Long, cpt As Long, Pos As Long

Dim Colonne As String, maVar As String

t = Timer

'********** COLLECTE DES INFOS "Category" & "Action" *************

Set Wbk_Source = ThisWorkbook

'************************************************************************ A ADAPTER

'remplacer Feuil1 par le nom de la feuille contenant les category, actions etc.

Set Wsh_Source = Wbk_Source.Worksheets("Feuil1")

'**********************************************************************************FIN ADAPTATION

With Wsh_Source

drlig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

fin = (drlig - 4) / 6

cpt = 0

ReDim Tbl_In(1 To 2, 1 To fin)

For i = 4 To drlig Step 6

cpt = cpt + 1

Tbl_In(1, cpt) = .Range("B" & i).Value

Tbl_In(2, cpt) = .Range("B" & i + 1).Value

Next i

End With

'************ FIN COLLECTE ****************************************

'************ OUVERTURE FICHIER CIBLE *****************************

MsgBox "Choix du fichier cible"

fichier = Application.GetOpenFilename

If VarType(fichier) = vbBoolean Then

MsgBox "Abandon opérateur", vbCritical, "Annulation"

Exit Sub

End If

Set Wbk_Cible = Workbooks.Open(fichier)

'************* Le fichier cible est ouvert ************************

'********** Choix de la colonne ou transférer les données *********

Set Plage = Application.InputBox("Sélectionner une seule cellule de la colonne ou vous voulez transférer les données", "Column choice", Type:=8)

If Not Plage Is Nothing And Plage.Count = 1 Then

Colonne = Split(Plage.Address(ColumnAbsolute:=False), "$")(0)

Else

MsgBox "Abandon opérateur", vbCritical, "Annulation"

Wbk_Cible.Close

Exit Sub

End If

'**************** FIN CHOIX COLONNE *******************************

'**************** Restitution des données *************************

Set Plage = Application.InputBox("Sélectionner la plage contenant les catégories", "Category", Type:=8)

If Plage Is Nothing Then

MsgBox "Abandon opérateur", vbCritical, "Annulation"

Wbk_Cible.Close

Exit Sub

Else

Application.ScreenUpdating = False

For Each Cel In Plage

For i = LBound(Tbl_In, 2) To UBound(Tbl_In, 2)

If Cel.Value Like "*" & "|---" & Tbl_In(1, i) & "*" Then Cells(Cel.Row, Colonne) = Tbl_In(2, i): Exit For

Next i

Next Cel

Application.ScreenUpdating = True

End If

'****************** FIN RESTITUTION ********************************

MsgBox "Exportation terminée en " & Timer - t & " secondes."

End Sub

j'ai deux problèmes avec ,

le premier c'est qu'il me retourne des cellules vides a certains endroits

le deuxieme est que j'aimerai que vous m'aidiez à le modifier pour qu'il fasse l'inverse de ce qu'il fait.

quelqu'un me l'a proposé, mais ca ne correspond pas a ce qu'on me demande de faire, et je ne viens tout juste de commencer a programmer, je suis débutante.

Bonsoir,

Dans ton fichier Source, tu as 938 lignes. Tu déclares "fin" comme entier long

drlig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

fin = (drlig - 4) / 6

(938 -4)/6 n'est pas un nombre entier. Le résultat est 155,67

Comment t'assures-tu que les données source sont bien exportées dans la cible et dans les bonnes cellules?

Cdlt

slt,

on m'a propose ce code pour maider a avancer ds mn travail, perso j ny connais pas encore grand chose, si tu pouvais detailler et montrer des expl de ce que tu dis ce serait genial...

merci

Bonjour,

Tu trouveras ci-joint tes tes fichiers "cible" et "source" tous 2 modifiés.

Lances ta procédure normalement et vois les résultats dans le fichier "cible" en colonne J & K (pour l'exemple, car je crois que la colonne de destination est C).

Il y a un nombre de catégories plus important dans le fichier "source". Une mise à jour du fichier "cible" doit être effectuée, me semble-t-il. Il faudra alors être vigilant dans la saisie des noms de catégories (espace, majuscules, etc...)

Je ne doute pas que tu auras des questions, mais médites tout de même un peu

A te relire

nb : j'ai été amené à utiliser une fonction personnalisée pour m'assurer de l'égalité de certaines chaînes de caractères. Je joins le code pour les intéressés.

Option Explicit
Function TexteEpure(Texte As String) As String
Dim tempMot As String, tempCar As String
Dim i As Byte
' supprime tous les caractères AUTRES
' que "a à z","A à Z" ou chiffre et l'espace traditionnel.
' voir aide sur ASC et table de caractères ASCII.
    For i = 1 To Len(Texte)
        tempCar = Mid(Texte, i, 1)
        Select Case Asc(tempCar)
            Case 32 'espace traditionnel
            Case 48 To 57 'chiffre
            Case 65 To 90 'caractères A à Z
            Case 97 To 122 'caractères a à z
        Case Else
            tempCar = ""
        End Select
        tempMot = tempMot + tempCar
    Next i
    TexteEpure = tempMot
End Function

bonjour,

merci, je te dirai s'il y a quelque chose que je comprends pas

cordialement,

Rechercher des sujets similaires à "modification code"