Incrémentation intempestive en VBA

chimel38

XLDnaute Nouveau
Bonjour,

La découverte de VBA me laisse entrevoir des perspectives intéressantes, mais aussi des surprises

Mon but est de créer une procédure qui ferait l'opération suivante, et je vais partir d'un exemple :
A1 = BQ
B1 = 15/12/2011
C1 = 512000
En me positionnant sur la cellule A2 je veux y copier A1, puis copier B1 sur B2, et enfin me positionner sur C2

Voila donc le bout de code que j'ai fait.



ActiveCell.Formula = ActiveCell.Offset(-1, 0)
ActiveCell.Offset(0, 1).Formula = ActiveCell.Offset(-1, 1)
ActiveCell.Offset(0, 2).Activate


Il s'avère alors que la cellule B2 incrémente la cellule B1 et donc je me retrouve avec le 16/12/2011.:mad:

Le seul moyen que j'ai trouvé est de faire pour la deuxième ligne de code
ActiveCell.Offset(0, 1).Formula = ActiveCell.Offset(-1, 1) -0

Mais je me doute bien que ce genre de bidouille n'est pas la "bonne" solution, existe un moyen de désactiver (En VBA) cette incrémentation?

Merci pour votre aide.

Chimel qui débute en VBA...
 

MichD

XLDnaute Impliqué
Re : Incrémentation intempestive en VBA

Bonjour,

Quelle est ta version d'Excel?

Pourquoi utiliser la propriété "Formula" si tu veux copier la VALEUR d'une cellule?

ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1)

Quoi qu'il en soit, je ne vois pas pourquoi tu obtiens une incrémentation.
J'ai fait le test à partir de la version Excel 2010.

Est-ce que la date de la cellule B1 est le résultat d'une formule? Si oui, laquelle?

Peux-tu publier ton fichier avec seulement l'information pertinente? Tu peux effacer tout le reste...
 

chimel38

XLDnaute Nouveau
Re : Incrémentation intempestive en VBA

Bonjour,

Quelle est ta version d'Excel?

Pourquoi utiliser la propriété "Formula" si tu veux copier la VALEUR d'une cellule?

ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1)

Quoi qu'il en soit, je ne vois pas pourquoi tu obtiens une incrémentation.
J'ai fait le test à partir de la version Excel 2010.

Est-ce que la date de la cellule B1 est le résultat d'une formule? Si oui, laquelle?

Peux-tu publier ton fichier avec seulement l'information pertinente? Tu peux effacer tout le reste...
Bonjour MichD

Si j'ai mis formula c'est que c'était ma dernière version test et j'avais "rajouté" formula pensant que peut-être la solution était là.
Ce qui n'était pas le cas

T'adresser le fichier ou essayer de dissocier la feuille n'est pas aisé d'agissant de la comptabilité d'une association.
Quoiqu'il en soit: La date indiquée n'est pas le résultat d'une formule mais bien d'une saisie et seul son contenu est testé par ailleurs.

J'ai fait l'expérience sur un fichier test et là tout fonctionne normalement la même procédure
ActiveCell.Formula = ActiveCell.Offset(-1, 0)
ActiveCell.Offset(0, 1).Formula = ActiveCell.Offset(-1, 1)
ActiveCell.Offset(0, 2).Activate

En revenant sur mon fichier "comptabilité"
Plus bizarre encore, en testant successivement plusieurs lignes, je constate une incrémentation du jour(+1) mais aussi de l'année(+4)
ainsi j'aurais :
11/09/2011
12/09/2011
13/09/2015
14/09/2019
etc
C'est vraiment un mystère !
Et quand j'applique ma ligne miraculeuse : ActiveCell.Offset(0, 1).Formula = ActiveCell.Offset(-1, 1) -0
tout fonctionne comme je le souhaite.

Je crois que je vais rester sur cette solution qui répond malgré mes interrogations à mon souhait.

Dernière minute j'enlèverai .formula :)

Chimel
 

MichD

XLDnaute Impliqué
Re : Incrémentation intempestive en VBA

Je suis presque sûr que tu as un problème de format de cellules dans la colonne des dates.

Exemple : Suppose que j'entre ceci dans une cellule au format standard : ="13/06/2012", la date s'affiche à gauche donc considérée comme du texte. Et si j'utilise ceci : ="13/06/2012"-0, la date s'affiche à droite comme cela devrait être.

