× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 Erreur date avec macro/ incapable d'ouvrir ailleurs que chez moiSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
anafolia
  Posté le 10/12/2014 @ 05:42 
Aller en bas de la page 
Petite astucienne

Bonjour,

J'ai réalisé un fichier excel avec une macro (pour la macro j'ai eu un peu d'aide).

J'ai 2 problèmes:

1: Les dates qui sont dans mes onglets ne se copie pas correctement dans ma feuille de compilation. Exemple j'inscris 2014-01-20 dans la feuille janvier et dans ma compilation il va être inscrit 1900-01-01 (les format de date de cellules sont identique)

2-Lorsque que je m'envoie le fichier au travail, les macros ne fonctionne pas et pourtant la sécurité est faible.

Petite précision au bureau c'est office 2003 et moi à la maison j'ai office 2007 mais je l'enregistre en 97-2007.


Quelqu'un ou quelqu'une pourrait bien me venir en aide svp ?

Merci de m'aider

Publicité
ferrand
 Posté le 10/12/2014 à 08:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

J'ai réalisé un fichier excel avec une macro

Je ne vois pas le texte de la macro, n'ai donc aucune idée de ce qu'elle fait ni de la façon dont son exécution est lancée.

Les dates qui sont dans mes onglets ne se copie pas correctement dans ma feuille de compilation

Qu'appelles-tu feuille de compilation ? Je connais des feuilles de calcul et des feuilles graphiques dans Excel (quelques autres si on remonte aux versions antérieures à Excel 97), côté VBA des modules (de code [ou standard], de classe), des feuilles formulaires personnalisés (userforms)...

les format de date de cellules sont identique

Quels sont-ils ? Et quels sont les formats par défaut dans tes paramètres régionaux ?

Enfin, un fichier exemple comportant ladite macro permettrait de voir sur pièce les problèmes éventuels...

anafolia
 Posté le 10/12/2014 à 16:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

J'ai voulu envoyé le fichier mais ont peu juste insérer des photos ou un lien >>>>>>Alors voici le lien du fichier héberger Fichier excel

le format date est celui là >>>>2015-01-01<<<<<<< pareille pour mes paramètres régionaux, ils sont comme ce format par défaut.

J'appelle feuille de compilation toute les données que j'ai mis dans chaque feuille soit une pour chaque mois et une feuille qui est la compilation annuel

Le fichier excel a été créer avec office 2007 mais au travail j'ai la version 97-2003

voici le module de la macro


Option Explicit

Sub grouper()
Dim sh As Worksheet, aa, fin&, fin1&
Application.ScreenUpdating = 0
With Feuil13
fin1 = .Range("A" & Rows.Count).End(xlUp).Row
If fin1 < 10 Then fin1 = 10
.Range(.Cells(10, 1), .Cells(fin1, 26)).ClearContents
End With
For Each sh In Worksheets
If sh.Name <> "TOUS DÉLAIS 2015" And sh.Name <> "Manquant" And sh.Name <> "Tous les délais" Then
fin = sh.Range("A" & Rows.Count).End(xlUp).Row
If fin < 10 Then GoTo 1
sh.Range("A10:W" & fin).Copy Feuil13.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End If
1 Next sh
With Feuil13
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin < 10 Then Exit Sub
.Range("A10") = 1
.Range("A11").FormulaLocal = "=A10+1"
.Range("A11:A" & fin).FillDown
End With
End Sub

Sub effacer()
Dim fin1&
Application.ScreenUpdating = 0
With Feuil13
fin1 = .Range("A" & Rows.Count).End(xlUp).Row
If fin1 < 10 Then fin1 = 10
.Range(.Cells(10, 1), .Cells(fin1, 26)).ClearContents
End With
End Sub



ET la commande d'exécution de la feuille13

Option Explicit

Private Sub CommandButton1_Click()
Call grouper
End Sub

Private Sub CommandButton2_Click()
Call effacer
End Sub


Je tiens à préciser que j'avais eu de l'aide pour la macro car je début en VBA je comprends la macro mais pas assez experte pour la faire moi-même.

Merci beaucoup pour l'aide qui peut être apporter :)



Modifié par anafolia le 10/12/2014 16:12
Mytå
 Posté le 10/12/2014 à 18:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut le Forum

C'est la partie suivante, qui vient réécrire dans ta colonne date pour les 1900-01-01, 1900-01-02 . . .

With Feuil13

fin = .Range("A" & Rows.Count).End(xlUp).Row

If fin < 10 Then Exit Sub

.Range("A10") = 1

.Range("A11").FormulaLocal = "=A10+1"

.Range("A11:A" & fin).FillDown

End With

Mytå



Modifié par Mytå le 10/12/2014 18:44
anafolia
 Posté le 10/12/2014 à 21:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

