Récupération de données et boucle
riri78
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai un classeur excel prep_nouvelle_organisation qui contient deux pages, une importations et une aideprep
je souhaite faire une (ou plusieurs) macros, qui
1) récupère automatiquement les informations des cellules Ai, Ci, Di, Ii, Mi de la feuille importations vers la feuille aideprep dans les cellules B3, B4, B5, B6, B7.
Pour le moment, j'ai réussi à créer la macro suivante:
Je voudrais faire une boucle qui, quand je clique sur le bouton suivant efface les informations des cellules de la feuille importations et récupère celles de la ligne suivante de la feuille aideprep
2) je rajoute une contrainte: il faut que si/tant que Ai (feuille importation)= Ai+1 (feuille importation),
C3 (feuille aideprep) = Ai (feuille importation)
et C4 (feuille aideprep) = Ci+1 (feuille importation)
et C5 (feuille aideprep) = Di+1 (feuille importation)
et C6 (feuille aideprep) = Ii+1 (feuille importation)
et C7 (feuille aideprep) = Mi+1 (feuille importation)
Sinon,
on reprend la première macro
B3 (feuille aideprep) = Ai (feuille importation)
et B4 (feuille aideprep) = Ci (feuille importation)
et B5 (feuille aideprep) = Di (feuille importation)
et B6 (feuille aideprep) = Ii (feuille importation)
et B7 (feuille aideprep) = Mi (feuille importation)
Merci beaucoup de votre aide, ça fait plusieurs jours que je galère.
N'hésitez pas à me dire si vs n'avez pas assez d'infos!
j'ai un classeur excel prep_nouvelle_organisation qui contient deux pages, une importations et une aideprep
je souhaite faire une (ou plusieurs) macros, qui
1) récupère automatiquement les informations des cellules Ai, Ci, Di, Ii, Mi de la feuille importations vers la feuille aideprep dans les cellules B3, B4, B5, B6, B7.
Pour le moment, j'ai réussi à créer la macro suivante:
Sub Macro7() ' ' Macro7 Macro ' ActiveCell.FormulaR1C1 = "=importation!R[-1]C[-1]" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=importation!R[-2]C[1]" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=importation!R[-3]C[2]" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=importation!R[-4]C[7]" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=importation!R[-5]C[11]" ActiveCell.Offset(1, 0).Range("A1").Select End Sub
Je voudrais faire une boucle qui, quand je clique sur le bouton suivant efface les informations des cellules de la feuille importations et récupère celles de la ligne suivante de la feuille aideprep
2) je rajoute une contrainte: il faut que si/tant que Ai (feuille importation)= Ai+1 (feuille importation),
C3 (feuille aideprep) = Ai (feuille importation)
et C4 (feuille aideprep) = Ci+1 (feuille importation)
et C5 (feuille aideprep) = Di+1 (feuille importation)
et C6 (feuille aideprep) = Ii+1 (feuille importation)
et C7 (feuille aideprep) = Mi+1 (feuille importation)
Sinon,
on reprend la première macro
B3 (feuille aideprep) = Ai (feuille importation)
et B4 (feuille aideprep) = Ci (feuille importation)
et B5 (feuille aideprep) = Di (feuille importation)
et B6 (feuille aideprep) = Ii (feuille importation)
et B7 (feuille aideprep) = Mi (feuille importation)
Merci beaucoup de votre aide, ça fait plusieurs jours que je galère.
N'hésitez pas à me dire si vs n'avez pas assez d'infos!
A voir également:
- Récupération de données et boucle
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Logiciel de récupération de données - Guide
- Convertisseur récupération de texte - Guide
- Trier des données excel - Guide
3 réponses
ma variable i va de 1 à 1000 par exemple, ce sont les numéros des lignes remplies sur ma feuille importation.
et non je ne souhaite pas concaténer le contenu de plusieurs cellules dans une seule mais simplement mettre 5 cellules de la feuille importation dans 5 cellules de la feuille aideprep. Et ensuite, en appuyant sur un bouton suivant, mettre 5 autres cellules de la feuille importation (celles la ligne en dessous) dans les mêmes 5 cellules de la feuille aideprep (les autres sont donc effacées c'est pas un problème).
En fait, la feuille importation c'est mon stock de données et la feuille aideprep vient tirer 5 infos clés pour chaque ligne.
Donc Le bouton effectuera ces actions pour toutes les valeurs de i et je veux inscrire mes infos dans 5 cellule de la feuille aideprep et pas les stocker
et non je ne souhaite pas concaténer le contenu de plusieurs cellules dans une seule mais simplement mettre 5 cellules de la feuille importation dans 5 cellules de la feuille aideprep. Et ensuite, en appuyant sur un bouton suivant, mettre 5 autres cellules de la feuille importation (celles la ligne en dessous) dans les mêmes 5 cellules de la feuille aideprep (les autres sont donc effacées c'est pas un problème).
En fait, la feuille importation c'est mon stock de données et la feuille aideprep vient tirer 5 infos clés pour chaque ligne.
Donc Le bouton effectuera ces actions pour toutes les valeurs de i et je veux inscrire mes infos dans 5 cellule de la feuille aideprep et pas les stocker
Bonjour,
Un exemple, avec une variable de portée module Ligne As Long et un bouton sur la feuille aideprep :
Un exemple, avec une variable de portée module Ligne As Long et un bouton sur la feuille aideprep :
Dim Ligne As Long Private Sub CommandButton1_Click() Dim i As Integer Ligne = Ligne + 1 With Sheets("importations") If .Range("A" & Ligne) = "" Then Exit Sub Do While .Range("A" & Ligne + i) = .Range("A" & Ligne) i = i + 1 Loop i = i - 1 End With With Sheets("aideprep") .Range("B3") = Sheets("importations").Range("A" & Ligne) .Range("B4") = Sheets("importations").Range("C" & Ligne) .Range("B5") = Sheets("importations").Range("D" & Ligne) .Range("B6") = Sheets("importations").Range("I" & Ligne) .Range("B7") = Sheets("importations").Range("M" & Ligne) If i > 0 Then Ligne = Ligne + i .Range("C3") = Sheets("importations").Range("A" & Ligne) .Range("C4") = Sheets("importations").Range("C" & Ligne) .Range("C5") = Sheets("importations").Range("D" & Ligne) .Range("C6") = Sheets("importations").Range("I" & Ligne) .Range("C7") = Sheets("importations").Range("M" & Ligne) Else .Range("C3") = "" .Range("C4") = "" .Range("C5") = "" .Range("C6") = "" .Range("C7") = "" End If End With End Sub Sub RAZ() Ligne = 0 End Sub
Je te mets mes deux macro sur VBA
Sub Macro_tout_en_un()
'
' Macro_tout_en_un Macro
'
Dim Ligne As Long
Private Sub CommandButton1_Click()
Dim i As Integer
Ligne = Ligne + 1
With Sheets("importations")
If .Range("A" & Ligne) = "" Then Exit Sub
Do While .Range("A" & Ligne + i) = .Range("A" & Ligne)
i = i + 1
Loop
i = i - 1
End With
With Sheets("aideprep")
.Range("B3") = Sheets("importations").Range("A" & Ligne)
.Range("B4") = Sheets("importations").Range("C" & Ligne)
.Range("B5") = Sheets("importations").Range("D" & Ligne)
.Range("B6") = Sheets("importations").Range("I" & Ligne)
.Range("B7") = Sheets("importations").Range("M" & Ligne)
If i > 0 Then
Ligne = Ligne + i
.Range("C3") = Sheets("importations").Range("A" & Ligne)
.Range("C4") = Sheets("importations").Range("C" & Ligne)
.Range("C5") = Sheets("importations").Range("D" & Ligne)
.Range("C6") = Sheets("importations").Range("I" & Ligne)
.Range("C7") = Sheets("importations").Range("M" & Ligne)
Else
.Range("C3") = ""
.Range("C4") = ""
.Range("C5") = ""
.Range("C6") = ""
.Range("C7") = ""
End If
End With
End Sub
<code>
Sub RAZ()
Ligne = 0
End Sub
<code>
1- Ligne doit être déclarée Public en entête d'un module, en dehors et au dessus de toute Sub ou Function.
2- Tu as "encapsulé" ma macro Private Sub Bouton_Click dans ta propre Sub...
Donc, dans le module de ta feuille, tu dois avoir :
[sauf si tu rattaches ta macro directement à un bouton de commande de type formulaire, auquel cas tu n'auras pas à insérer ces codes]
Dans un module standard :
2- Tu as "encapsulé" ma macro Private Sub Bouton_Click dans ta propre Sub...
Donc, dans le module de ta feuille, tu dois avoir :
[sauf si tu rattaches ta macro directement à un bouton de commande de type formulaire, auquel cas tu n'auras pas à insérer ces codes]
Private Sub CommandButton1_Click() Macro_tout_en_un End Sub
Dans un module standard :
Option Explicit Public Ligne As Long Sub Macro_tout_en_un() ' ' Macro_tout_en_un Macro ' Dim i As Integer Ligne = Ligne + 1 With Sheets("importations") If .Range("A" & Ligne) = "" Then Exit Sub Do While .Range("A" & Ligne + i) = .Range("A" & Ligne) i = i + 1 Loop i = i - 1 End With With Sheets("aideprep") .Range("B3") = Sheets("importations").Range("A" & Ligne) .Range("B4") = Sheets("importations").Range("C" & Ligne) .Range("B5") = Sheets("importations").Range("D" & Ligne) .Range("B6") = Sheets("importations").Range("I" & Ligne) .Range("B7") = Sheets("importations").Range("M" & Ligne) If i > 0 Then Ligne = Ligne + i .Range("C3") = Sheets("importations").Range("A" & Ligne) .Range("C4") = Sheets("importations").Range("C" & Ligne) .Range("C5") = Sheets("importations").Range("D" & Ligne) .Range("C6") = Sheets("importations").Range("I" & Ligne) .Range("C7") = Sheets("importations").Range("M" & Ligne) Else .Range("C3") = "" .Range("C4") = "" .Range("C5") = "" .Range("C6") = "" .Range("C7") = "" End If End With End Sub
Salit Pijaku,
j'ai tester de nouveau la macro avec ta correction mais il me dit qu'il y a un pb à la ligne With Sheets("importations") surlignée en jaune.
J'ai mis ça dans VBA
j'ai tester de nouveau la macro avec ta correction mais il me dit qu'il y a un pb à la ligne With Sheets("importations") surlignée en jaune.
J'ai mis ça dans VBA
Private Sub CommandButton1_Click()
Macro_tout_en_un
End Sub
<code>
Sub Macro_tout_en_un()
'
' Macro_tout_en_un Macro
'
Dim i As Integer
Ligne = Ligne + 1
With Sheets("importations")
If .Range("A" & Ligne) = "" Then Exit Sub
Do While .Range("A" & Ligne + i) = .Range("A" & Ligne)
i = i + 1
Loop
i = i - 1
End With
With Sheets("aideprep")
.Range("B3") = Sheets("importations").Range("A" & Ligne)
.Range("B4") = Sheets("importations").Range("C" & Ligne)
.Range("B5") = Sheets("importations").Range("D" & Ligne)
.Range("B6") = Sheets("importations").Range("I" & Ligne)
.Range("B7") = Sheets("importations").Range("M" & Ligne)
If i > 0 Then
Ligne = Ligne + i
.Range("C3") = Sheets("importations").Range("A" & Ligne)
.Range("C4") = Sheets("importations").Range("C" & Ligne)
.Range("C5") = Sheets("importations").Range("D" & Ligne)
.Range("C6") = Sheets("importations").Range("I" & Ligne)
.Range("C7") = Sheets("importations").Range("M" & Ligne)
Else
.Range("C3") = ""
.Range("C4") = ""
.Range("C5") = ""
.Range("C6") = ""
.Range("C7") = ""
End If
End With
End Sub
<code>
Le message d'erreur l'indice n'appartient pas à la sélection signifie, entres autres, qu'un "objet" référencé dans ton code n'existe pas.
Comment, dans ton fichier Excel, est nommée la feuille "importations"?
"importation" ?
"Importation" ?
"importations" ?
"Importations" ?
"importation " ?
etc...
Place le bon nom de ta feuille dans le code donné précédemment, fais la même chose avec l'autre feuille et reviens...
Comment, dans ton fichier Excel, est nommée la feuille "importations"?
"importation" ?
"Importation" ?
"importations" ?
"Importations" ?
"importation " ?
etc...
Place le bon nom de ta feuille dans le code donné précédemment, fais la même chose avec l'autre feuille et reviens...