Dans ton cas, assure-toi que la colonne a effectivement un format date reconnu par Excel.
Exemple :

With ActiveCell.Offset(0, 1)
.NumberFormat = "DD/MM/YY" ' où le format date que tu préfères
.Value = ActiveCell.Offset(-1, 1)
End With

Cela suppose que cette cellule ActiveCell.Offset(-1, 1)
a comme contenu SEULEMENT UNE DATE et que son format date est reconnu par Excel.
 
Dernière édition:

chimel38

XLDnaute Nouveau
Re : Incrémentation intempestive en VBA

Je suis sous Excel 2007

Et j'ai bien choisi le format standard proposé (date courte)
Malheureusement ta proposition de forcer le format ne fonctionne pas
Mes tests (et je n'évoquerai que la colonne Date)
qui par exemple est : 11/09/2011 pour la cellule de départ, je change le format pour passer en "standard"
et j'obtiens la valeur : 39335
J'applique ma macro sur la ligne suivante
et j'obtiens >>> 11/09/2011 normal puisque j'impose le format DD/MM/YYYY et là je me dis super !!!
J'applique ma macro sur la ligne suivante
et j'obtiens >>> 12/09/2015 et là je me dis heu ....:mad:

Ma macro fonctionne tout à fait normalement pour des nombres, pour du texte, mais les dates nenni.
Comme tu le supposes un problème de format, j'ai appliqué d'autres formats de dates avec le même sort.

J'ai fait le test sur un fichier "nouveau" et ma macro fonctionne, c'est donc bien dans mon fichier "comptabilité" que se pose le problème.
Je vais tenter d'élucider ce mystère avec des copies de la feuille et je manquerai pas de te faire connaître le résultat de mon enquête.

Merci pour ton aide bien utile quand on débute.
 

MichD

XLDnaute Impliqué
Re : Incrémentation intempestive en VBA

Tu peux publier ta feuille de calcul.

Tu peux effacer toutes les données sauf la colonne des dates.
Avant de la publier, assure-toi que la ligne de code provoque ce que tu décris dans le nouveau fichier.

Nul besoin de publier tout le classeur...seulement ce qui est pertinent.
 

chimel38

XLDnaute Nouveau
Re : Incrémentation intempestive en VBA

Je ne sais pas ce que tu entends par "publier".

1) J'ai fait un copier-coller des colonnes en question et même un peu plus.
J'ai conservé les valeurs
et ma macro fonctionne parfaitement comme je le souhaite.

2)J'ai repris mon fichier "merdique" j'ai supprimé toutes les feuilles environnantes tout ce qui pourrai parasiter
et ma macro ne fonctionne PAS :confused:

Je t'adresse le fichier MONTEST
 

Pièces jointes

  • MONTEST.xlsm
    262.1 KB · Affichages: 46
  • MONTEST.xlsm
    262.1 KB · Affichages: 46
  • MONTEST.xlsm
    262.1 KB · Affichages: 49

MichD

XLDnaute Impliqué
Re : Incrémentation intempestive en VBA

Ton fichier fonctionne normalement chez moi! un autre exemplaire!
 

Pièces jointes

  • MONTEST.xlsm
    257.7 KB · Affichages: 51
  • MONTEST.xlsm
    257.7 KB · Affichages: 50
  • MONTEST.xlsm
    257.7 KB · Affichages: 49

chimel38

XLDnaute Nouveau
Re : Incrémentation intempestive en VBA

MichD, je n'ai qu'un mot à te dire Merci !

Sympa l'idée de rechercher d'utiliser End(xlUp) l'avantage étant que l'utilisateur peut se trouver n'importe où sur la feuille.
J'ai toutefois changé quelques offsets qui ne répondaient pas à mon souhait.
Désormais ça me recopie le N°de Pièce, le CJAL et la date. Le CPC étant normalement vide (il s'agira pour l'utilisateur de l'indiquer).

Je vais vite apporter les modifications car je dois rencontrer bientôt un des utilisateurs de mon application.

Merci encore pour ta patience et tes compétences.
 

Discussions similaires

Réponses
21
Affichages
997
  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
320

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote