Problème fonction sous vba
Fermé
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
-
9 mai 2015 à 18:46
julesdelf Messages postés 13 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 15 juin 2015 - 11 mai 2015 à 15:05
julesdelf Messages postés 13 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 15 juin 2015 - 11 mai 2015 à 15:05
A voir également:
- Problème fonction sous vba
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Cette fonction n'est pas disponible actuellement tv lg - Forum Téléviseurs
- Mkdir vba ✓ - Forum VB / VBA
14 réponses
via55
Messages postés
14502
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
9 décembre 2024
2 736
9 mai 2015 à 19:45
9 mai 2015 à 19:45
Bonjour,
1) Tes adresses Range ("Ci") ne sont pas correctes, la syntaxe adéquate est Range("C" & i)
2) Procèdes plutôt par une boucle de 1 à 500 :
Cdlmnt
Via
1) Tes adresses Range ("Ci") ne sont pas correctes, la syntaxe adéquate est Range("C" & i)
2) Procèdes plutôt par une boucle de 1 à 500 :
Function test(cell As Range) Dim i As Long Dim lg As Integer For i = 1 To 500 If Sheets("traitement").Range("C" & i) = cell.Row And Sheets("traitement").Range("D" & i) = cell.Column Then lg = i Next If lg > 0 Then test = Sheets("traitement").Range("B" & lg) Else test = 0 End Function
Cdlmnt
Via
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
9 mai 2015 à 21:57
9 mai 2015 à 21:57
Merci beaucoup Via, c'est pile ce qu'il me fallait et ça fonctionne nickel!!!!!!
Merci Merci
Cordialement
Merci Merci
Cordialement
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 10:16
10 mai 2015 à 10:16
Bonjour, nouvelle journée nouveau problème...
J'essai d'in tégrer dans une macro la fonction match.
J'ai une valeur définie comme une date dans une feuille, je veux trouver le numéro de colonne correspondant dans une autre feuille, voila ma syntaxe: (je vous epargne tout le rest du code qui fonctionne bien)
NLIG AS VARIANT
Range("a" & DLig2).Select
NLIG = Application.Match(Range("a" & DLig2).Value, Sheets("reception commande").Rows(3), 0)
Range("d" & DLIG3) = NLIG
J'ai une erreur sur le NLIG ALORS QUE LA FONCTION :
=MATCH(A$6;'reception commande'!$3:$3;0)
fonctionne mais j'ai besoin de remplacer le 6 par la valeur DLIg2 car elle peut changer...
est ce que le code est bon?
est ce que c'est qu'il ne trouve pas la valeur?
merci
J'essai d'in tégrer dans une macro la fonction match.
J'ai une valeur définie comme une date dans une feuille, je veux trouver le numéro de colonne correspondant dans une autre feuille, voila ma syntaxe: (je vous epargne tout le rest du code qui fonctionne bien)
NLIG AS VARIANT
Range("a" & DLig2).Select
NLIG = Application.Match(Range("a" & DLig2).Value, Sheets("reception commande").Rows(3), 0)
Range("d" & DLIG3) = NLIG
J'ai une erreur sur le NLIG ALORS QUE LA FONCTION :
=MATCH(A$6;'reception commande'!$3:$3;0)
fonctionne mais j'ai besoin de remplacer le 6 par la valeur DLIg2 car elle peut changer...
est ce que le code est bon?
est ce que c'est qu'il ne trouve pas la valeur?
merci
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 10:44
10 mai 2015 à 10:44
en fait mon problème vient de la cellule que je cherche,
j'importe un fichier txt dans lequel j'ai une date écrite comme ça 12/05/2015, mon séparateur de colonne est "tab"
mais lorsque je l'importe par la macro, la date se transforme en 05/12/2015 05 decembre au lieu de 12 mai et du coup ma fonction match ne la trouve pas...
voila ce que j'ai mis pour l'importation:
Workbooks.OpenText Filename:= _
"C:\Users\jules\Desktop\test code barre\RECEPTION.txt", Origin:=932, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
Space:=False, Other:=False, OtherChar:="/", FieldInfo:=Array(Array(1, 1) _
, Array(2, 1)), TrailingMinusNumbers:=True
merci
j'importe un fichier txt dans lequel j'ai une date écrite comme ça 12/05/2015, mon séparateur de colonne est "tab"
mais lorsque je l'importe par la macro, la date se transforme en 05/12/2015 05 decembre au lieu de 12 mai et du coup ma fonction match ne la trouve pas...
voila ce que j'ai mis pour l'importation:
Workbooks.OpenText Filename:= _
"C:\Users\jules\Desktop\test code barre\RECEPTION.txt", Origin:=932, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
Space:=False, Other:=False, OtherChar:="/", FieldInfo:=Array(Array(1, 1) _
, Array(2, 1)), TrailingMinusNumbers:=True
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Voila deja une macro pour importer un fichier Txt separateure Tab
A tester sur ton fichier
A+
Maurice
Voila deja une macro pour importer un fichier Txt separateure Tab
Sub ListeFichier() Dim Dossier As FileDialog Chemin = ActiveWorkbook.Path & Application.PathSeparator Set Dossier = Application.FileDialog(msoFileDialogOpen) With Dossier .AllowMultiSelect = False .InitialFileName = Chemin .Title = "Choix d'une fichier Elise" With .Filters .Clear .Add "Fichiers Textes", "*.txt", 1 End With .InitialFileName = "" 'Interdit la multi sélection .AllowMultiSelect = False If .Show = -1 Then Fichier = .SelectedItems(1) Call LireFichier(Fichier) Else Exit Sub End If End With Set Dossier = Nothing End Sub Sub LireFichier(NomFichier) Dim Ar() As String With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlManual End With Cells.Select Selection.ClearContents ' ------------------------------------- Sep = vbTab Lig = 1 Open NomFichier For Input As #1 Do While Not EOF(1) Line Input #1, Chaine Ar = Split(Chaine, Sep) Col = 1 For X = LBound(Ar) To UBound(Ar) Cells(Lig, Col) = Ar(X) Col = Col + 1 Next Lig = Lig + 1 Loop Close #1 ' ------------------------------------- With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True .CutCopyMode = False .Goto [A2], True End With MsgBox "Terminer" End Sub
A tester sur ton fichier
A+
Maurice
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 11:55
10 mai 2015 à 11:55
C'est vrai que c'est mieux comme ça...
mais ça ne change pas mon problème qui est sur le format de la date lors de l'importation,
le fichier txt comporte 12/05/2015 et lors de mon importation ou de la tienne il se transforme en 05/12/2015.
et si j'essai de l'inverser dans le txt (05/12/2015), il me donne le bon format après l'importation soit 15/05/2015. Mais la fonction Match ne fonctionne toujours pas...
voila l'intégralité de mon code après les importations:
Windows("fichier d'importation.xlsx").Activate
DLig1 = Range("A1").End(xlDown).Row + 1
Range("A1:B" & DLig1).Select
Application.CutCopyMode = False
Selection.Cut
Windows("fichier globalV7.xlsm").Activate
Sheets("traitement_reception").Select
DLig2 = Range("A1").End(xlDown).Row + 1
Range("a" & DLig2).Select
ActiveSheet.Paste
Range("c2:d2").Select
Selection.Copy
Range("c" & DLig2).Select
ActiveSheet.Paste
Range("C3").Select
Selection.Copy
DLIG3 = DLig2 + 1
DLIG4 = DLIG3 + DLig1 - 3
Range("C" & DLIG3).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("C" & DLIG3 & ":C" & DLIG4), Type:=xlFillDefault
Sheets("traitement_reception").Select
NLIG = Application.Match(Range("a" & DLig2).Value, Sheets("reception commande").Rows(3), 0)
Range("d" & DLIG3) = NLIG
mais ça ne change pas mon problème qui est sur le format de la date lors de l'importation,
le fichier txt comporte 12/05/2015 et lors de mon importation ou de la tienne il se transforme en 05/12/2015.
et si j'essai de l'inverser dans le txt (05/12/2015), il me donne le bon format après l'importation soit 15/05/2015. Mais la fonction Match ne fonctionne toujours pas...
voila l'intégralité de mon code après les importations:
Windows("fichier d'importation.xlsx").Activate
DLig1 = Range("A1").End(xlDown).Row + 1
Range("A1:B" & DLig1).Select
Application.CutCopyMode = False
Selection.Cut
Windows("fichier globalV7.xlsm").Activate
Sheets("traitement_reception").Select
DLig2 = Range("A1").End(xlDown).Row + 1
Range("a" & DLig2).Select
ActiveSheet.Paste
Range("c2:d2").Select
Selection.Copy
Range("c" & DLig2).Select
ActiveSheet.Paste
Range("C3").Select
Selection.Copy
DLIG3 = DLig2 + 1
DLIG4 = DLIG3 + DLig1 - 3
Range("C" & DLIG3).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("C" & DLIG3 & ":C" & DLIG4), Type:=xlFillDefault
Sheets("traitement_reception").Select
NLIG = Application.Match(Range("a" & DLig2).Value, Sheets("reception commande").Rows(3), 0)
Range("d" & DLIG3) = NLIG
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 12:12
10 mai 2015 à 12:12
voila ce qu'il y a dans mon fichier txt:
05/12/2015
MOUSSE APPUIE-GENOU 350
VERIN V60 - 6000N course 29cm FLY'EVER REF 44A 150
RONDELLE PLASTIQUE M8 (8.1x14x1) 2000
en fait quand je teste ma fonction match sur une colonne avec la cellule "mousse appui-genou" comme valeur de recherche, ça fonctionne
mais si je cherche la date sur les lignes ça ne fonctionne pas.
J'ai essayé avec autre chose que la date et ça ne fonctionne pas sur les lignes...
05/12/2015
MOUSSE APPUIE-GENOU 350
VERIN V60 - 6000N course 29cm FLY'EVER REF 44A 150
RONDELLE PLASTIQUE M8 (8.1x14x1) 2000
en fait quand je teste ma fonction match sur une colonne avec la cellule "mousse appui-genou" comme valeur de recherche, ça fonctionne
mais si je cherche la date sur les lignes ça ne fonctionne pas.
J'ai essayé avec autre chose que la date et ça ne fonctionne pas sur les lignes...
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 12:16
10 mai 2015 à 12:16
RECTIFICATION, j'ai essayé avec autre chose qu'une date et ça fonctionne, le problème doit donc venir de mes formats de date...
Bonjour
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse
A+
Maurice
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse
A+
Maurice
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 12:48
10 mai 2015 à 12:48
voila le fichier txt:
https://www.cjoint.com/?0EknaTpMoIi
désolé...
https://www.cjoint.com/?0EknaTpMoIi
désolé...
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
10 mai 2015 à 12:49
10 mai 2015 à 12:49
Bonjour,
Importe ton fichier en enregistrement de macro, et à l'étape des colonnes choisi JMA pour le format des colonnes date.
Tu auras les bons paramètres pour une importation correcte.
eric
Importe ton fichier en enregistrement de macro, et à l'étape des colonnes choisi JMA pour le format des colonnes date.
Tu auras les bons paramètres pour une importation correcte.
eric
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
10 mai 2015 à 12:58
10 mai 2015 à 12:58
Bonjour éric,
j'ai déjà essayé mais le problème c'est que ça importe bien quand je le fait mais quand je relance la macro, ça ne l'a pas pris en charge.
Après le problème ne vient pas forcement de la date, il vient surtout du fait que la fonction match ne fonctionne pas avec la date, quand je met une valeur, ou un texte, la fonction arrive à retrouver ce que je cherche mais quand je met une date, tel que je l'ai écrite, il ne trouve rien...
le problème ne viendrai t-il pas du ".value" que j'ai mis, n'y a t-il pas un autre terme à mettre?
j'ai déjà essayé mais le problème c'est que ça importe bien quand je le fait mais quand je relance la macro, ça ne l'a pas pris en charge.
Après le problème ne vient pas forcement de la date, il vient surtout du fait que la fonction match ne fonctionne pas avec la date, quand je met une valeur, ou un texte, la fonction arrive à retrouver ce que je cherche mais quand je met une date, tel que je l'ai écrite, il ne trouve rien...
le problème ne viendrai t-il pas du ".value" que j'ai mis, n'y a t-il pas un autre terme à mettre?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
10 mai 2015 à 13:16
10 mai 2015 à 13:16
Ca n'importe pas bien puisque ça inverse mois et jour sur certaines dates....
C'est donc 2 problèmes, fait ce que je t'ai indiqué.
Et pour chercher une date :
C'est donc 2 problèmes, fait ce que je t'ai indiqué.
Et pour chercher une date :
Dim c As Range Set c = [A:A].Find(CDate([A2]), LookIn:=xlValues) If Not c Is Nothing Then MsgBox "date en ligne " & c.Row Else ' date non trouvée End If
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
11 mai 2015 à 13:23
11 mai 2015 à 13:23
Bonjour tout le monde!
alors avec toutes les infos que vous m'avez donné, j'y suis arrivé donc c'est super!!!!!
Sans trop abusé (dites moi si c'est le cas), pour continuer ce programme,
je cherche à trier une liste importée en fonction du format de la cellule si c'est une date, et de la première lettre de la cellule.
C'est à dire:
si A1 est une date, alors la valeur va dans d1
si A2 commence par B alors la valeur va en e1
Si A3 commence par T alors la valeur va en f1
si A4 commence par B alors la valeur va en e2
J'ai essayé de faire une fonction avec une boucle for avec une condition basée sur le format "date" mais elle s'arrête à la première valeur et je n'ai pas réussit à lui faire analyser toutes les données et à les triées.
Voila une idée du type de fichier que je cherche à trier:
https://www.cjoint.com/?0ElnLsrbONF
Merci!!!
alors avec toutes les infos que vous m'avez donné, j'y suis arrivé donc c'est super!!!!!
Sans trop abusé (dites moi si c'est le cas), pour continuer ce programme,
je cherche à trier une liste importée en fonction du format de la cellule si c'est une date, et de la première lettre de la cellule.
C'est à dire:
si A1 est une date, alors la valeur va dans d1
si A2 commence par B alors la valeur va en e1
Si A3 commence par T alors la valeur va en f1
si A4 commence par B alors la valeur va en e2
J'ai essayé de faire une fonction avec une boucle for avec une condition basée sur le format "date" mais elle s'arrête à la première valeur et je n'ai pas réussit à lui faire analyser toutes les données et à les triées.
Voila une idée du type de fichier que je cherche à trier:
https://www.cjoint.com/?0ElnLsrbONF
Merci!!!
julesdelf
Messages postés
13
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
11 mai 2015 à 15:05
11 mai 2015 à 15:05
C'est bon, je deviendrai presque bon lol, voila le programme qui fonctionne mais il est un peu long du coup:
Sub CONTROLBOX()
Dim iIM As Long
Dim iLN As Long
Dim IM As Worksheet
Dim LN As Worksheet
Dim X As Range
Set IM = Worksheets("import")
Set LN = Worksheets("liste_numéros")
LN.Select
iLN = Range("C1").End(xlDown).Row + 1
For iIM = 1 To 500
IM.Select
IM.Range("A" & iIM).Select
If Left$(IM.Range("A" & iIM), 1) = "C" Then
IM.Range("A" & iIM).Copy LN.Range("C" & iLN)
IM.Range("A" & iIM).Delete Shift:=xlUp
iLN = iLN + 1
iIM = iIM - 1
End If
Next
IM.Select
Range("A1").Select
LN.Select
Range("A1").Select
End Sub
En tout cas, il fonctionne!!! ;)
Sub CONTROLBOX()
Dim iIM As Long
Dim iLN As Long
Dim IM As Worksheet
Dim LN As Worksheet
Dim X As Range
Set IM = Worksheets("import")
Set LN = Worksheets("liste_numéros")
LN.Select
iLN = Range("C1").End(xlDown).Row + 1
For iIM = 1 To 500
IM.Select
IM.Range("A" & iIM).Select
If Left$(IM.Range("A" & iIM), 1) = "C" Then
IM.Range("A" & iIM).Copy LN.Range("C" & iLN)
IM.Range("A" & iIM).Delete Shift:=xlUp
iLN = iLN + 1
iIM = iIM - 1
End If
Next
IM.Select
Range("A1").Select
LN.Select
Range("A1").Select
End Sub
En tout cas, il fonctionne!!! ;)