Quel est le correctif a y apporté ? comme je l'ai mentionné je suis débutante en VBA :S

Une piste d'idée sur le pourquoi je suis incapable exécuter les macro au bureau avec une version 97-2003? (sachant que j'ai converti mon fichier 2007 en 97-2003)

Merci

Mytå
 Posté le 10/12/2014 à 21:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Re le Forum

Tu enlèves la partie que j'ai indiqué dans mon message précédent.

Pour que ton fichier le fichier fonctionne au bureau, il doit être en .xls ou en installant le Pack de compatibilité Microsoft Office

Mytå



Modifié par Mytå le 10/12/2014 21:45
anafolia
 Posté le 10/12/2014 à 22:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonsoir,

Je l'ai mis en .xls et malgré tout il ne fonctionnait pas du tout du moins les macro. Je vais retirer la partie que mentionne et je vais voir si ça fonctionne et pour les date pourquoi ça fonctionne pas?

Merci



Modifié par anafolia le 10/12/2014 22:50
ferrand
 Posté le 11/12/2014 à 01:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

As-tu appliqué les recommandations de Mytå ? As-tu converti ton fichier au format 97-2003 en le réenregistrant avec la commande Enregistrer sous... ?

Converti normalement, les macros fonctionnent sous Excel 2000. Pas de raison donc pour qu'il ne fonctionne pas après conversion !

Pour les dates en col. A, le passage incriminé les remplace par un numéro d'ordre incrémenté à partir de 1, de A10 jusqu'à la fin ! On ne voit pas quelle en serait la raison, mais le résultat coule de source : 1=1er janvier 1900...

Tu peux prolonger la suppression de ce fragment par un petit "toilettage" qui permettrait de s'y retrouver plus vite à la lecture:

- la feuille "Tous les délais" n'existe pas, inutile de tester sa présence,

- la variable aa est déclarée mais non utilisée tu peux la supprimer de la déclaration, de même les variables fin et fin1 sont utilisées concurremment et alternativement de façon semblable, une suffirait donc, fin par exemple et tu remplaces fin1 par fin dans le code,

- je supprimerais aussi l'étiquette 1 et l'instruction GoTo 1 : il suffit de remplacer If fin < 10 Then Goto... par If fin >= 10 Then sh.Range(...

- il est bien d'inhiber la mise à jour de l'affichage (ScreenUpdating) en début de macro, mais il serait souhaitable de le rétablir à la fin.

anafolia
 Posté le 11/12/2014 à 02:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

bonsoir,

J'ai fait les recommandation de Myta mais la feuille "tous les délais" existe bien dans le fichier et c'est justement sur cette feuille qu'est compilé les données de la macro.

Le code avec les changements suggéré donne ceci:


Sub grouper()
Dim sh As Worksheet, fin&
Application.ScreenUpdating = 0
With Feuil13
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin < 10 Then fin = 10
.Range(.Cells(10, 1), .Cells(fin, 26)).ClearContents
End With
For Each sh In Worksheets
If sh.Name <> "TOUS DÉLAIS 2015" And sh.Name <> "Manquant" And sh.Name <> "Tous les délais 2015" Then
fin = sh.Range("A" & Rows.Count).End(xlUp).Row
If fin >= 10 Then
sh.Range("A10:W" & fin).Copy Feuil13.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Application.ScreenUpdating = 0
End If


End Sub

Sub effacer()
Dim fin&
Application.ScreenUpdating = 0
With Feuil13
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin < 10 Then fin = 10
.Range(.Cells(10, 1), .Cells(fin, 26)).ClearContents
End With
End Sub

Je sais pas si j'ai mal compris certain truc mais là plus rien fonctionne. Il est enregistré sous 97-2003

MErci pour votre patience :)



Modifié par anafolia le 11/12/2014 03:14
Publicité
ferrand
 Posté le 11/12/2014 à 11:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Peut-être utilises-tu un autre fichier que celui que tu as mis à disposition ? La feuille "Tous les délais" n'est pas présente dans ce classeur, je suppose qu'elle ferait concurrence à la feuilles "TOUS DÉLAIS 2015", qui elle est bien présente et est celle où se fait le regroupement (Feuil13). C'est aussi la feuille qui contient le bouton : à ce propos, il n'y en a qu'un et celui censé lancer la procédure effacer est manquant, ceci dit cette procédure n'est sans doute pas utile car le même effacement se fait dans grouper. Par ailleurs pour rétablir la mise à jour de l'affichage, ScreenUpdating doit être mis à 1 (sans doute est-il plus immédiatement perceptible d'utiliser les valeurs booléennes : True (=1), False (=0)).

Quelques commentaires intercalés pour t'aider à comprendre ce que tu programmes :

