Recuperation de donnee non executee

Résolu
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009 - 22 août 2009 à 22:22
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009 - 28 août 2009 à 08:22
Bonsoir!
Voici un code de recuperation de donnee mais qd je veux l'executer il ne marche pas totalement la partie If source.Worksheets("Plateforme").Cells(A, 1).Value = "A-1" est souligne. aider moi s'il vous plait merci

Public Const RefDate As Date = #12/31/2008#
Public NomfichierSource As Variant
Public sourceWorksheets As Object
Public A1 As Object
Public A2 As Object
Public source As Object
Public A As Integer ' parcourt les lignes et les rappots journaliers
Public j As Integer 'gere la date du rapport journalier
Public Fichier_Aide As String


Sub Bouton12_Clic()
NomfichierSource = Application.GetOpenFilename("Fichier Excel(*.xls), *.xls,Fichier Excel (*.xlsx), *.xlsx")
' On verifie que l'on a selectionné un nom de classeur
If NomfichierSource = "" Then
' On ouvre le classeur en lecture seule
Set source = Workbooks.Open(NomfichierSource, True, True)
MsgBox NomfichierSource & " NOW OPEN ", , "Chemin du Rapport Source"
REPONSE = MsgBox(" Rapport already charged , actionner un des bouton de récupération pour collecter les données", vbOKOnly, "CONFIRMATION")
End If

Application.DisplayAlerts = False 'Evite les messages d'Excel
Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
Application.AskToUpdateLinks = False 'Evite l'exécution du message de mise à jour des liens

Application.ScreenUpdating = False ' turn off the screen updating
Application.StatusBar = "COPIE DES DAILY WELL REPORT FOXTROT" & NomfichierSource & "..."
On Error Resume Next ' ignore errors
' open the source workbook, read only
Set source = Workbooks.Open(NomfichierSource, True, True)
On Error GoTo 0 ' stop when errors occur
If Not source Is Nothing Then 'opened the workbook

'GLOBAL FIELD DATA
With wellA1 '
'la date du rapport source
For A = 1 To 60
If source.Worksheets("Plateforme").Cells(A, 1).Value = "DATE" Then
DATEJOUR = source.Worksheets("Plateforme").Cells(A, 2).Value
End If
Next A
j = DateDiff("d", RefDate, DATEJOUR)
.Cells(3 + j, 1).Value = DATEJOUR

For A = 1 To 60

If source.Worksheets("Plateforme").Cells(A, 1).Value = "A-1" Then

.Cells(3 + j, 2).Value = source.Worksheets("Plateforme").Cells(A, 2).Value
.Cells(3 + j, 3).Value = source.Worksheets("Plateforme").Cells(A, 3).Value
.Cells(3 + j, 4).Value = source.Worksheets("Plateforme").Cells(A, 4).Value
.Cells(3 + j, 5).Value = source.Worksheets("Plateforme").Cells(A, 5).Value
.Cells(3 + j, 6).Value = source.Worksheets("Plateforme").Cells(A, 6).Value
.Cells(3 + j, 7).Value = source.Worksheets("Plateforme").Cells(A, 7).Value
.Cells(3 + j, 8).Value = source.Worksheets("Plateforme").Cells(A, 8).Value
.Cells(3 + j, 9).Value = source.Worksheets("Plateforme").Cells(A, 9).Value
.Cells(3 + j, 10).Value = source.Worksheets("Plateforme").Cells(A + 1, 10).Value
.Cells(3 + j, 12).Value = source.Worksheets("Plateforme").Cells(A + 1, 11).Value

End If
If source.Worksheets("Plateforme").Cells(A, 1).Value = "DUSES" Then

.Cells(3 + j, 12).Value = source.Worksheets("Plateforme").Cells(A + 1, 4).Value

source.Close

End If
If source.Worksheets("Plateforme").Cells(A, 1).Value = "A-2" Then

