Alimenter une colonne en fonction d'une date recherché

OK, je vais préparer ça mais quand je dis "mon classeur de macro personnel", tu ne vois pas de quoi je parle ??

Pour inclure certaine de mes macro directement dans la barre d'outils !? 🤔

OK, je vais préparer ça

Cool

mais quand je dis "mon classeur de macro personnel", tu ne vois pas de quoi je parle ??

Pour moi les macro sa se lance via un bouton, raccourci clavier, automatiquement ou manuellement dans l'onglet Développeur !

Je sais pas si c'est possible de le rajouter directement sur la barre d'outil !

je me suis installer ça depuis pas mal de temps et c'est bien pratique.

Quand tu te sert de l'enregistreur de macro, tu as le choix entre l'enregistrer dans le classeur actuel ou dans ton classeur personnel... Ce classeur personnel si il existe pas il sera créée automatiquement puis il suffit de le masquer pour éviter qu'il te dérange à chaque fois que tu ouvre Excel...

Petite parenthèse...

Hello, me voilà de retour. j'ai pas mal réfléchis à une façon plus simple de réaliser ce que je souhaite faire.

le soucis est que j'avais des données à récupérer dans plusieurs cellule, et pas forcément les unes sous les autres.

J'ai fais pas mal de modif pour justement faire en sorte que les solutions que vous m'avez apportés puisse être utilisée.

Sauf que, j'aimerai savoir comment puis je faire pour alimenter des tableaux provenant d'autres classeurs.

Les macro que vous m'avez proposé repose sur le fait que les deux tableau se trouvent sur la même page et le même classeur...

j'ai ajouter la selection d'un autre classeur mais ça ne fonctionne pas...

Pour l' essai j'ai simplifier et configurer les fichiers (voir pièces jointes).

"classeurdonnées" doit alimenter tableau1, tableau2, tableau3 selon la date (pour la date, j'ajouterai la variable après donc prenez une date fixe pour l'essai)

Merci à ceux qui pourrons m'aider.

3tableau1.xlsx (20.19 Ko)
3tableau2.xlsm (30.87 Ko)
3tableau3.xlsm (26.79 Ko)

re à tous

tu vois, VBA est galère à créer, et pire lorsqu'il faut le modifier

revois tes fichiers

  • lesquels sont en saisie
  • lesquels sont en importation depuis une source
  • lesquels vont lire ceux ci-dessus, et faire les calculs, les TCD, les graphiques

faire ultra-simple

les fichiers de lecture auront des = vers les autres (de simples liaisons), ou bien du Power Query pour lire.

https://www.youtube.com/watch?v=gwW2CDdvUUs

