Macro sous excel 2003 pour ranger les donnees
Fermé
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
-
2 juil. 2010 à 14:30
ks13 Messages postés 191 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 1 août 2011 - 5 août 2010 à 21:07
ks13 Messages postés 191 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 1 août 2011 - 5 août 2010 à 21:07
A voir également:
- Macro sous excel 2003 pour ranger les donnees
- Liste déroulante excel - Guide
- Formule excel - Guide
- Supprimer les doublons excel - Guide
- Déplacer une colonne excel - Guide
- Convertir chiffre en lettre excel sans macro ✓ - Forum Excel
35 réponses
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
12 juil. 2010 à 14:44
12 juil. 2010 à 14:44
Salut, j'ai besoin d'une explication sur comment pointer vers differentes feuilles d'un classeur dans une macro. Je voudrais faire une macro qui selectionne des donees de la feuille 1 et les copie dans la feuille 2 en fonction des donnees de la feuille 3.
Concretement, la macro doit prendre une liste de factures, de la feuille 1, comparer les numeros de facture avec celle de la feuille 3 et copier celles qui repondent aux criteres dans la feuille 2. Je sais comment comparer les donees, et les copier, mais je ne sais pas comment pointer les differentes feuilles. J'ai recherche dans l'aide mais ce n'est pas explique tres clairement. Quelqu'un aurait une explication plus claire a me donner?
Concretement, la macro doit prendre une liste de factures, de la feuille 1, comparer les numeros de facture avec celle de la feuille 3 et copier celles qui repondent aux criteres dans la feuille 2. Je sais comment comparer les donees, et les copier, mais je ne sais pas comment pointer les differentes feuilles. J'ai recherche dans l'aide mais ce n'est pas explique tres clairement. Quelqu'un aurait une explication plus claire a me donner?
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
12 juil. 2010 à 18:03
12 juil. 2010 à 18:03
Re,
Tu ne donne aucun détail, un exemple faisant appel à trois feuilles
A+
Tu ne donne aucun détail, un exemple faisant appel à trois feuilles
Sub BF()
Dim Lig As Long
'Va de la ligne 4 à la dernière ligne de la feuille 1, colonne A
With Sheets("Feuil1")
For Lig = 4 To .Range("A65535").End(xlUp).Row
If .Cells(Lig, "A") = Sheets("Feuil1").Cells(Lig, "C") Then
Sheets("Feuil3").Cells(Lig, "B") = Sheets("Feuil1").Cells(Lig, "C")
End If
Next Lig
End Sub
A+
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
12 juil. 2010 à 18:49
12 juil. 2010 à 18:49
Re, comme toujours, merci de ton aide lermite. Une question m'est venue a l'esprit apres avoir lu le code : est-ce qu'il y a un moyen de donner a la macro une reference de plage relative, c'est à dire, lui dire de lire depuis la 1ere cellule contenant une valeur, jusqu'a la derniere cellule contenant une valeur. Par xemple, on a un tableau de C2 a F10, mais dependant des jours, la taille du tableau pourrais changer, donc le jour suivant le tableau pourrais etre de B3 a D5. Je cherche une methode de selection grace a laquelle l'utilisateur ne sera plus oblige de commencer a entrer les donnees a A1, mais ou il veut.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
13 juil. 2010 à 15:21
13 juil. 2010 à 15:21
Il n'y a aucun problème pour donner à l'utilisateur la possibilité de sélectionner une plage, voir...
Est-ce que la plage est dépendante de date ou de jour ? Si oui, vaudrait mieux faire une table des plages en fonction des jours, c'est qu'une piste vu que je n'ai pas plus de renseignement.
A+
Application.InputBox 'Voir ton aide
Est-ce que la plage est dépendante de date ou de jour ? Si oui, vaudrait mieux faire une table des plages en fonction des jours, c'est qu'une piste vu que je n'ai pas plus de renseignement.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
13 juil. 2010 à 19:01
13 juil. 2010 à 19:01
Ah, je crois que je me suis mal exprime, je ne pensais pas a demander la plage a l'utilisateur, mais faire en sorte que la macro la selectionne toute seule, en fonction des champs contenant des valeurs. Un peu comme avec
For Lig = 4 To .Range("A65535").End(xlUp).Row sauf qu'il ne selectionnera qu'un carre dont le coin gauche superieur sera la 1ere celule la plus proche de A1 et le coin inferieur droit la celule la plus eloignee de A1 (diagonalement bien sur)
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
14 juil. 2010 à 15:52
14 juil. 2010 à 15:52
Tes explications sont, heuuu...
Tu veux connaître la première cellules non vide et la dernière de la feuille ?
Tu veux connaître la première cellules non vide et la dernière de la feuille ?
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
Modifié par ks13 le 14/07/2010 à 17:24
Modifié par ks13 le 14/07/2010 à 17:24
^^; Alors, la macro que je voudrais faire, elle doit verifier les references donnees, les comparer avec celles de la Feuil3 et copier celles qui correspondent dans la Feuil2 comme je l'ai ddeja explique. Le probleme c'est que les donnees de la 1ere page ne commencent pas obligatoirement a la Colonne A ligne 1, car c'est en general un copier coller d'un programme de gestion sur un site internet. Donc souvent les 2-3 premieres colonnnes, contiennet des cases a cocher, qu'on vire avec le collage special, ce qui laisse ces colonnes vides. Je sais c'est facile de supprimmer ces colonnes manuellement, mais je souhaite les laisser pour eviter les decalage entre les vielles donnees et les nouvelles. Donc, le but de la macro c'est qu'lle voit par elle meme ou commencent les donnees et ou elle se terminent, pour faire l'operation que sur ces cellules. Le but de cette automatisation etant d'eviter de demander a l'utilisateur de selectionner des plages enormes de donnees a chaque utilisation de la macro.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
14 juil. 2010 à 23:38
14 juil. 2010 à 23:38
^^:D Tout ça pour répondre Oui !! :D
Dim A, C, L
Dim Plage As Range
Set Plage = UsedRange 'la plage qui contient des données
A = UsedRange.Address 'L'adresse de la plage
C = UsedRange.Column 'La première colonne
L = UsedRange.Row 'La première ligne
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
15 juil. 2010 à 11:03
15 juil. 2010 à 11:03
Super, merci encore lermite. Malheureusement aujourd'hui je dois verifier les catalogues des produits et je n'aurais pas le temps d'assembler la macro, mais je le ferais des que je pourrais et je posterais les resultats ici.
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
20 juil. 2010 à 16:16
20 juil. 2010 à 16:16
Re, je crois avoir trouvé une conspiration virtuelle dirigée contre moi. Plus ca avance et moins ca va : j'ai cree un systeme de referencement pour les catalogues de facon a ce qu'il y ait 2 listes de references a comparer pour verifier l'etat des produits, mais le probleme c'est que l'une des listes est en format texte (ce stupide programme de gestion a l'ancienne qui exporte tous les details en format texte, meme si ce sont des references produit). Donc, je voudrais savoir y a t il un moyen de reconvertir ces references en format texte, en numeros (il n'y a que des chiffres dans les references)? Ou sinon, y a t'il un autre moyen de comparer les 2 listes? Jusque la j'utilisais la formule suivante :
=SI(EQUIV(A:A;D:D;0)=LIGNE(); "Manquant"; "Ok")
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
5 août 2010 à 14:49
5 août 2010 à 14:49
Re, c'est encore moi, désolé de pas avoir poste ici depuis un moment, sans changer le post en "résolu" mais je pensais revenir. Le contre était un petit retard sur les travaux dans l'entreprise (que j'ai rattrapé) et un petit déclin de santé (rien de bien méchant). En bref, je n'ai aps encore fini ici.
Donc, j'ai commence une autre macro en utilisant pas mal de choses qui ont été postées ici, mais avant tout j'ai un problème au niveau du pointeur dans la plage :
En utilisant
Comment pourrais-je savoir ou est le pointeur si je voudrais comparer, par exemple, la valeur de la cellule actuelle avec la valeur de la cellule qui est juste a sa droite, ou une cellule, de même adresse, sur une autre feuille?
Pour l'explication, j'essaye de faire une macro qui va vérifier les références dans les plages de différentes feuilles (d'où ma question sur les feuilles plus haut) et afficher certaines statistiques en fonction des résultats. Pour cela j'ai crée une nouvelle feuille qui contient, par colonne, différentes données. La lise qui suit est juste un exemple :
Colonne 1 : Liste des références a chercher,
Colonne 2 : Type de recherche (pour le moment cette partie ne sera pas implémentée)
Colonne 4 : Liste des Onglets (c'est une liste des feuilles disponibles pour la recherche)
Colonne 7 : Present Base de donnes
Colonne 8 : Present Site
Colonne 9 : Present Catalogue
Colonne 10 : Page Catalogue
Pour le moment la macro en fera que donner la valeur de la cellule trouvée (pour vérification manuelle des résultats), ensuite ou la référence a été trouvée.
Le but est d'avoir les résultats dans la même ligne que la référence de la colonne 1. Mais les références des autres feuilles ne sont pas obligatoirement sur la même ligne, d'où mon intérêt de savoir ou se trouve le pointeur. Ou alors y a t il un moyen d'utiliser les plages comme un ensemble sans avoir besoin de vérifier la position du pointeur a chaque fois? En se basant sur
de ton post plus haut mais en utilisant un double For
Je ne crois pas que ce bout de code marcherais, mais j'essaye d'expliquer ce que je cherche a faire ^^
En résumé, j'essaye d'afficher la valeur d'une cellule de la colonne 2 ou même 3 d'une des feuilles disponibles sur la feuille de recherche, qui est a la même ligne que la référence correspondant a la référence recherchée actuelle.
Arf, tout ce texte pour cela....j'espère ne pas trop vous ennuyer avec mes problemes.
Donc, j'ai commence une autre macro en utilisant pas mal de choses qui ont été postées ici, mais avant tout j'ai un problème au niveau du pointeur dans la plage :
En utilisant
For Each Cell In Range
Comment pourrais-je savoir ou est le pointeur si je voudrais comparer, par exemple, la valeur de la cellule actuelle avec la valeur de la cellule qui est juste a sa droite, ou une cellule, de même adresse, sur une autre feuille?
Pour l'explication, j'essaye de faire une macro qui va vérifier les références dans les plages de différentes feuilles (d'où ma question sur les feuilles plus haut) et afficher certaines statistiques en fonction des résultats. Pour cela j'ai crée une nouvelle feuille qui contient, par colonne, différentes données. La lise qui suit est juste un exemple :
Colonne 1 : Liste des références a chercher,
Colonne 2 : Type de recherche (pour le moment cette partie ne sera pas implémentée)
Colonne 4 : Liste des Onglets (c'est une liste des feuilles disponibles pour la recherche)
Colonne 7 : Present Base de donnes
Colonne 8 : Present Site
Colonne 9 : Present Catalogue
Colonne 10 : Page Catalogue
Pour le moment la macro en fera que donner la valeur de la cellule trouvée (pour vérification manuelle des résultats), ensuite ou la référence a été trouvée.
Le but est d'avoir les résultats dans la même ligne que la référence de la colonne 1. Mais les références des autres feuilles ne sont pas obligatoirement sur la même ligne, d'où mon intérêt de savoir ou se trouve le pointeur. Ou alors y a t il un moyen d'utiliser les plages comme un ensemble sans avoir besoin de vérifier la position du pointeur a chaque fois? En se basant sur
Dim A, C, L
Dim Plage As Range
Set Plage = UsedRange 'la plage qui contient des données
A = UsedRange.Address 'L'adresse de la plage
C = UsedRange.Column 'La première colonne
L = UsedRange.Row 'La première ligne
de ton post plus haut mais en utilisant un double For
For Each Cell In Plage1
For Each Cell2 In Plage2
If Cell = Cell2 Then
CellBD.Column = Cell2. Column +1
CellBD.Row = Cell2.Row +1
Je ne crois pas que ce bout de code marcherais, mais j'essaye d'expliquer ce que je cherche a faire ^^
En résumé, j'essaye d'afficher la valeur d'une cellule de la colonne 2 ou même 3 d'une des feuilles disponibles sur la feuille de recherche, qui est a la même ligne que la référence correspondant a la référence recherchée actuelle.
Arf, tout ce texte pour cela....j'espère ne pas trop vous ennuyer avec mes problemes.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
Modifié par lermite222 le 5/08/2010 à 16:16
Modifié par lermite222 le 5/08/2010 à 16:16
Sais pas si j'ai compris !!
Mais voilà quelque pistes.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Mais voilà quelque pistes.
Sub VoirCellule()
Dim Cel As Range, Plage As Range
Set Plage = Range("B1:B50")
For Each Cel In Plage
MsgBox Cel.Offset(0, 1) '1ère colonne à droite
MsgBox Cel.Offset(0, 2) '2ièm colonne à droite
'etc..
'La même cellule sur une autre feuille
MsgBox Sheets("feuil2").Range(Cel.Address)
'La même sur autre classeur
MsgBox Workbooks("LeNomClasseur.xls").Sheets("Feuil1").Range(Cel.Address)
Next
End Sub
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
5 août 2010 à 19:24
5 août 2010 à 19:24
Oh, merci de ta reponse toujours aussi rapide et precise ^^.
Mais il y a un petit truc dont je voudrais m'assurer, dans mon exemple j'ai mis
En fait ce a quoi je pensais c'etait faire 2 boucles :
La 1ere qui va de la 2eme ligne (la 1ere ligne a contiens les noms des colonnes) jusqu'a la derniere ligne utilisee de la 1ere colonne de la Feuille 1.
La 2eme boulce qui va de la 2eme ligne a la derniere ligne utilisee des feuilles a comparer (feuille avec les ref base de donnees, feuille avec les ref site, feuilles avec les refs catalogues, tout cela est sur plusieures feuilles differentes)
Ton exemple est correct pour quand j'aurais une correspondance, mais jevoudrais savoir si je peut lancer 2 boucle comme dans mon exemple ou si il y a un autre moyen de faire cela en basic? (j'ai l'habitude de php ou on peut imbriquer pas mal de boucles les unes dans les autres)
Mais il y a un petit truc dont je voudrais m'assurer, dans mon exemple j'ai mis
For Each Cell in Plage1
For Each Cell2 in Plage2
En fait ce a quoi je pensais c'etait faire 2 boucles :
La 1ere qui va de la 2eme ligne (la 1ere ligne a contiens les noms des colonnes) jusqu'a la derniere ligne utilisee de la 1ere colonne de la Feuille 1.
La 2eme boulce qui va de la 2eme ligne a la derniere ligne utilisee des feuilles a comparer (feuille avec les ref base de donnees, feuille avec les ref site, feuilles avec les refs catalogues, tout cela est sur plusieures feuilles differentes)
Ton exemple est correct pour quand j'aurais une correspondance, mais jevoudrais savoir si je peut lancer 2 boucle comme dans mon exemple ou si il y a un autre moyen de faire cela en basic? (j'ai l'habitude de php ou on peut imbriquer pas mal de boucles les unes dans les autres)
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
Modifié par lermite222 le 5/08/2010 à 19:45
Modifié par lermite222 le 5/08/2010 à 19:45
Bien sûr que tu peu employer deux boucles comme tu montre et faire une comparaison
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
If Cell=cell2 then ...
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
Modifié par ks13 le 5/08/2010 à 21:08
Modifié par ks13 le 5/08/2010 à 21:08
Je vois, bon, j'ai trouve le temps de poster ici, pour réaliser la macro, je vais prendre un peu de temps, en semaine je suis trop pris maintenant u_u. Je poste ici des que j'ai fini la 1ere version de la macro ^^
Merci encore pour ton aide
Merci encore pour ton aide