Récupérer valeurs comprises entre... et...

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 !

Polobe36

XLDnaute Occasionnel
Bonjour à tous, le forum,
Je dois construire des fichiers .csv à convertir en .xml ensuite à importer dans une base de données.
Le problème est qu'il n'y a pas d'identifiant unique dans le fichiers .csv et donc lorsque je fais une mise à jour dans ma base de données, les opérations sont ajoutées à l'existant et non remplacées.
Je souhaiterai afficher dans une feuille toutes les valeurs comprises et incluses entre deux code de gammes.

ici pour l'exemple >=GA_MA_00079 et <=GA_MA_00094

PS: la structure de la feuille2 ne doit pas être modifiée
 

Pièces jointes

Re : Récupérer valeurs comprises entre... et...

Bonjour,

Pas sûr d'avoir tout compris!

Le code ci dessous répond à:
Je souhaiterai afficher dans une feuille toutes les valeurs comprises et incluses entre deux code de gammes.
Code:
Sub MacroCopy()
Dim Derl As Integer, Deb As String, Fin As String

While Deb = ""
    Deb = InputBox("entrez le code min")
Wend
While Fin = ""
    Fin = InputBox("entrez le code max")
Wend

Derl = Worksheets("PWOProcess").Range("B" & Rows.Count).End(xlUp).Row
Worksheets("PWOProcess").Range("A2:AD" & Derl).AutoFilter Field:=2, Criteria1:=">=" & Deb, Operator:=xlAnd, Criteria2:="<=" & Fin

