Déplacer colonnes en fonction valeur cellule
Résolu/Fermé
A voir également:
- Déplacer colonnes en fonction valeur cellule
- Déplacer une colonne excel - Guide
- Fonction si et - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Word colonnes indépendantes - Guide
6 réponses
thev
Messages postés
1883
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2024
691
Modifié par thev le 16/06/2016 à 23:22
Modifié par thev le 16/06/2016 à 23:22
Bonsoir,
Pour joindre un fichier : https://www.cjoint.com/
Quelques remarques sur ton code :
1- "cel" n'est pas une variable "range" mais une variable objet
2- la définition de ta plage est incohérente.
Pour joindre un fichier : https://www.cjoint.com/
Quelques remarques sur ton code :
1- "cel" n'est pas une variable "range" mais une variable objet
Dim plage As Range, cel As Object
2- la définition de ta plage est incohérente.
thev
Messages postés
1883
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2024
691
Modifié par thev le 17/06/2016 à 09:27
Modifié par thev le 17/06/2016 à 09:27
Bonjour,
Cette instruction ne fonctionne pas
La feuille ci-jointe correspond apparemment à la feuille résultat (feuil2 dans votre demande). Pouvez-vous communiquer un exemple de la feuille source (feuil1 dans votre demande).
Cette instruction ne fonctionne pas
Set plage = .Range("J12:B12" & dercol)De plus, on ne comprend pas quelle plage vous cherchez à définir
La feuille ci-jointe correspond apparemment à la feuille résultat (feuil2 dans votre demande). Pouvez-vous communiquer un exemple de la feuille source (feuil1 dans votre demande).
Bonjour,
en fait, ce que je souhaiterais c'est que l'ordinateur parcours la ligne B12aJ12 de la feuille 1 et que lorsqu'il trouve Milka il copie colle les valeurs de la colonne en dessous dans la feuille 2 à l'emplacement Milka puis qu'il continue et que si il retombe sur un Milka il fasse pareil en copie collant les valeurs en dessous des précédentes dans la feuille2. Du coup je pensais qu'en utilisant l'instruction plage ca permettait de parcourir la plage citée ci-dessus.
Je ne suis pas Sure Que j'ai fait comme il faut (apparement non vu que ca ne fonctionne pas.. Je débute alors je ne sais pas trop comment faire). Je pense qu'il faut que j'utilise un compteur ? Mais je ne sais pas trop comment.
Normalement la feuille 1 est la première photo du PDF et la feuille 2 est la seconde
Merci pour votre aide
en fait, ce que je souhaiterais c'est que l'ordinateur parcours la ligne B12aJ12 de la feuille 1 et que lorsqu'il trouve Milka il copie colle les valeurs de la colonne en dessous dans la feuille 2 à l'emplacement Milka puis qu'il continue et que si il retombe sur un Milka il fasse pareil en copie collant les valeurs en dessous des précédentes dans la feuille2. Du coup je pensais qu'en utilisant l'instruction plage ca permettait de parcourir la plage citée ci-dessus.
Je ne suis pas Sure Que j'ai fait comme il faut (apparement non vu que ca ne fonctionne pas.. Je débute alors je ne sais pas trop comment faire). Je pense qu'il faut que j'utilise un compteur ? Mais je ne sais pas trop comment.
Normalement la feuille 1 est la première photo du PDF et la feuille 2 est la seconde
Merci pour votre aide
thev
Messages postés
1883
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2024
691
Modifié par thev le 17/06/2016 à 17:14
Modifié par thev le 17/06/2016 à 17:14
Bonjour,
Donc l'instruction définissant la plage est celle-ci :
Par ailleurs, il n y a qu'une seule feuille dans votre PDF et c'est apparemment la feuille 2.
Pour copier en dessous de la ligne 12 de la feuille 1
Donc l'instruction définissant la plage est celle-ci :
Set plage = .Range("J12:B12" )
Par ailleurs, il n y a qu'une seule feuille dans votre PDF et c'est apparemment la feuille 2.
Pour copier en dessous de la ligne 12 de la feuille 1
For Each cel In plage
If cel = valcherch Then
Set cel_fin = cel.EntireColumn.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
Range(cel, cel_fin).Copy
Worksheets("Feuil2").Range("B9:B17").Select
Selection.Insert Shift:=xlDown
End If
Next cel
Voici le lien du document excel complet:
http://www.cjoint.com/c/FFutG1CTrhv
Il me semble qu'il faut que je modifie la plage pour qu'elle corresponde à celle de la feuille 2 non ?
Pourriez-vous s'il vous plait m'expliquer en détail ce que fait l'instruction :
Set cel_fin = cel.EntireColumn.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
svp ?
Merci
http://www.cjoint.com/c/FFutG1CTrhv
Il me semble qu'il faut que je modifie la plage pour qu'elle corresponde à celle de la feuille 2 non ?
Pourriez-vous s'il vous plait m'expliquer en détail ce que fait l'instruction :
Set cel_fin = cel.EntireColumn.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
svp ?
Merci
Le code fonctionne merci !!
est-ce possible de copier uniquement les 3 lignes en dessous de chaque colonne où il y a écrit milka ?
Je suppose qu'il faut indiquer la plage ? Mais comme je ne comprends pas bien l'instruction ci-dessus j'ai du mal à voir comment faire
J'aimerais obtenir ceci:
http://www.cjoint.com/xxxxxxx
Merci beaucoup
---
(Lien cjoint supprimé par la modération à ma demande de l'utilisateur).
est-ce possible de copier uniquement les 3 lignes en dessous de chaque colonne où il y a écrit milka ?
Je suppose qu'il faut indiquer la plage ? Mais comme je ne comprends pas bien l'instruction ci-dessus j'ai du mal à voir comment faire
J'aimerais obtenir ceci:
http://www.cjoint.com/xxxxxxx
Merci beaucoup
---
(Lien cjoint supprimé par la modération à ma demande de l'utilisateur).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
thev
Messages postés
1883
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2024
691
Modifié par crapoulou le 22/06/2016 à 23:35
Modifié par crapoulou le 22/06/2016 à 23:35
Cette instruction
fournit la dernière cellule (xlPrevious) dans la dernière colonne utilisée via recherche dans la plage considérée par colonne (SearchOrder) de n'importe quelle donnée ("*") .
ci-dessous nouvelle version du code
Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
fournit la dernière cellule (xlPrevious) dans la dernière colonne utilisée via recherche dans la plage considérée par colonne (SearchOrder) de n'importe quelle donnée ("*") .
ci-dessous nouvelle version du code
Sub Renouvellement() Dim plage As Range, cel As Object Dim valcherch As String Dim i As Integer Application.ScreenUpdating = False valcherch = "milka" With Worksheets("Feuil1") Set dernière_cellule_utilisée = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious) Set plage = .Range(.[A12], dernière_cellule_utilisée) End With i = 0 For Each cel In plage If cel = valcherch Then Set cel_début = cel.Offset(1) Set cel_fin = cel.Offset(3) Range(cel_début, cel_fin).Copy Worksheets("Feuil2").[B9].Offset(i).PasteSpecial i = i + 3 End If Next cel Application.ScreenUpdating = True End Sub
Ah d'accord ! Je comprends mieux merci !
J'ai testé le code. Il fonctionne mais uniquement sur la première ligne.
Serait-il possible de l'appliquer aux lignes du dessous ? (ligne 16 et 20 par exemple ?) J'ai essayé de changer dans set plage mais cela fait tout buguer. Je crois que je n'ai pas bien compris comment utiliser cette instruction. Pourriez-vous m'éclairer svp ? J'aimerais comprendre afin de pouvoir l'utiliser par moi-même à l'avenir !
Merci pour tout
Cordialement
J'ai testé le code. Il fonctionne mais uniquement sur la première ligne.
Serait-il possible de l'appliquer aux lignes du dessous ? (ligne 16 et 20 par exemple ?) J'ai essayé de changer dans set plage mais cela fait tout buguer. Je crois que je n'ai pas bien compris comment utiliser cette instruction. Pourriez-vous m'éclairer svp ? J'aimerais comprendre afin de pouvoir l'utiliser par moi-même à l'avenir !
Merci pour tout
Cordialement
thev
Messages postés
1883
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2024
691
Modifié par crapoulou le 22/06/2016 à 23:35
Modifié par crapoulou le 22/06/2016 à 23:35
Avec l'exemple fourni, la dernière cellule de la dernière colonne utilisée est F19.
La plage utilisée dans le code représente donc les cellules de A12 à F19.
Rien ne t'empêche de déclarer une plage nominativement, comme ceci
ou
[A12] est la notation simplifiée de range("A12")
La plage utilisée dans le code représente donc les cellules de A12 à F19.
Rien ne t'empêche de déclarer une plage nominativement, comme ceci
Set plage = .Range(.[A12], .[J23])
ou
Set plage = .[A12:J23].Cells
[A12] est la notation simplifiée de range("A12")
Modifié par kiju9634 le 17/06/2016 à 07:47
Merci de votre réponse.
Pourquoi ma plage est-elle incohérente ? Je débute en VBA j'ai un peu de mal à comprendre le fonctionnement de certaines instructions. Pourriez-vous m'expliquer svp ?
Le fichier est le suivant:
http://www.cjoint.com/c/FFrfTLXQBrv/
Il est en PDF car l'excel etait trop volumineux.
Merci !