Sub grouper()
Dim sh As Worksheet, fin&
'----le & de fin& indique que la variable est de type Long,
'----
ce qui suppose que ton regroupement pourrait dépasser 32000 lignes

Application.ScreenUpdating = False
With Feuil13
'----là tu utilises le nom de code (CodeName) à distinguer du nom...
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin < 10 Then fin = 10
.Range(.Cells(10, 1), .Cells(fin, 26)).ClearContents
'----les 2 lignes ci-dessus font ce que ferait la procédure effacer (plus nécessaire donc)
End With
For Each sh In Worksheets
If sh.Name <> "TOUS DÉLAIS 2015" And sh.Name <> "Manquant" Then
fin = sh.Range("A" & Rows.Count).End(xlUp).Row
If fin >= 10 Then sh.Range("A10:W" & fin).Copy _
Feuil13.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
'----le _ en fin de ligne indique qu'à la ligne en-dessous c'est la même ligne de code qui continue
End If
Next sh
Application.ScreenUpdating = True
End Sub

ferrand
 Posté le 11/12/2014 à 11:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Une petite variation pour éviter l'utilisation entremêmée du nom de code et du nom pour la même feuille. Et aussi tenant compte que si fin<10, il n'y a rien à effacer.

Appeler la procédure avec la feuille de "compil" en argument :

Sub grouper(fcomp As Worksheet)
Dim sh As Worksheet, fin&
Application.ScreenUpdating = False
With fcomp
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin >= 10 Then .Range(.Cells(10, 1), .Cells(fin, 26)).ClearContents
End With
For Each sh In Worksheets
If sh.Name <> fcomp.Name And sh.Name <> "Manquant" Then
fin = sh.Range("A" & Rows.Count).End(xlUp).Row
If fin >= 10 Then sh.Range("A10:W" & fin).Copy _
fcomp.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next sh
Application.ScreenUpdating = True
End Sub

Private Sub CommandButton1_Click()
grouper Me
End Sub

Et ton fichier au format 97-2003 : http://cjoint.com/?DLllLHdjiDk

anafolia
 Posté le 11/12/2014 à 14:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

Wow ça fonctionne à merveille je me l'envoie aujourd'hui au travail :D et je test je te redonne des nouvelles :)

MErci beaucoup

ferrand
 Posté le 11/12/2014 à 15:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

OK

anafolia
 Posté le 12/12/2014 à 22:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonsoir,

Tous est parfait reste juste à le faire tester par la utilisateur...mais je verrais pas pourquoi ça fonctionnerais plus :D

Merci beaucoup :)

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
104,99 €SSD SanDisk Ultra 3D 1 To à 104,99 €
Valable jusqu'au 21 Septembre

Amazon fait une belle promotion sur le SSD SanDisk Ultra 3D d'une capacité de 1 To qui passe à 104,99 € livré gratuitement. On le trouve ailleurs autour de 130 €. Une bonne affaire pour ce SSD performant qui offre des débits de 560 Mo/s en lecture et 530 Mo/s en écriture. Cette version est garantie 3 ans.


> Voir l'offre
17,90 €Set de 30 lames bois et métal Bosch pour scies sauteuses + boite à 17,90 €
Valable jusqu'au 24 Septembre

Amazon fait une promotion sur le set de 30 lames bois et métal Bosch pour scies sauteuses avec leur boite de rangement à 17,90 €. On trouve l'ensemble ailleurs à partir de 36 €. Les lames portent les références T119BO, T111C et T118A (10 lames de chaque).


> Voir l'offre
18,99 €Micro clé USB 3.1 Sandisk Ultra Fit 128 Go à 18,99 €
Valable jusqu'au 21 Septembre

Amazon fait une promotion sur la micro clé USB Sandisk Ultra Fit d'une capacité de 128 Go qui passe à 18,99 €. La minuscule taille de cette clé USB va vous permettre de la laisser brancher en permanence sur votre portable, votre TV ou votre autoradio sans qu'elle dépasse de manière disgracieuse. Sa compatibilité USB 3.1 lui permet d'atteindre des débits jusqu'à 130 Mo/s. 


> Voir l'offre

Sujets relatifs
Macro ouvrir fichier avec raccourci clavier
Ouvrir avec macro un fichier dans autre classeur
erreur macro
sommeprod avec date
Macro...Date de Mise a jour
Tirage au sort avec macro
échelle des x avec deux colonnes date et heure
Excel ne peut pas terminer cette tâche avec erreur de ressources disponible
Excel ne peut pas terminer cette tâche avec erreur de ressources disponible
ouvrir un dossier avec extension CMI
Plus de sujets relatifs à Erreur date avec macro/ incapable d''ouvrir ailleurs que chez moi
 > Tous les forums > Forum Bureautique