Vba et je trouve pas les mots sur une phrase :)

ouali

XLDnaute Junior
Bonjour,

Je desire créer une macro qui ouvre des fichiers.csv puis qu'il recupère la valeur max dans chacune des colonnes. Jusqu'ici aucun problème.

Les fichiers ont un nom identique mais juste un numéro change. Je veux donc ouvrir chacun des fichiers a la suite j'ai donc créer une boucle for. Maintenant, j'aimerais que dans la boucle, lorsque je met le code

NumModule = "Module" & N

J'aimerais qu'il me mette la valeur de module1, c'est-à-dire 101510 dans NumModule mais le programme ne le comprend pas et me met le texte "module1".

Avez-vous une solution svp ??

Merci d'avance
HTML:
Sub transfert_donnee()


Dim chemin As String
Dim N, L As Integer
Dim NumModule As String
Dim Module1 As Long
Dim Num As Integer




' Ouverture du fichier .csv et remise en forme
Module1 = 101510
Module2 = 101511
Module3 = 101512
Module4 = 101519
Module5 = 101520
Module6 = 101521
Module7 = 101522
Module8 = 101524
Module9 = 101569
Module10 = 101570
Module11 = 101571
Module12 = 101572
Module13 = 101573
Module14 = 101574
Module15 = 101575


For N = 1 To 15
    

    
    NumModule = "Module" & N
    chemin = ThisWorkbook.Path & "\MAVG_" & NumModule & "_M1105" & ".CSV"
    Workbooks.Open Filename:=chemin
 
    L = Range("A60000").End(xlUp).Row + 1 ' Nombre de ligne dans le fichier csv

    With ActiveWorkbook.Sheets(1).Columns(1) ' separe les points-virgules dans les différentes colonnes
        .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Tab:=False, Semicolon:=True
    End With

    MaxIL1 = Application.WorksheetFunction.Max(Range("g1:g" & Range("g65530").End(xlUp).Row))
    MaxIL2 = Application.WorksheetFunction.Max(Range("h1:h" & Range("h65530").End(xlUp).Row))
    MaxIL3 = Application.WorksheetFunction.Max(Range("i1:i" & Range("i65530").End(xlUp).Row))


    ThisWorkbook.Activate

    Range("D" & N + 9).Value = MaxIL1
    Range("E10").Value = MaxIL2
    Range("F10").Value = MaxIL3

Next N
End Sub
 
Dernière édition:

Softmama

XLDnaute Accro
Re : Inexplicable ;)

Bonjour,

Tu peux déclarer tes modules sous forme de tableau :

VB:
Sub transfert_donnee()


Dim chemin As String
Dim N, L As Integer
Dim NumModule As String
Dim Module()
Dim Num As Integer




' Ouverture du fichier .csv et remise en forme
Module(1) = 101510
Module(2) = 101511
Module(3) = 101512
Module(4) = 101519
Module(5) = 101520
Module(6) = 101521
Module(7) = 101522
Module(8) = 101524
Module(9) = 101569
Module(10) = 101570
Module(11) = 101571
Module(12) = 101572
Module(13) = 101573
Module(14) = 101574
Module(15) = 101575


For N = 1 To 15
    

    
    NumModule = Module(N)
    chemin = ThisWorkbook.Path & "\MAVG_" & NumModule & "_M1105" & ".CSV"
    Workbooks.Open Filename:=chemin
 
    L = Range("A60000").End(xlUp).Row + 1 ' Nombre de ligne dans le fichier csv

    With ActiveWorkbook.Sheets(1).Columns(1) ' separe les points-virgules dans les différentes colonnes
        .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Tab:=False, Semicolon:=True
    End With

    MaxIL1 = Application.WorksheetFunction.Max(Range("g1:g" & Range("g65530").End(xlUp).Row))
    MaxIL2 = Application.WorksheetFunction.Max(Range("h1:h" & Range("h65530").End(xlUp).Row))
    MaxIL3 = Application.WorksheetFunction.Max(Range("i1:i" & Range("i65530").End(xlUp).Row))


    ThisWorkbook.Activate

    Range("D" & N + 9).Value = MaxIL1
    Range("E10").Value = MaxIL2
    Range("F10").Value = MaxIL3

Next N
End Sub
 

ouali

XLDnaute Junior
Re : Inexplicable ;)

Salut Softmama

et merci pour ta réponse ca semble être une très bonne idée. Je ne connais pas beaucoup les tableaux...

J'ai compilé mais j'ai toujours l'erreur suivante qui vient et qui n'est pas très précise

L'indice ne correspond pas a la sélection
et l'erreur pointe sur la première ligne : Module(1) = 101510


As-tu une idée du problème ?
 

s.barrailler

XLDnaute Nouveau
Re : Vba et je trouve pas les mots sur une phrase :)

L'explication, c'est que tu veux appeler une variable (Module1) par le contenu d'une autre variable (NumModule).
Et ça VBA ne le comprend pas.

Plusieurs solutions peuvent répondre à ton problème.

Tu pourrais avoir une fonction que tu appelle avec des paramètres (N, Module).
Nota: oui, la réponse de Softmama est encore + simple

A la place de Module1=..., tu fais une série de Call pour appeler une autre sub.
Call Fonction_Module (1, 101510)

Et tu créé une autre Sub :
Sub Fonction_Module(N as variant, Module as variant)

Et là tu met le contenu de ta boucle For
 
Dernière édition:

ouali

XLDnaute Junior
Re : Vba et je trouve pas les mots sur une phrase :)

alors j'ai changé le nom mais le problème est toujours le même et je ne sais pas si la solution de s.barrailler va changer qqch je vais essayer mais au cas ou qqn a une autre idée ??
 

Discussions similaires

Réponses
6
Affichages
248

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87