(gratuit, fait maintenant partie intégrante des versions > 2013 d'Excel)

bon travail

Re JdViRus, Salut jmd !

Sauf que, j'aimerai savoir comment puis je faire pour alimenter des tableaux provenant d'autres classeurs.

Tu peux utiliser le code ci-dessous en l'adaptant à ton cas pour copier / coller des données d'un classeur à un autre :

Sub OpenFiles()
Dim Files As String, Way As String
Application.DisplayAlerts = False
Way = "N:\Monchemin\xxx.xls" 'Le chemin vers mon fichier source avec son nom (.xls)
Files = "xxx.xls" 'Le nom de mon fichier source (.xls)
Workbooks.Open Filename:="" & Way & "" 'On ouvre se fichier
Range("A1:A10").Copy 'On copie ce que l'on veux
Workbooks("ici le nom de mon fichier source qui reçoit les sources.xlsm").Activate 'On retourne vers le fichier qui reçoit les sources
Cells(1, 1).Select 'On colle où on veux
ActiveSheet.Paste
'On répète l'opération plusieurs fois si besoin
'Workbooks(Files).Activate pour retourner vers ton fichier source
'A la fin :
Workbooks(Files).Close savechanges:=False 'On ferme le fichier source sans le sauvegarder
Workbooks("ici le nom de mon fichier source qui reçoit les sources.xlsm").Activate
Application.DisplayAlerts = True
End Sub

Restant à dispo !

Oupss je pensai les avoir ajouté .

les voici.

6tableau1.xlsx (20.19 Ko)
4tableau2.xlsm (30.87 Ko)
4tableau3.xlsm (26.79 Ko)
Sub OpenFiles()
Dim Files As String, Way As String
Application.DisplayAlerts = False
Way = "N:\Monchemin\xxx.xls" 'Le chemin vers mon fichier source avec son nom (.xls)
Files = "xxx.xls" 'Le nom de mon fichier source (.xls)
Workbooks.Open Filename:="" & Way & "" 'On ouvre se fichier
Range("A1:A10").Copy 'On copie ce que l'on veux
Workbooks("ici le nom de mon fichier source qui reçoit les sources.xlsm").Activate 'On retourne vers le fichier qui reçoit les sources

Il n'y a pas une coquille ici ?

way : chemin du fichier source

files : nom du fichier source

on ouvre le fichier source

on copie

et là je comprend pas "ici le nom de mon fichier source qui reçoit les sources" Vu que tu as ajouter activate ça veux dire qu'il a déjà été ouvert ? Ou alors il faut mettre open non ?

@JdViRuS

Remarque très juste :0

C'est vrai que pour ton cas tu n'a pas deux fichiers qui communique entre eux mais trois !

Donc le .Activate sert, en effet, si tu veux retourner sur le fichier qui est déjà ouvert.

Te concernant, le fichier qui est déjà ouvert est un simple fichier qui est juste la pour lancer la macro sans pour autant envoyer/recevoir des données à d'autre classeurs.

Donc tu dois ouvrir tes fichiers qui t’intéresse via le Workbooks.Open Filename:="" & Way & "" et ensuite tu peux passer d'un fichier à l'autre via le .Activate

Désolé pour cette "coquille " xD

OK, pas grave .

Je vais essayer de pondre un truc en cumulant les deux macro et je reviens vous donner des news .

Merci encore !

La solution finale est proche mais c'est pas encore ça.

Ici je pense que c'est la recherche de la bonne colonne qui ne fonctionne pas.

J'ai peut être pas tout compris .

Il y a plus besoin de calculer le nombre de ligne que ce soit dans un tableau ou un autre, juste chercher la bonne colonne en fonction de la date.

Et concernant le premier classeur (tableau1) a alimenter, les dates se situe entre (AP3:BO3).

Voilà où j'en suis :

Sub OpenFiles()
Dim Files As String, Way As String

Dim x As Long, y As Long, z As Long         'On prend ces 2 var pour les lignes
Dim i As Long, j As Long                    'On prend ces 2 var pour les colonnes
Dim DateCible As String                     'Prend la valeur de ta "date essai"

Application.DisplayAlerts = False
Way = "C:\Users\jst3358\Desktop\classeurdonnées.xls" 'Le chemin vers mon fichier source
Files = "classeurdonnées.xls" 'Le nom de mon fichier source (.xls)

DateCible = "17-10-2018"
Workbooks.Open Filename:="" & Way & "" 'On ouvre se fichier
Range("b91:b118").Copy 'On copie ce que l'on veux

Workbooks.Open Filename:="C:\Users\jst3358\Desktop\tableau1.xlsx" 'On va vers le fichier qui reçoit les sources (tableau1)"

i = Range("ap3:bo3").Column
For j = 2 To i                              'Via cette boucle, on cherche la bonne colonne
    If Cells(1, j) = DateCible Then
        Exit For                            'On a trouver notre bonne colonne et son numéro est maintenu dans j
    End If
Next
        Cells(j, 2).Select
        ActiveSheet.Paste

Workbooks(Files).Close savechanges:=False 'On ferme le fichier source sans le sauvegarder
Workbooks("tableau1.xlsx").Activate
Application.DisplayAlerts = True
End Sub

Quelqu'un peux t'il me dire où j'ai fais une erreur ?

Salut Jd !

T'a bien avancé en effet :0 Bien joué !

Il y a une erreur ici :

i = Range("ap3:bo3").Column

Que tu dois remplacé par :

i = Range("AP3:AP6500").End(xlToRight).Column 

Sauf si ton nombre de colonne est fixe, en ce cas tu fera juste un i = 30 par exemple.

Ensuite :

DateCible = "17-10-2018"

Est-ce que c'est bien le bon format de ta date :0 ?

Et pas plutôt 17/10/2018 ?

Je te laisse tester et tu reviens vers nous

Hello, merci pour ton retour.

J'ai toujours le même soucis malgré les changements effectués.

J'ai modifier le format de la date cible, et modifier la selection pour la recherche de la bonne colonne.

 Sub OpenFiles()
Dim Files As String, Way As String

Dim x As Long, y As Long, z As Long         'On prend ces 2 var pour les lignes
Dim i As Long, j As Long                    'On prend ces 2 var pour les colonnes
Dim DateCible As String                     'Prend la valeur de ta "date essai"

Application.DisplayAlerts = False
Way = "C:\Users\jst3358\Desktop\classeurdonnées.xls" 'Le chemin vers mon fichier source
Files = "classeurdonnées.xls" 'Le nom de mon fichier source (.xls)

DateCible = "17/10/2018"
Workbooks.Open Filename:="" & Way & "" 'On ouvre se fichier
Range("b91:b118").Copy 'On copie ce que l'on veux

Workbooks.Open Filename:="C:\Users\jst3358\Desktop\tableau1.xlsx" 'On va vers le fichier qui reçoit les sources (tableau1)"

i = Range("AP3:AP6500").End(xlToRight).Column
For j = 42 To i                              'Via cette boucle, on cherche la bonne colonne
    If Cells(1, j) = DateCible Then
        Exit For                            'On a trouver notre bonne colonne et son numéro est maintenu dans j
    End If
Next
        Cells(2, j).Select
        ActiveSheet.Paste

Workbooks(Files).Close savechanges:=False 'On ferme le fichier source sans le sauvegarder
Workbooks("tableau1.xlsx").Activate
Application.DisplayAlerts = True
End Sub

Une fois la macro activé, les données sont collée dans la colonne BP à partir de la ligne 2 alors que la sélection via le .end(xlToRight).column doit trouver la colonne BO en dernière colonne , et j'ai bien spécifier à partir de la ligne 3 ...

Si j'ai bien compris ton problème : Tu souhaite coller tes données en colonne BO au lieu de la colonne BP, mais ta variable i te renvoie à cette dernière ?

J'ai pourtant tester ton code, et sa me semble correct :/ :

Avec le code :

Sub test()
Dim i As Long
Dim x As String
i = Range("AP3:AP6500").End(xlToRight).Column
x = Split(Columns(i).Address(ColumnAbsolute:=False), ":")(1)
MsgBox "La variable i renvoie le numéro de colonne " & i & " correspondant à " & x
End Sub

Résultat obtenue :

capture

Il me faudrait une copie de ton fichier actuelle (avec tes nouvelles modification)

Restant à ta dispo !

Je ne comprend pas pourquoi chez moi ça ne me donne pas le bon résultat...

5tableau1.xlsx (20.50 Ko)

la dernière collonne (la dernière date) n'est pas en BP pourtant !

capture

J'ai tester et moi aussi j'ai la même chose ... Il doit y avoir autre chose ..

AAAAAH x)

