Blocage sur une macro
kazede
-
kazede -
kazede -
Bonjour à tous,
Je vous expose mon problème, je n'arrive pas à me lancer (je débute en vba).
J'ai une base de donnée à mettre à jour en fonction d'un autre fichier lui aussi mis à jour mais par quelqu'un d'autre.
En gros les choses se presentent de la manière suivante:
Fichier 1:
Colonnes A à G par exemple.
Fichier 2:
Colonne A à Z.
J'ai besoin de comparer les colonnes A du fichier 1 à la colonne A du fichier 2.
La ligne 1 de la colonne A du fichier 1 correspond à (exemple) "abcd".
J'ai besoin de retrouver cette valeur qui peut être sur n'importe qu'elle ligne de la colonne A du fichier 2.
Une fois la valeur "abcd" trouvée dans le fichier 2 en colonne A, j'ai besoin de copier ce qu'il y a dans les cellules H à Z de la ligne ou est trouvée "abcd" (dans le fichier 2) pour ensuite venir les copier en colonne H de mon fichier 1 (sur la bonne ligne bien sur).
Une fois l'opération terminée, je dois passer à la ligne 2 du fichier 1 prendre la valeur et à nouveau scanner la colonne A du fichier 2 pour la retrouver, puis pour copier a nouveau les valeurs correspondantes.
Voila.
J'espère avoir été clair dans mon explication, désolé si ce n'est pas le cas.
Merci d'avance.
Ps: Je ne cherche pas une solution toute faite, j'aime apprendre, me mettre sur la voie m'aiderait tout autant.
Edit: J'ai réussi à faire quelque chose:
Seulement quand je fais un pas à pas détaillé, je vois que le problème, c'est qu'une fois que j'ai scanné ma première case sur ma feuille 2 je ne passe pas a la suivante...
Quelqu'un peut m'éclairer?
Edit2: je pense avoir trouvé, mais j'aimerais être sur:
j'ai remplacé le Else par ceci:
Tout simplement, et sa à l'air de fonctionner maintenant...
Je vous expose mon problème, je n'arrive pas à me lancer (je débute en vba).
J'ai une base de donnée à mettre à jour en fonction d'un autre fichier lui aussi mis à jour mais par quelqu'un d'autre.
En gros les choses se presentent de la manière suivante:
Fichier 1:
Colonnes A à G par exemple.
Fichier 2:
Colonne A à Z.
J'ai besoin de comparer les colonnes A du fichier 1 à la colonne A du fichier 2.
La ligne 1 de la colonne A du fichier 1 correspond à (exemple) "abcd".
J'ai besoin de retrouver cette valeur qui peut être sur n'importe qu'elle ligne de la colonne A du fichier 2.
Une fois la valeur "abcd" trouvée dans le fichier 2 en colonne A, j'ai besoin de copier ce qu'il y a dans les cellules H à Z de la ligne ou est trouvée "abcd" (dans le fichier 2) pour ensuite venir les copier en colonne H de mon fichier 1 (sur la bonne ligne bien sur).
Une fois l'opération terminée, je dois passer à la ligne 2 du fichier 1 prendre la valeur et à nouveau scanner la colonne A du fichier 2 pour la retrouver, puis pour copier a nouveau les valeurs correspondantes.
Voila.
J'espère avoir été clair dans mon explication, désolé si ce n'est pas le cas.
Merci d'avance.
Ps: Je ne cherche pas une solution toute faite, j'aime apprendre, me mettre sur la voie m'aiderait tout autant.
Edit: J'ai réussi à faire quelque chose:
Sub test()
'
' test Macro
' Macro enregistrée le 21/02/2011 par a869143
'
Application.ScreenUpdating = False
Sheets("essai").Select
Dim toto As Range
Dim Compteur1 As Double
Dim Compteur2 As Double
Compteur1 = 0
Compteur2 = 0
For Each toto In Range("A2:A20")
If toto.Value <> "" Then Compteur1 = Compteur1 + 1
Next
Range("A2").Select
donnee1 = ActiveCell
Sheets("test").Select
Range("A1").Select
ActiveCell.Offset(1, 0).Select
While Compteur2 < Compteur1
If ActiveCell = donnee1 Then
Ligne = ActiveCell.Row
Range("B" & Ligne, "E" & Ligne).Select
Selection.Copy
Sheets("essai").Select
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Select
donnee1 = ActiveCell
Sheets("test").Select
Range("A1").Select
ActiveCell.Offset(1, 0).Select
Compteur2 = Compteur2 + 1
Else
Sheets("essai").Select
ActiveCell.Offset(1, 0).Select
donnee1 = ActiveCell
Sheets("test").Select
Range("A1").Select
ActiveCell.Offset(1, 0).Select
Compteur2 = Compteur2 + 1
End If
Wend
Application.ScreenUpdating = True
End Sub
Seulement quand je fais un pas à pas détaillé, je vois que le problème, c'est qu'une fois que j'ai scanné ma première case sur ma feuille 2 je ne passe pas a la suivante...
Quelqu'un peut m'éclairer?
Edit2: je pense avoir trouvé, mais j'aimerais être sur:
j'ai remplacé le Else par ceci:
Else ActiveCell.Offset(1, 0).Select
Tout simplement, et sa à l'air de fonctionner maintenant...
A voir également:
- Blocage sur une macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Blocage messenger - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Blocage smtp sortant - Forum Freebox
4 réponses
Bonjour
Ps: Je ne cherche pas une solution toute faite, j'aime apprendre, me mettre sur la voie m'aiderait tout autant.
voici une solution "toute faite": tu progresseras mieux en étudiant des solutions apportées à des problèmes que tu as du mal à résoudre. l'aide en ligne (F1) est très utile pour piger le pourquoi du comment
déjà, note que les select-selection sont bannis...
un tuto qui pourra t'aider
https://bidou.developpez.com/article/VBA/
Michel
Ps: Je ne cherche pas une solution toute faite, j'aime apprendre, me mettre sur la voie m'aiderait tout autant.
voici une solution "toute faite": tu progresseras mieux en étudiant des solutions apportées à des problèmes que tu as du mal à résoudre. l'aide en ligne (F1) est très utile pour piger le pourquoi du comment
Option Explicit
Sub comparer()
Dim cellule As Range
Dim lig As Byte, ligne As Byte
'fige le défilement de l'écran
Application.ScreenUpdating = False
With Sheets("essai")
For Each cellule In .Range("A2:A20")
'utilisation d'une fonction feuille Excel NB.SI --> si la valeur de la cellule est dans la colonneA de "test"
If Application.CountIf(Sheets("test").Columns("A"), cellule) > 0 Then
'trouve la ligne dans "test"
lig = Sheets("test").Columns("A").Find(cellule, Range("A1"), xlValues).Row
'ligne de la cellule en cours dans "essais"
ligne = cellule.Row
'reporte les valeurs test vers essai
.Range("H" & ligne & ":Z" & ligne).Value = Sheets("test").Range("H" & lig & ":Z" & lig).Value
End If
Next
End With
End Sub
déjà, note que les select-selection sont bannis...
un tuto qui pourra t'aider
https://bidou.developpez.com/article/VBA/
Michel
Si.
Je m'aperçois que quand la valeur de ma feuille 1 que j'ai mise dans la variable donnee1 n'est pas présente dans la feuille 2, la macro fait une erreur, et ne termine pas son travail...
Un moyen de gèrer les valeurs non trouvées? Par exemple si donnee1 non trouvée dans la feuille 2, ne rien faire et passer à la valeur de donnee1 suivante.
Je bloque un peu la...
Si quelqu'un voit comment simplifier la macro aussi, je veux bien un coup de main.
Merci.
Je m'aperçois que quand la valeur de ma feuille 1 que j'ai mise dans la variable donnee1 n'est pas présente dans la feuille 2, la macro fait une erreur, et ne termine pas son travail...
Un moyen de gèrer les valeurs non trouvées? Par exemple si donnee1 non trouvée dans la feuille 2, ne rien faire et passer à la valeur de donnee1 suivante.
Je bloque un peu la...
Si quelqu'un voit comment simplifier la macro aussi, je veux bien un coup de main.
Merci.
Merci Michel_m,
C'est vrai que d'analyser quelque chose de bien programmé apporte plus qu'un programme fait soit même mais très brouillon. C'est vraiment très propre et cela correspond parfaitement à mes attentes.
Je note ta remarque pour les select-selection.
Ok pour le tuto, j'y vais de ce pas.
Encore merci.
Edit: Dis moi, comment faire pour mettre en évidence les lignes de la feuille 2 qui n'ont pas été copiées dans la feuille 1??
Comment pourrais-je les faire ressortir par exemple en supprimant de la feuille 2 celles qui ont été copiées?
C'est vrai que d'analyser quelque chose de bien programmé apporte plus qu'un programme fait soit même mais très brouillon. C'est vraiment très propre et cela correspond parfaitement à mes attentes.
Je note ta remarque pour les select-selection.
Ok pour le tuto, j'y vais de ce pas.
Encore merci.
Edit: Dis moi, comment faire pour mettre en évidence les lignes de la feuille 2 qui n'ont pas été copiées dans la feuille 1??
Comment pourrais-je les faire ressortir par exemple en supprimant de la feuille 2 celles qui ont été copiées?
comment pourrais-je les faire ressortir par exemple en supprimant de la feuille 2 celles qui ont été copiées?
bin tu connais la ligne et la colonne donc... je te laisse chercher
et à la fin si tu veux supprimer les "trous" sans faire de boucle regarde avec l'enregistreur de macro du coté de "atteindre-cellules" puis de supprimer
bin tu connais la ligne et la colonne donc... je te laisse chercher
et à la fin si tu veux supprimer les "trous" sans faire de boucle regarde avec l'enregistreur de macro du coté de "atteindre-cellules" puis de supprimer
Je pense avoir trouvé.
Il reste cependant une petite chose à voir, la copie des cellules copie uniquement les valeurs de la plage de cellule, j'aimerais également que la macro copie la mise en forme (texte, couleur, bordure etc). Comment m'y prendre?
Je pense qu'il faut remplacer sur la ligne :
J'ai essayé de remplacer value par Cells, mais sa ne marche pas. Je cherche autre chose...
Ps: ton post avec ta macro a été supprimé ? elle ne s'affiche plus...
Il reste cependant une petite chose à voir, la copie des cellules copie uniquement les valeurs de la plage de cellule, j'aimerais également que la macro copie la mise en forme (texte, couleur, bordure etc). Comment m'y prendre?
Je pense qu'il faut remplacer sur la ligne :
.Range("BH" & ligne & ":CB" & ligne).Value = Sheets("tableau de suivi 2").Range("BA" & lig & ":BV" & lig).Value
J'ai essayé de remplacer value par Cells, mais sa ne marche pas. Je cherche autre chose...
Ps: ton post avec ta macro a été supprimé ? elle ne s'affiche plus...