.Cells(3 + j, 2).Value = source.Worksheets("Plateforme").Cells(A, 2).Value
.Cells(3 + j, 3).Value = source.Worksheets("Plateforme").Cells(A, 3).Value
.Cells(3 + j, 4).Value = source.Worksheets("Plateforme").Cells(A, 4).Value
.Cells(3 + j, 5).Value = source.Worksheets("Plateforme").Cells(A, 5).Value
.Cells(3 + j, 6).Value = source.Worksheets("Plateforme").Cells(A, 6).Value
.Cells(3 + j, 7).Value = source.Worksheets("Plateforme").Cells(A, 7).Value
.Cells(3 + j, 8).Value = source.Worksheets("Plateforme").Cells(A, 8).Value
.Cells(3 + j, 9).Value = source.Worksheets("Plateforme").Cells(A, 9).Value
.Cells(3 + j, 10).Value = source.Worksheets("Plateforme").Cells(A + 1, 10).Value
.Cells(3 + j, 12).Value = source.Worksheets("Plateforme").Cells(A + 1, 11).Value

End If

If source.Worksheets("Plateforme").Cells(A, 1).Value = "DUSES" Then

.Cells(3 + j, 12).Value = source.Worksheets("Plateforme").Cells(A + 1, 4).Value

source.Close

End If

Next A

End With

End If
'MsgBox YES + NO + CANCEL + icône Question
Select Case MsgBox("NOW LOADED", vbYesNoCancel + vbQuestion, "Titre de la MsgBox")
Case vbYes
'procédure si click sur YES
Case vbNo
'procédure si click sur NO
Case vbCancel
'procédure si click sur CANCEL
End Select
Application.DisplayAlerts = True 'Réactive les messages d'Excel
Application.EnableEvents = True 'Réactive l'exécution éventuelle de macros liées aux fichiers ouverts
Application.AskToUpdateLinks = True 'Réactive l'exécution du message de mise à jour des liens


End Sub

12 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2009 à 05:42
Salut
Pense à utiliser la mise en forme de code proposée dans la zone de saisie : cela rend la lecture des codes beaucoup plus claire pour les lecteurs ... qui auront le courage de lire autant de lignes.

Si la ligne est soulignée, c'est qu'il doit y avoir une erreur.
Quel est le code/texte de l'erreur ?
C'est d'ailleur bizarre car, quelques lignes avant, il y a une ligne qui lui ressemble comme deux gouttes d'eau
If source.Worksheets("Plateforme").Cells(A, 1).Value = "DATE" Then 

et celle-là ne poserait pas de problème ... étrange
Ah bah si, regarde, tu as un "source.Close" en plein milieu !
Si tu fermes ta source, ça va marcher beaucoup moins bien !
Que veux tu faire, en fait ?
Sortir de ta boucle ? ---> Exit For

Sinon :
-1- Tu auras remarqué que, dans ton code, tu fais deux fois les mêmes tests avec DUSES ?
-2- Optimise ton code :
Tu as 60 actions à faire et à chaque fois tu testes le contenu d'une même cellule
De plus, avec deux tests différents, tu fais les mêmes actions ("A-1" et "A-2")
For A=1 To 60
  If maCellule = "A-1"
    Actions type 1
  End If
  If maCellule = "DUSES"
    Actions type 2
  End If
  If maCellule = "A-2"
    Actions type 1
  End If
End If
Next

Un simple Select Case fera l'affaire :
Select Case source.Worksheets("Plateforme").Cells(A, 1).Value
  Case "A-1", "A-2"
    Actions type 1
  Case "DUSES"
    Actions type 2
End Select


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
24 août 2009 à 14:46
Merci Jack!
j'ai essaye et sa baigne comme dans de l'huile merci et je pense qu'on doit garder le contact. A+ frere
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 août 2009 à 17:54
Re
Comme spécifié en bas de chaque réponse, je ne réponds pas aux messages privés.
Dans le code modifié que tu m'as montré, tu as gardé le "maCellule"
Reflechis !
"maCellule" n'est pas un mot clé du langage ni une de tes variables : que veux-tu que VBA en fasse ?
Ce texte n'avait comme rôle que de remplacer la longue syntaxe
Source.Worksheets("Plateforme").Cells(A, 1).Value
Je ne t'ai pas collé du code pour que tu le recopies dans ton appli, mais pour que tu comprennes le principe de fonctionnement.