Worksheets("PWOProcess").Range("A2:AD" & Derl).SpecialCells(xlCellTypeVisible).Copy
Worksheets("Feuil3").Range("A1").PasteSpecial Paste:=xlPasteValues
Worksheets("Feuil3").Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
Worksheets("Feuil3").Range("A1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False

Worksheets("PWOProcess").ShowAllData

End Sub

Les données sont copiées en feuille 3 qui doit exister

A+
 
Re : Récupérer valeurs comprises entre... et...

Bonjour Paf, le forum,

Merci de ta réponse, c'est ce dont j'avais besoin. J'ai juste modifié la "destination" de la copie en commençant à la ligne a2, parce que dans chaque cas j'ai besoin de récupérer la première ligne de la table de départ.
J'aurai une autre demande, comment pourrais-t'on maintenant effacer le contenu de la feuil3 tout en conservant la première ligne (à moins qu'à chaque copie l'on puisse importer la ligne d'en-tête+la sélection entre deux valeurs)?
Merci de votre aide.
 
Re : Récupérer valeurs comprises entre... et...

re,

le code modifié ( effaçage feuille 3, puis copie des données avec ligne d'en-têtes) avec quelques commentaires
Code:
Sub MacroCopy()
Dim Derl As Integer, Deb As String, Fin As String

While Deb = ""
    Deb = InputBox("entrez le code min")
Wend
While Fin = ""
    Fin = InputBox("entrez le code max")
Wend

'**** suppression des données feuille 3
Worksheets("Feuil3").Range("A1").CurrentRegion.ClearContents

'** détermination de la dernière ligne remplie feuille PWOProcess
Derl = Worksheets("PWOProcess").Range("B" & Rows.Count).End(xlUp).Row

'** Tri de la feuille PWOProcess selon les 2critères saisis
Worksheets("PWOProcess").Range("A2:AD" & Derl).AutoFilter Field:=2, Criteria1:=">=" & Deb, Operator:=xlAnd, Criteria2:="<=" & Fin

'** Copie de la ligne d'en-têtes dans la feuille 3
Worksheets("PWOProcess").Range("A1:AD1").Copy Worksheets("Feuil3").Range("A1")

'** Copie des lignes sélectionnées
Worksheets("PWOProcess").Range("A2:AD" & Derl).SpecialCells(xlCellTypeVisible).Copy

'** collage des données dans la feuille 3 en 3 passes pour les valeurs(et non les formules),
'** la largeur de colonnes et les formats de cellules
Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteValues
Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteColumnWidths
Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteFormats

Application.CutCopyMode = False ' empêche le cadre de sélection

'** affichage total de la feuille PWOProcess
Worksheets("PWOProcess").ShowAllData

End Sub

Bonne suite
 
Re : Récupérer valeurs comprises entre... et...

Si une nouvelle "extraction" est plus courte que la précédente, il restera des cellules avec mises en forme donc, correction du code pour la partie effaçage Feuil3 qui n'efface plus les cellules mais supprime les lignes:


au lieu de
'**** suppression des données feuille 3
Worksheets("Feuil3").Range("A1").CurrentRegion.ClearContents

mettre
Code:
'**** suppression des données feuille 3
Derl = Worksheets("Feuil3").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("Feuil3").Rows("1:" & Derl).Delete Shift:=xlUp

A+
 
Re : Récupérer valeurs comprises entre... et...

Bonjour Paf, le forum,

Merci beaucoup çà fonctionne très bien. J'avais juste peur que çà bug au niveau de la recopie du n° de ligne lors la "conversion" du fichier .csv en .xml, mais à priori pas de souci.

Juste pour savoir, si je voulais lors de la recopie, ne sélectionner que quelques colonnes A,B,C,D et G par exemple. Comment faudrait-il structurer le code?
 
Re : Récupérer valeurs comprises entre... et...

Re,

Dans la copie, Le N° de ligne, le Numéro d'ordre de l'opération et le Thème d'opération ne sont plus déterminés par une formule. C'est leur valeur qui a été copié (d'où l'usage du .PasteSpecial Paste:=xlPasteValues)

pour ne copier qu'une partie des colonnes sélectionnées, il faut définir la plage souhaitée .

Pour les en-têtes
Code:
'** Copie de la ligne d'en-têtes dans la feuille 3
Worksheets("PWOProcess").Range("A1:D1,G1").Copy Worksheets("Feuil3").Range("A1")

pour les données
Code:
'** Copie des lignes sélectionnées
Plage = "A2:D" & Derl & ",G2:G" & Derl
Worksheets("PWOProcess").Range(Plage).SpecialCells(xlCellTypeVisible).Copy

'** collage des données dans la feuille 3 en 3 passes pour les valeurs(et non les formules),
'** la largeur de colonnes et les formats de cellules

Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteFormats
Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteColumnWidths
Worksheets("Feuil3").Range("A2").PasteSpecial Paste:=xlPasteValues

NB: l'ordre des .PasteSpecial Paste:= est modifié par rapport à la proposition précédente car, curieusement dans cette version, la copie des mises en formes "écrasait" les données.

Bonne suite
 
Re : Récupérer valeurs comprises entre... et...

Bonjour Paf, le forum,

Merci une nouvelle fois pour ton aide.
1-comment peut-on annulé la macro une fois lancé cliquer sur annulé ou echap n'a aucune incidence)?
2-est-il possible d'avoir une liste de choix des codes disponibles (plutôt que les renseigner manuellement)?
 
Re : Récupérer valeurs comprises entre... et...

Re bonjour,

1-comment peut-on annulé la macro une fois lancé

la seule façon d'arrêter une macro en cours, que je connaisse, est d'appuyer sur les touches clavier : <Ctrl> +<Arrêt défil>

2-est-il possible d'avoir une liste de choix des codes disponibles

ci joint un classeur avec Userform proposant le choix des codes par combobox

Bonne suite
 

Pièces jointes

Re : Récupérer valeurs comprises entre... et...

Re,

adapter le "modèle" suivant pour modifier ou ajouter des éléments dans la plage de données
Plage = "A2: D10,G2:G10,K2:M10"
: sépare le coin supérieur gauche de la plage(A2) du coin inférieur droit (D10) pour chaque plage
, sépare les différentes plages

s'il faut sélectionner jusqu'en bas du tableau, utiliser la variable Derl (dans laquelle on a mis la dernière ligne du tableau)
ainsi "A2: D10,G2:G10,K2:M10" devient "A2: D" & Derl & ",G2:G" & Derl & ",K2:M" & Derl
 
Dernière édition:
Re : Récupérer valeurs comprises entre... et...

Bonjour Paf,

Euh, je n'ai pas bien compris la dernière réponse, ou plutôt je crois que je me suis mal exprimé:
Dans la boite de dialogue qui s'ouvre en lançant la macro, je souhaiterai pouvoir choisir deux (ou trois serait l'idéal) plages de codes qui se suivent. (par exemple de GA_MA_00001 à GA_MA_00010 puis de GA_MA_00030 à GA_MA_00035).
 
Re : Récupérer valeurs comprises entre... et...

Le classeur en PJ avec trois plages de codes à saisir.

On peut saisir une, deux ou trois plages.

Pour bien faire, il faudrait rajouter des contrôle sur les plages de saisie, ( actuellement en deuxième ou troisième plage on peut saisir des codes faisant partie d'une plage précédente => plantage) ou ne proposer que des codes non utilisés dans une plage précédente.

Mais ce sera pour une autre fois

A+
 

Pièces jointes

Re : Récupérer valeurs comprises entre... et...

Bonjour Paf,

Je suis désolé, je suis passé totalement au travers de ta dernière réponse, je viens seulement de la découvrir. Merci en tout cas pour le travail effectué, cela va déjà grandement m'aider et me faire gagner du temps. Effectivement, il faudrait pour bien faire contrôler les saisies, mais bon c'est déjà très bien.

Par contre, j'ai donc mis en application le précédent modèle que tu avais fourni, et importer mes fichiers, avec succès!

Maintenant, devant le nombre important de fichiers différents, je me suis dit que l'idéal serait d'avoir toutes mes tables d'import dans un fichier, dans lequel se trouverait un onglet qui servirait à générer ce fichier d'import.
Pourquoi? pour éviter de dupliquer et adapter la macro de recopie à tous les onglets du/des fichier(s) d'import
Contrainte: il faut que la macro soit "standard" et adaptable à toutes données, à tout contenu
Problématique: dans ce cas là, il faut renoncer au fait de ne recopier que certaines colonnes et copier donc l'intégralité des données. (=> ce n'est pas un problème pour moi)

Alors voilà, est-ce possible de réaliser quelque chose?
en critères de choix, il faudrait la/les plage(s) de code = toujours égale à la colonne B de chaque fichier
mais aussi une liste déroulante des onglets du fichier,
et donc recopier toujours la première ligne et la/les plage(s) de code et données correspondantes.

Je sais pas si je suis très clair... si besoin je peux fournir un exemple de "résultat attendu"

Merci d'avance de ta réponse.

Bonne journée
 
- 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

N
Réponses
30
Affichages
2 K
Nicolasz
N
A
Réponses
11
Affichages
2 K
A
Réponses
5
Affichages
2 K
Retour