C'est bon je viens de comprendre ton problème maintenant que j'ai le fichier sous les yeux sa m'est revenue.

Tu essaye de reproduire ce qu'on a fais au début de ce topic avec un nouveau fichier !

Du coup je regarde pour te mettre à jour la Boucle qui te trouve la colonne.

Par contre :

les données sont collée dans la colonne BP à partir de la ligne 2 alors que la sélection via le .end(xlToRight).column doit trouver la colonne BO en dernière colonne , et j'ai bien spécifier à partir de la ligne 3 ...

Non, non, tu a indiqué la ligne 2 :p

Cells(2, j).Select
ActiveSheet.Paste

Tu dit :

Sélectionne ma cellule en ligne 2 et colonne J

Colle sur cette cellule

Donc c'est plutôt :

Cells(4, j).Select
ActiveSheet.Paste

Que tu veux ^^

Et concernant l'erreur de la sélection de la mauvaise colonne, regarde la cellule que tu demande de vérifier dans ta boucle

i = Range("AP3:AP6500").End(xlToRight).Column
For j = 42 To i                            
    If Cells(1, j) = DateCible Then
        Exit For                           
    End If
Next

Tu demande à vérifier les dates de ta première ligne alors que dans se nouveau fichier, tes dates sont en ligne 3 !

Donc il faut modifié ta boucle comme cela :

i = Range("AP3:AP6500").End(xlToRight).Column
For j = 42 To i                            
    If Cells(3, j) = DateCible Then
        Exit For                           
    End If
Next

Restant à ta dispo !

Oui, entre temps je me suis rendu compte de l'erreur pour la ligne.

Donc la ligne c'est ok, reste à trouver la bonne colonne

Rechercher des sujets similaires à "alimenter colonne fonction date recherche"