Bref, quand je te parle de Select Case ou autre, c'est à toi de lire les docs et l'aide de VB pour le maitriser. Codes-Sources n'est pas un centre de formation et remplacera jamais un professionnel. C'est à toi de rassembler les briques et de faire tes propres essais.

Alors, puisque tu n'as pas l'air de comprendre :
Remplacer, tu sais faire ? (Ctrl-H)
[*] Remplace "maCellule" par
Source.Worksheets("Plateforme").Cells(A, 1).Value

[*] Remplace "Actions type 1" par
            .Cells(3 + j, 2).Value = Source.Worksheets("Plateforme").Cells(A, 2).Value 
            .Cells(3 + j, 3).Value = Source.Worksheets("Plateforme").Cells(A, 3).Value 
            .Cells(3 + j, 4).Value = Source.Worksheets("Plateforme").Cells(A, 4).Value 
            .Cells(3 + j, 5).Value = Source.Worksheets("Plateforme").Cells(A, 5).Value 
            .Cells(3 + j, 6).Value = Source.Worksheets("Plateforme").Cells(A, 6).Value 
            .Cells(3 + j, 7).Value = Source.Worksheets("Plateforme").Cells(A, 7).Value 
            .Cells(3 + j, 8).Value = Source.Worksheets("Plateforme").Cells(A, 8).Value 
            .Cells(3 + j, 9).Value = Source.Worksheets("Plateforme").Cells(A, 9).Value 
            .Cells(3 + j, 10).Value = Source.Worksheets("Plateforme").Cells(A + 1, 10).Value 
            .Cells(3 + j, 12).Value = Source.Worksheets("Plateforme").Cells(A + 1, 11).Value 

[*] Remplace "Actions type 2" par
.Cells(3 + j, 12).Value = source.Worksheets("Plateforme").Cells(A + 1, 4).Value 


En conclusion, je finirai par ce proverbe qui va bien
Quand le sage montre la lune, le fou regarde le doigt
(Proverbe chinois)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
25 août 2009 à 21:07
ok! merci une foi encore! cela fait seulment 2 semaines que je job avec vba je suis petrolier et utilise des logiciels de simulation que des languages de programmations. sa ira merci une foi encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
27 août 2009 à 13:48
Salut!
je suis debutant et j'ai lu sur select case apres la sage remarque de JACK je l'applique a mon code il est accepte mais n'execute pas la recuperation des donnees.
j'aimerais que vous aidiez dans ce sens. merci et bonne journee a tous


'recuperation des donnees
For A = 1 To 60
IfSource.Worksheets("Plateforme").Cells(A, 1).Value = "DATE" Then
DATEJOUR = Source.Worksheets("Plateforme").Cells(A, 2).Value
End If Next A
j = DateDiff("d", RefDate, DATEJOUR)
Cells(3 + j, 1).Value = DATEJOUR

For A = 1 To 60
Select Case Source.Worksheets("Plateforme").Cells(A, 1).Value
Case "A-1", "A-2":

Cells(3 + j, 2).Value = Source.Worksheets("Plateforme").Cells(A, 2).Value
Cells(3 + j, 3).Value = Source.Worksheets("Plateforme").Cells(A, 3).Value
Cells(3 + j, 4).Value = Source.Worksheets("Plateforme").Cells(A, 4).Value
Cells(3 + j, 5).Value = Source.Worksheets("Plateforme").Cells(A, 5).Value
Cells(3 + j, 6).Value = Source.Worksheets("Plateforme").Cells(A, 6).Value
Cells(3 + j, 7).Value = Source.Worksheets("Plateforme").Cells(A, 7).Value
Cells(3 + j, 8).Value = Source.Worksheets("Plateforme").Cells(A, 8).Value
Cells(3 + j, 9).Value = Source.Worksheets("Plateforme").Cells(A, 9).Value
Cells(3 + j, 10).Value = Source.Worksheets("Plateforme").Cells(A + 1, 10).Value
Cells(3 + j, 12).Value = Source.Worksheets("Plateforme").Cells(A + 1, 11).Value
Case "DUSES":
Cells(3 + j, 12).Value = Source.Worksheets("Plateforme").Cells(A + 1, 4).Value
End Select
Next A
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 août 2009 à 14:23
Re
Ton code semble enfin bon, enfin conforme à l'original.
"mais n'execute pas la recuperation des donnees." Que ce passe t-il ? Que ne ne passe t-il pas ?
Comment veux-tu qu'on sache ce que tu devrais récupérer ?

