Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autre choix que Dateserial

  • Initiateur de la discussion Initiateur de la discussion herve62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

herve62

XLDnaute Barbatruc
Bonjour
J'arrive à bien triturer les dates mais là je coince !
j'aurai aimé concaténer : "Juillet" ; "2015" donc 2 cellules en une Seule ( différente): 07/2015
j'ai fouiné chez JB , vu un post de ROGER avec Dateserial mais là il faut 3 critères : jour,mois, année
et que ce soit REconnu comme Date ! CAR ensuite j'aimerai comparer du style par exemple
SI ce que je cherche est compris entre cette période de 10/2014 à 07/2015 alors je fais ma tambouille
en VBA , bien sûr !!
Merci

Je ne joins pas de fichier car c'est le départ donc comme je sais pas .... ce serait un fichier vide !
 
Re : Autre choix que Dateserial

Re...


Bin ouais ROGER mais mon appli va partir tout en VBA , les formules(*) sont contraires à ma religion (...)
C'est pour cela que je propose aussi des solutions en VBA... ...pour qui veut bien se donner la peine de regarder.​


ℝOGER2327
#7976


Lundi 16 Tatane 142 (Transfiguration de Saint Vincent van Gogh, transmutateur - fête Suprême Quarte)
11 Thermidor An CCXXIII, 6,5252h - panis
2015-W31-3T15:39:38Z
 
Re : Autre choix que Dateserial

Slt PMO
Bon bin ... temps que tout le monde est sur le sujet
je joins l'étape suivante qui rejoins l'idée de ROGER ( mais là en VBA)
Il faudrait que selon la période toute ligne concordant au choix se recopie dans la feuille 2
 

Pièces jointes

Re : Autre choix que Dateserial

Re...


(...)
je joins l'étape suivante qui rejoins l'idée de ROGER ( mais là en VBA)
Il faudrait que selon la période toute ligne concordant au choix se recopie dans la feuille 2
Un essai. (Mais là, AVEC le même manque de VBA que ma proposition précédente.)​


ℝOGER2327
#7977


Lundi 16 Tatane 142 (Transfiguration de Saint Vincent van Gogh, transmutateur - fête Suprême Quarte)
11 Thermidor An CCXXIII, 7,1760h - panis
2015-W31-3T17:13:20Z
 

Pièces jointes

Re : Autre choix que Dateserial

re
Mais là, AVEC le même manque de VBA que ma proposition précédente.
donc selon l'image ci-jointe est ce du VBA ?
Ne maitrisant pas assez , je ne veux aucune formule complexe dans Excel
Pour moi Excel est l'évolution du BASIC ou j'écrivais à la paluche 1000 lignes de programme pour suivre mon compte bancaire ou autre ... plus pro au boulot et encore plus long ( 1 mois de prog)
Maintenant c'est du VBA ( encore plus puissant) , chacun ses gouts et ses aises !!
J'ai bien remarqué tes fonctions VBA ( dedans , dans) , je ne sais pas m'en servir !! ....mais j'analyse pour ne pas rester Idiot !!
 

Pièces jointes

  • vba.jpg
    42.8 KB · Affichages: 26
  • vba.jpg
    42.8 KB · Affichages: 54
  • vba.jpg
    42.8 KB · Affichages: 48
Re : Autre choix que Dateserial

Re...


Et comme ça
ça vous va ?​

Rien n'est modifié dans le code.


ℝOGER2327
#7979


Mardi 17 Tatane 142 (Sainte Flamberge, voyante - fête Suprême Quarte)
12 Thermidor An CCXXIII, 0,2339h - salicot
2015-W31-4T00:33:41Z
 

Pièces jointes

  • Capture.jpg
    30.1 KB · Affichages: 31
  • Capture.jpg
    30.1 KB · Affichages: 28
  • Dans la période (2-1).xlsm
    Dans la période (2-1).xlsm
    19.3 KB · Affichages: 23
Re : Autre choix que Dateserial

Il faudrait que selon la période toute ligne concordant au choix se recopie dans la feuille 2

Bonjour,
Si ce n'est pas trop compliqué, peut être comme cela.

1) copiez le code suivant dans un module Standard
Code:
Sub Traitement()
Dim S As Worksheet
Dim Plage As Range
Dim i&
Dim R As Range
Dim A$
Dim T$()
Dim cpt&  'compteur

Set S = Sheets("Feuil1") 'à adapter
On Error Resume Next
Set Plage = Application.InputBox(prompt:="Sélectionner la plage cible", Type:=8)
If Err <> 0 Then Exit Sub

'--- Boucle de recherche ---
For i& = 1 To Plage.Cells.Count Step 2
  Set R = Application.Union(Plage(i&), Plage(i& + 1))
  A$ = FormatDate_mm_yyyy( _
            Les2Cellules_Debut:=S.Range("b2:c2"), _
            Les2Cellules_Fin:=S.Range("e2:f2"), _
            Les2Cellules_Cible:=R)
  If A$ <> "" Then
    cpt& = cpt& + 1
    ReDim Preserve T$(1 To 1, 1 To cpt&)
    T$(1, cpt&) = A$
  End If
Next i&

'--- Inscription dans la feuille de réception ---
If cpt& > 0 Then
  Set S = Sheets("Feuil2") 'à adapter
  '°°° Pour effacer l'existant de A2 à Ax °°°
  Set R = S.Range(S.Cells(2, 1), S.Cells(S.[a1].End(xlDown).Row, 1))
  R.ClearContents
  '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  Set R = S.Range("a2:a" & cpt& + 1 & "")
  R = Application.WorksheetFunction.Transpose(T)
  R.NumberFormat = "mm/yyyy"    'format
