Transfert de données vba
Licoquelicot
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Actuellement j'ai créé 2 documents Excel avec chacun des programmes vba.
Le 1er (MC_fonctionne) me permet, par un userform, de récolter des informations.
Le 2nd (MC_JCB_test) doit être capable d'aller chercher les infos rentrées dans le 1er document.
C'est à dire, j'ouvre mon document nommé "MC_JCB_test". Dans l'onglet "Menu" je clique sur le bouton "Extraction hebdomadaire" et à ce moment là, une boîte de dialogue me demande le numéro de semaine souhaité.
Puis, mon programme recherche toutes les infos rentrées dans "MC_fonctionne" correspondant à cette semaine.
Une fois qu'il a trouvé toutes les infos, il me les écrit dans l'onglet "Synthese".
Le problème que je rencontre c'est qu'il n'arrive pas à lire les infos de "MC_fonctionne" et m'affiche un message d'erreur :"Erreur définie par l'application ou par l'objet"
Voici le programme qui me pose soucis (ligne en rouge ou le message apparait):
Option Explicit
Option Base 1
Sub Extraction_Hebdo()
Dim tblo, tblo1, xchoixnosem As Long
Dim i As Long, j As Long, xdlgn As Long, xlgn As Long
Dim Date_sel As Date
Dim Semaine As Integer
Application.ScreenUpdating = False
' Contrôle de la saisie
'ATTENTION LE BOUTON DE COMMANDE ANNULER DE INPUTBOX GENERE UNE ERREUR
Semaine = DatePart("ww", Date, vbMonday)
Semaine = InputBox("Semaine à selectionner ?", "Semaine", Semaine - 1)
If Semaine < 1 Or Semaine > 52 Then
MsgBox "Le numéro de la semaine doit être un chiffre compris entre 1 et 52.", vbCritical, "Choix de la semaine"
Application.ScreenUpdating = True
End If
' Extraction des données
With Workbooks("MC_fonctionne.xlsm").Sheets("Synthese")
.Activate
' Transfert des données de la feuille dans un array
tblo = .Range("A6:N" & xdlgn).Value
' Tri des données
' Code non réalisé
End With
' Copy tblo dans tblo1
ReDim tblo1(LBound(tblo, 1) To UBound(tblo, 1), LBound(tblo, 2) To UBound(tblo, 2))
xlgn = 0
For i = LBound(tblo, 1) To UBound(tblo, 1)
For j = LBound(tblo, 2) To UBound(tblo, 2)
If tblo(i, 14) = xchoixnosem Then
tblo1(i, j) = tblo(i, j)
xlgn = xlgn + 1
End If
Next j
Next i
' Test si donnees trouvees
If xlgn = 0 Then
With Workbooks("MC_JCB_test.xlsm").Sheets("Synthese")
.Activate
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:N" & xdlgn).ClearContents
End With
With Workbooks("MC_JCB_test.xlsm").Sheets("Menu")
.Activate
Application.ScreenUpdating = True
.Range("A1").Select
End With
MsgBox "Aucun résultat pour la semaine no. " & xchoixnosem
Exit Sub
End If
' Transfert des données de tblo1 dans la feuille - Code à améliorer suppression des lignes vides dans le tableau
With Workbooks("MC_JCB_test.xlsm").Sheets("Synthese")
.Activate
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:N" & xdlgn).ClearContents
.Range("A2").Resize(UBound(tblo1, 1), UBound(tblo1, 2)).Value = tblo1
' supprime les lignes vides
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row
For i = xdlgn To 2 Step -1
If .Cells(i, 1) = "" Then
.Rows(i).Delete
End If
Next i
.Range("A1").Select
Application.ScreenUpdating = True
End With
Erase tblo: Erase tblo1
End Sub
Merci, par avance, pour votre aide
Actuellement j'ai créé 2 documents Excel avec chacun des programmes vba.
Le 1er (MC_fonctionne) me permet, par un userform, de récolter des informations.
Le 2nd (MC_JCB_test) doit être capable d'aller chercher les infos rentrées dans le 1er document.
C'est à dire, j'ouvre mon document nommé "MC_JCB_test". Dans l'onglet "Menu" je clique sur le bouton "Extraction hebdomadaire" et à ce moment là, une boîte de dialogue me demande le numéro de semaine souhaité.
Puis, mon programme recherche toutes les infos rentrées dans "MC_fonctionne" correspondant à cette semaine.
Une fois qu'il a trouvé toutes les infos, il me les écrit dans l'onglet "Synthese".
Le problème que je rencontre c'est qu'il n'arrive pas à lire les infos de "MC_fonctionne" et m'affiche un message d'erreur :"Erreur définie par l'application ou par l'objet"
Voici le programme qui me pose soucis (ligne en rouge ou le message apparait):
Option Explicit
Option Base 1
Sub Extraction_Hebdo()
Dim tblo, tblo1, xchoixnosem As Long
Dim i As Long, j As Long, xdlgn As Long, xlgn As Long
Dim Date_sel As Date
Dim Semaine As Integer
Application.ScreenUpdating = False
' Contrôle de la saisie
'ATTENTION LE BOUTON DE COMMANDE ANNULER DE INPUTBOX GENERE UNE ERREUR
Semaine = DatePart("ww", Date, vbMonday)
Semaine = InputBox("Semaine à selectionner ?", "Semaine", Semaine - 1)
If Semaine < 1 Or Semaine > 52 Then
MsgBox "Le numéro de la semaine doit être un chiffre compris entre 1 et 52.", vbCritical, "Choix de la semaine"
Application.ScreenUpdating = True
End If
' Extraction des données
With Workbooks("MC_fonctionne.xlsm").Sheets("Synthese")
.Activate
' Transfert des données de la feuille dans un array
tblo = .Range("A6:N" & xdlgn).Value
' Tri des données
' Code non réalisé
End With
' Copy tblo dans tblo1
ReDim tblo1(LBound(tblo, 1) To UBound(tblo, 1), LBound(tblo, 2) To UBound(tblo, 2))
xlgn = 0
For i = LBound(tblo, 1) To UBound(tblo, 1)
For j = LBound(tblo, 2) To UBound(tblo, 2)
If tblo(i, 14) = xchoixnosem Then
tblo1(i, j) = tblo(i, j)
xlgn = xlgn + 1
End If
Next j
Next i
' Test si donnees trouvees
If xlgn = 0 Then
With Workbooks("MC_JCB_test.xlsm").Sheets("Synthese")
.Activate
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:N" & xdlgn).ClearContents
End With
With Workbooks("MC_JCB_test.xlsm").Sheets("Menu")
.Activate
Application.ScreenUpdating = True
.Range("A1").Select
End With
MsgBox "Aucun résultat pour la semaine no. " & xchoixnosem
Exit Sub
End If
' Transfert des données de tblo1 dans la feuille - Code à améliorer suppression des lignes vides dans le tableau
With Workbooks("MC_JCB_test.xlsm").Sheets("Synthese")
.Activate
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:N" & xdlgn).ClearContents
.Range("A2").Resize(UBound(tblo1, 1), UBound(tblo1, 2)).Value = tblo1
' supprime les lignes vides
xdlgn = .Range("A" & Rows.Count).End(xlUp).Row
For i = xdlgn To 2 Step -1
If .Cells(i, 1) = "" Then
.Rows(i).Delete
End If
Next i
.Range("A1").Select
Application.ScreenUpdating = True
End With
Erase tblo: Erase tblo1
End Sub
Merci, par avance, pour votre aide
A voir également:
- Transfert de données vba
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Whatsapp transfert discussion - Accueil - WhatsApp
- Transfert de mail - Guide
- Transfert de donnees entre 2 iphone - Guide
2 réponses
Bonjour,
à la ligne tblo = .Range("A6:N" & xdlgn).Value , la variable xdlgn n'est pas initialisée donc contient 0 et N0 est impossible
Faire un xdlgn = 1 avant
Cordialement
à la ligne tblo = .Range("A6:N" & xdlgn).Value , la variable xdlgn n'est pas initialisée donc contient 0 et N0 est impossible
Faire un xdlgn = 1 avant
Cordialement
Bonjour,
Je crois que nous pouvons chercher longtemps la ligne en rouge...
Ce genre de problèmes est généralement dû au fait que le fichier où tu vas piocher les données (ici : MC_fonctionne) n'est pas ouvert. Excel ne sait pas où le chercher, mais si tu ouvres les deux fichiers, ça risque de marcher.
A+
PS : pour la vérification de la saisie du numéro de semaine (et le traitement du bouton Annuler), tu peux t'inspirer de https://forums.commentcamarche.net/forum/affich-28593496-boite-de-dialogue-pour-nombre-d-impression#p28595467
Je crois que nous pouvons chercher longtemps la ligne en rouge...
Ce genre de problèmes est généralement dû au fait que le fichier où tu vas piocher les données (ici : MC_fonctionne) n'est pas ouvert. Excel ne sait pas où le chercher, mais si tu ouvres les deux fichiers, ça risque de marcher.
A+
PS : pour la vérification de la saisie du numéro de semaine (et le traitement du bouton Annuler), tu peux t'inspirer de https://forums.commentcamarche.net/forum/affich-28593496-boite-de-dialogue-pour-nombre-d-impression#p28595467