Tester la colonne ou se trouve le bouton

Bonjour à tous,

Voici une macro que j'ai créé avec l'aide d'une personne sur un forum.

L'objectif : Quand l'ordinateur détecte un chiffre autre que 0 et autre qu'un texte dans une colonne , la ligne contenant ce chiffre est copiée sur une autre feuille du classeur.

Pour l'instant, cette macro fonctionne parfaitement, mais je dois toujours spécifier la colonne où la vérification doit se faire dans la macro. Et c'est laborieux quand 50 colonnes doivent être testées.

Ce que je voudrais : C'est que l'ordinateur fasse le "check" dans la colonne ou se trouve le bouton (et que je ne doive pas la spécifier dans la macro). Puis que les lignes qui contiennent autre chose que 0 ou du texte soient copiées dans une autre feuille (à partir de la ligne 12) .

Voici la macro en question :

Sub trihiver1()

'mot de passe

Dim Pass As String

Pass = InputBox("Mot de passe requis", "Imprimer le bon de commande", "Saisir le mot de passe ici")

If Pass <> "print" Then

Exit Sub

Else

Sheets("Bon de commande").Select

With ActiveSheet.PageSetup

.CenterHeader = "&""Arial,Gras""&10Commandes Hiver Semaine 1"

.RightHeader = "&""Arial,Gras""&10Date: " & Format(Date, "d mmm yyyy")

End With

Columns("A:AZ").Hidden = False

Range("A4:B4").FormulaR1C1 = "'HIVER - Semaine 1"

Rows("12:1900").Clear

Range("A12").Select

Dim F_S As Worksheet 'Feuille source

Dim F_D As Worksheet 'Feuille Destination

Dim Lig_S As Long 'Ligne source

Dim Lig_D As Long 'Ligne destination

'MEI **********************************************

'Définition des feuilles

Set F_S = Sheets("Commandes") 'feuille source = onglet(Rex)

Set F_D = Sheets("Bon de commande") 'feuille destination = onglet(perimee)

'définition des lignes

'Lig_D = F_D.Range("D1900").End(xlUp).Row + 1

'Ligne destination est la première de D vide

Lig_D = 12

'Programme *****************************************

For Lig_S = 12 To F_S.Range("D1900").End(xlUp).Row

'Pour Ligne source = dernière non vide en G jusqu'à la ligne 1

'en passant à la ligne précédente par décrémentation (-1)

'Quand la valeur est inférieure à 1, on passe à laligne suivant Next Lig_S

If IsNumeric(F_S.Range("D" & Lig_S)) Then

'évite les erreurs si tu as un titres

If Int(F_S.Range("D" & Lig_S)) > 0 Then

'D testé contient une date inférieure à aujourd'hui

F_S.Rows(Lig_S).Copy

F_D.Rows(Lig_D).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=False

F_D.Rows(Lig_D).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=False

'on copie la ligne source sur la ligne destination

Lig_D = Lig_D + 1

'on passe à la ligne destination suivante

End If

End If

Next Lig_S

'Retour à l'instruction For Lig_S....

Columns("E:AU").Hidden = True

Columns("C:C").Hidden = True

MsgBox ("Fin de transfert")

'on avertit que c'est fini

Reponse = MsgBox("Voules-vous imprimer?", 36, "Demande d'impression")

If Reponse = 6 Then ActiveSheet.PrintOut Copies:=1

End If

End Sub

Merci d'avance pour votre aide !

Bonjour,

Le pb est que ton bouton est un objet et que tu peux le déplacer dans toute ta feuille

Le bouton dont tu parles se trouve dans quelle colonne ?

Tu parles aussi de "bouton à spécifier dans ta macro" ??? Je ne vois rien à ce sujet dans le code. Peux tu expliquer.

J'aimerais mieux voir ton fichier de manière à mieux cerner ta demande.

A te relire

Dan

En fait il y aurait plusieurs boutons qui ne seraient pas plus large que la colomne dans laquelle ils se trouveraient. Ces boutons auraient la taille d'une cellule et seraient imaginons au nombre de 15 ou 20. Ils ne sont pas sensés bouger de place.

Ce que je voulais dire, c'est que je dois à chaque fois spécifier dans la macro la lettre de la colonne qui doit être testée. Et ce que j'aurai voulu, c'est que la macro détermine automatiquement la colonne qui doit être testée en fonction de la colonne où se trouve le bouton.

Merci d'avance pour ton aide.

re,

Pourquoi ne pas mettre un seul bouton qui déclenche une macro qui va te demander quelle colonne tu veux tester.

J'ai un doute sur cette proposition car en te lisant, il se peut que c'est ce que tu veux éviter.

D'où une autre solution qui serait d'utiliser un double click en ligne 1 de la colonne pour contrôler la colonne en question.

Le but étant d'éviter de mettre des boutons partout sur ta feuille.

A te relire

Dan

Bonjour Dan,

Ta première proposition , mettre un seul bouton qui demande quelle colonne doit être testée me semble pas mal.

Tu pourrais faire cela ?

Merci d'avance,

DV.

re,

Dans ton exemple de macro, c'est sur la ligne D que tu effectues le contrôle ?

A te lire

Dan

Oui, c'est la colonne D qui est testée.

Bonjour,

essaye ceci :

1. En début de ta macro --> Dim col As String

2. Avant la définition des lignes --> col = Application.InputBox("Entrer la référence lettre de la colonne à tester")

3. Pour inclure la colonne à tester, utilise "col" à la place de ta colonne. Ici à la place de "D"

Exemple :

A la place de

Lig_D = F_D.Range("D1900").End(xlUp).Row + 1

mets

Lig_D = Range(col & "1900").End(xlUp).Row + 1

Amicalement

Dan

Bonjour Dan,

Merci, ça fonctionne nickel !!!.

J'ai encore une petite question. Comme tu peux le voir en bas de la macro, la ligne complète est copiée sur une autre page mais seule une partie de la ligne m'intéresse. Si par exemple je teste la colonne H, la ou les lignes contenant des infos sont copiées sur la page "Bon de commande". Sur cette page je ne veux garder que les colonnes A,B et cacher toutes les colonnes avant la colonne testée (dans l'exemple C à G) et après la colonne testée jusqu'au la colonne "AU" (donc ici de I à AT).

Je ne sais pas comment indiquer cela dans le code... pourrais tu m'aider ?

Merci,

DV

3test.xls (13.50 Ko)
Rechercher des sujets similaires à "tester colonne trouve bouton"