End If

End Sub

Private Function FormatDate_mm_yyyy(Les2Cellules_Debut As Range, Les2Cellules_Fin As Range, Les2Cellules_Cible) As String
Dim C As Range
Dim A$
Dim x As Date
Dim y As Date
Dim z As Date
'---
For Each C In Les2Cellules_Debut
  A$ = A$ & Space(1) & CStr(C)
Next C
x = FormatDateTime(A$, vbGeneralDate)
A$ = ""

For Each C In Les2Cellules_Fin
  A$ = A$ & Space(1) & CStr(C)
Next C
y = FormatDateTime(A$, vbGeneralDate)
A$ = ""

For Each C In Les2Cellules_Cible
  A$ = A$ & Space(1) & CStr(C)
Next C
z = FormatDateTime(A$, vbGeneralDate)
A$ = ""
'---
If z >= x And z <= y Then
  FormatDate_mm_yyyy = Format(CStr(z), "mm/yyyy")
End If
End Function

Au lancement de la "Sub Traitement", une InputBox demandera de renseigner la plage à traiter (A5:B28 dans l'exemple).
 

Pièces jointes

Re : Autre choix que Dateserial

Bonjour Merci à vous
Pour l'instant je garderai la propo. de Roger
si par la suite cela pose Pb je regarderai celle PMO
mais il y a des trucs un peu compliqué
comme
cpt& ; A$ ou encore cette partie :
Code:
Set S = Sheets("Feuil2") 'à adapter
  '°°° Pour effacer l'existant de A2 à Ax °°°
  Set R = S.Range(S.Cells(2, 1), S.Cells(S.[a1].End(xlDown).Row, 1))
  R.ClearContents
  '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  Set R = S.Range("a2:a" & cpt& + 1 & "")
  R = Application.WorksheetFunction.Transpose(T)
  R.NumberFormat = "mm/yyyy"    'format
les set R .. ?? j'arrive pas à analyser
 
Re : Autre choix que Dateserial

J'ai regardé le code de Roger bon je connais pas tout mais on peut deviner comme
bornes = f1.[J3:M3].Value cela doit être du genre sheets("A").range("j3:m3").value ?
par contre il y a qq années des Barba. m'avaient conseillé d'éviter d'utiliser :
Copy Destination:=f2.Cells(j, 1) mais plutôt d'assigner la valeur à la nouvelle cellule
c'est du détail !
 
Re : Autre choix que Dateserial

Ce sont des variables dont le type est déclaré par suffixe.
& correspond à As Long (Dim cpt As Long)
$ correspond à As String (Dim A As String)
# = Double
! = Single
% = Integer
etc

Une fois la variable déclarée (Dim cpt&), il n'est pas nécessaire de la suffixer dans le code, vous pouvez directement utiliser cpt (c'est ma manière de programmer de les suffixer dans le code car, quand je le relis, je sais immédiatement quel est le type de ma variable)

//////////////////////////////////////////////////
Set S = Sheets("Feuil2")
Set R = S.Range(S.Cells(2, 1), S.Cells(S.[a1].End(xlDown).Row, 1))

On définit la plage de la feuille ("Feuil2") allant de A2
S.Cells(2, 1) '2=ligne 2 , 1=colonne 1

à la dernière cellule renseignée de la colonne A à partir de la cellule A1
S.Cells(S.[a1].End(xlDown).Row, 1)

S.[a1].End(xlDown).Row correspond à l'action utilisateur suivante :
1) sélection de A1
2) appui sur la touche Ctrl (maintenu) ET la flêche vers le bas
Avec S.[a1].End(xlDown).Row on obtient la dernière ligne renseignée.

//////////////////////////////////////////////////
Set R = S.Range("a2:a" & cpt& + 1 & "")
On définit la plage de réception pour l'inscription du tableau T
A partir de A2 jusqu'à A et le nombre d'éléments du tableau T + 1 car il y a la ligne de titre qu'il ne faut pas écraser (Date format mm/yyyy)

/////////////////////////////////////////////////
R = Application.WorksheetFunction.Transpose(T)
On inscrit le tableau T dans la plage qui a été définie.
Le tableau T est à 2 dimensions. Comme VBA n'autorise le redimensionnement que de la dernière dimension, on est obligé de transposer le tableau T (ses colonnes deviennent les lignes dans Excel ET ses lignes deviennent les colonnes dans Excel).

OUF !
Est-ce plus compréhensible ?
 
Re : Autre choix que Dateserial

Merci bien PMO
Bon je suis loin d'être débutant donc vu comme ça, je connaissais pratiquement tout sauf que moi étant resté à mon BASIC des années 80, je détaille tout , c'est + simple ( mais plus long , bof !) car vous , vous compressez tout ; exemple le EndUp , down, row, col ..etc je l'écris d'abord via une variable : derlig=.Range("A1").End(xldown).Row etc ..
Je viens de fouiner et je viens de lire que & ! ..etc sont d'anciennes déclarations ??
j'ai vu dans la liste de () ( comme bornes()) je pensais que c'était du genre dim plage as range ?
encore merci pour les explications
 
Re : Autre choix que Dateserial

étant resté à mon BASIC des années 80, je détaille tout
A chacun sa façon de programmer, vous pouvez donc transformer le code à la vôtre pour vous y retrouver plus facilement.
L'essentiel est que, quelle que soit la manière, cela fonctionne.

Bonne journée et bonne programmation.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…