Apprends à utiliser le mode debogage :
Tu mets la souris sur une ligne
Tu appuies sur F9 : le programme s'arrêtera là la prochaine fois
Une fois stoppé, passe la souris au dessus des variables pour en lire le contenu;
Utilise la fenêtre de debugage (Ctrl-G) pour faire afficher une variable, exemple :
? Source.Worksheets("Plateforme").Cells(A, 1).Value
pour afficher le contenu de cette cellule
Avance d'une ligne de code avec F8, ou F5 pour continuer normalement

Parce que j'ai un doute dans ton test :
Quand tu testes si ta cellule contient "A-1", tu penses à quoi ?
Le texte "A-1" ou bien le calcul de la variable A auquel tu retranches 1 ?
Parce que la syntaxe n'est pas bonne dans ce deuxième cas: Il te suffit de retirer les "

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
27 août 2009 à 14:41
le A-1 est le nom d'un puits de petroles de meme que le A-2. je recois en fait des rapports journaliers constitues de deux feuilles un onshore et l'autre plateforme. je souhaiterai donc recuperer les donnes journalieres de la plateforme et en faire un dossier . merci j'essaye de voir ce que ta dit en suite je reviendrai. A+
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
27 août 2009 à 17:03
Comme je le disais, le programme s'execute mais ne recopie rien sur le tableau concu pour la cause, alors qu'avec les repetitions(sans select case) ca marche. voici comment et disposer les donnes dans le tableau excel. merci

Date.................

PUITS Pression de fond (Psig) Pression tête de puits (Psig) ect

A-1 4 .

A-2 45 .

A-3 14

A-4bis 12 .
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
27 août 2009 à 17:07
PUITS
A-1

A-2

A-3

A-4bis
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
27 août 2009 à 17:11
Pression de fond (Psig)
0


0
2588

1740
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 août 2009 à 20:12
Ok
Donc, si tu as suivi mes indications, que donne le :
? Source.Worksheets("Plateforme").Cells(A, 1).Value

dans la fenêtre de debug lorsque tu imposes un arrêt (F9) sur la ligne suivante :
Select Case Source.Worksheets("Plateforme").Cells(A, 1).Value


Ou encore :
Juste avant le Select Case, ajoute cette ligne :
Debug.Print "A:"; A, "Cellule:"; Source.Worksheets("Plateforme").Cells(A, 1).Value
et tu verras dans la fenêtre de debug qu'elle donnée est lue au fur et à mesure de ta boucle.

PS1 : Supprime les ":" qui se trouvent après les "Case" : Ce symbole est réservé à la séparation des instructions lorsque tu en mets plusieurs sur une même ligne. Inutile ici.

PS2 : Si tu dois recoller des lignes de code ici, merci d'utiliser les bornes de coloriage proposées dans le bandeau de la zone de saisie : Le code sera beaucoup plus facile à lire (et avec l'indentation) - merci pour mes yeux et ma patience

Maintenant, c'est à toi de te débrouiller.
Tu as tous les éléments en main.
Prends le temps d'apprendre.
Si tu es pressé, fait appel aux professionnels ou demande une formation à ton employeur.
0
jmakossi Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 28 août 2009
28 août 2009 à 08:22
Grand merci a toi Jack!!! pour ton partage, merci aussi pour tes conseils j'espere d'ici qlq temps aider aussi certaines personnes. Apres tout voici ce qui s'affiche je reflechirai a tout cela dans la soiree merci . A++

Dans l'expression qui suit Source indique source = vide
If Not source Is Nothing Then 'opened the workbook


dans cette expression la date du jour indique 00:00:00 meme qd je je charge le document
j = DateDiff("d", RefDate, DATEJOUR)
Cells(3 + j, 1).Value = DATEJOUR

l'expression suivante est en jaune mais la position de la souris sur cette expresion n'indique rien
Source.Worksheets("Plateforme").Cells(A, 1).Value
0
Rejoignez-nous