Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de messagebox et de type de variable

4 réponses
Avatar
David
Bonjour le forum,

J'utlise un dataset qui me permet de transférer toutes mes données vers Excel.

J'aurai aimé comparer un champs de mon dataset avec une cellule Excel, si
c'est la même, c'est OK, il fait ce que je lui demande autrement il m'envoi
un message box.

Voici ce que j'ai écris comme code :

Dim i As Byte
i = "11"
Dim j As Byte
'j = au nombre d'enregistrement dans le dataset !
For j = 0 To dts.Tables("BA2_S1").Rows.Count - 1
If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
Then...instructions.....
Else
MessageBox.Show(erreurnom)
End If

Je demande donc que si la cellule B11 est = au contenu du champs
"Nomcomplet" de mon dataset, qu'il exécute les instructions.

Il y'a deux problèmes.

Le premier est que le messagebox apparaît à chaque fois !

Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.

Je l'ai déclaré de cette façon :


Code :
Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
Access et la feuille de données Excel", "Attention !")
En VBA, c'est comme ça que je le déclarais, ça doit être différent en VB.NET
car pour moi le premier problème est dû à la déclaration de cette variable
car quand je le met en commentaire, les messagebox n'apparaît pas.

Le second problème est ce message d'erreur :


Citation:
"Cast de la châine "Nomcomplet" en nom integer non valide"


Là, je présûme que c'est un problème de conversion ??

J'ai essayé de changer mon Dim i as byte en Dim i as integer mais rien n'y
change.

Je vous remercie d'avance pour votre aide.

DD

4 réponses

Avatar
Millox Frédéric
Salut David,

1/ Tu déclares

Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
Access et la feuille de données Excel", "Attention !")


Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.

-> Logique tu initialises erreurnom par un MessageBox, donc il s'affiche
alors que tu n'as rien fait encore. Déclare plutôt :
Dim erreurnom as String = "Il y'a une différence de nom entre la table
Access et la feuille de données Excel", "Attention !"



2/ Tu écris :

If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")

D'où il sort le dtt, c'est un DataTable ????
Si oui, dtt = dts.Tables("BA2_S1") ?????
Sinon quand tu marques dtt.Rows.Item("Nomcomplet"), tu ne selectionne pas la
ligne... Je pense que tu voulez faire plutôt : dtt.Rows(j).Item("Nomcomplet")

Voilà, je ne sais pas trop si ça va t'aider ou si mes réponses n'ont rien à
voir avec tes problèmes.

A+

--
fmillox


"David" a écrit :

Bonjour le forum,

J'utlise un dataset qui me permet de transférer toutes mes données vers Excel.

J'aurai aimé comparer un champs de mon dataset avec une cellule Excel, si
c'est la même, c'est OK, il fait ce que je lui demande autrement il m'envoi
un message box.

Voici ce que j'ai écris comme code :

Dim i As Byte
i = "11"
Dim j As Byte
'j = au nombre d'enregistrement dans le dataset !
For j = 0 To dts.Tables("BA2_S1").Rows.Count - 1
If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
Then...instructions.....
Else
MessageBox.Show(erreurnom)
End If

Je demande donc que si la cellule B11 est = au contenu du champs
"Nomcomplet" de mon dataset, qu'il exécute les instructions.

Il y'a deux problèmes.

Le premier est que le messagebox apparaît à chaque fois !

Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.

Je l'ai déclaré de cette façon :


Code :
Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
Access et la feuille de données Excel", "Attention !")
En VBA, c'est comme ça que je le déclarais, ça doit être différent en VB.NET
car pour moi le premier problème est dû à la déclaration de cette variable
car quand je le met en commentaire, les messagebox n'apparaît pas.

Le second problème est ce message d'erreur :


Citation:
"Cast de la châine "Nomcomplet" en nom integer non valide"


Là, je présûme que c'est un problème de conversion ??

J'ai essayé de changer mon Dim i as byte en Dim i as integer mais rien n'y
change.

Je vous remercie d'avance pour votre aide.

DD


Avatar
David
Salut Frédéric,

Merci pour ta réponse qui crois moi, est vraiment précieuse pour moi.

Je programme en VB.NET que depuis quelques semaines, c'est pourquoi je
rencontre beaucoup de difficultés.

Merci pour l'info sur le messagebox, je le saurai pour la prochaine fois.

Par contre pour le second problème, j'avance mais j'ai toujours un souci :

rownum correspond à l'enregistrement actif de la datatable du dataset :

En mettant cette ligne de code :

If dtt.Rows(rownum).Item("Nomcomplet") Is appexcel.Cells(i, "
2") Then
instructions....

else

MessageBox.Show("Les informations entre Excel et Access sont différentes",
"Attention")
Exit Sub
End If

Il lance le messagebox et il se dit donc que la valeur dans l'enregistrement
du dtt n'est pas identique à la cellule 11,2 de Excel alors que c'est
identiquement le même.

Est-ce que tu comprends quelque chose à cela ?

J'espère que tu pourras encore m'aider.

Merci sincèrement pour tout.

David

"Millox Frédéric" wrote:

Salut David,

1/ Tu déclares

Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> Access et la feuille de données Excel", "Attention !")
Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.

-> Logique tu initialises erreurnom par un MessageBox, donc il s'affiche
alors que tu n'as rien fait encore. Déclare plutôt :
Dim erreurnom as String = "Il y'a une différence de nom entre la table
> Access et la feuille de données Excel", "Attention !"

2/ Tu écris :

If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")

D'où il sort le dtt, c'est un DataTable ????
Si oui, dtt = dts.Tables("BA2_S1") ?????
Sinon quand tu marques dtt.Rows.Item("Nomcomplet"), tu ne selectionne pas la
ligne... Je pense que tu voulez faire plutôt : dtt.Rows(j).Item("Nomcomplet")

Voilà, je ne sais pas trop si ça va t'aider ou si mes réponses n'ont rien à
voir avec tes problèmes.

A+

--
fmillox


"David" a écrit :

> Bonjour le forum,
>
> J'utlise un dataset qui me permet de transférer toutes mes données vers Excel.
>
> J'aurai aimé comparer un champs de mon dataset avec une cellule Excel, si
> c'est la même, c'est OK, il fait ce que je lui demande autrement il m'envoi
> un message box.
>
> Voici ce que j'ai écris comme code :
>
> Dim i As Byte
> i = "11"
> Dim j As Byte
> 'j = au nombre d'enregistrement dans le dataset !
> For j = 0 To dts.Tables("BA2_S1").Rows.Count - 1
> If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
> Then...instructions.....
> Else
> MessageBox.Show(erreurnom)
> End If
>
> Je demande donc que si la cellule B11 est = au contenu du champs
> "Nomcomplet" de mon dataset, qu'il exécute les instructions.
>
> Il y'a deux problèmes.
>
> Le premier est que le messagebox apparaît à chaque fois !
>
> Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.
>
> Je l'ai déclaré de cette façon :
>
>
> Code :
> Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> Access et la feuille de données Excel", "Attention !")
> En VBA, c'est comme ça que je le déclarais, ça doit être différent en VB.NET
> car pour moi le premier problème est dû à la déclaration de cette variable
> car quand je le met en commentaire, les messagebox n'apparaît pas.
>
> Le second problème est ce message d'erreur :
>
>
> Citation:
> "Cast de la châine "Nomcomplet" en nom integer non valide"
>
>
> Là, je présûme que c'est un problème de conversion ??
>
> J'ai essayé de changer mon Dim i as byte en Dim i as integer mais rien n'y
> change.
>
> Je vous remercie d'avance pour votre aide.
>
> DD


Avatar
Millox Frédéric
Salut David,

La dernière fois, je n'ai pas assez regardé ton code ( je n'ai fait que
répondre à tes questions ).

1/ L'opérateur Is n'est à utiliser que pour tester si c'est une constante.
ex: If ex Is Nothing Then -> permet de tester si ex contient la cste Nothing
( dans le cas où ex est un objet classique, cela veut dire que la var ex n'a
pas été instanciée (pas de New)).

If str Is String.Empty Then ... -> permet de tester si la var str contient
la cste String.Empty.......etc.....

2/ Donc l'opérateur Is n'est pas bien utilisé ici. Si je comprends bien,
dtt.Rows(rownum).Item("Nomcomplet") contient un String d'après le nom de
l'item("Nomcomplet"). Donc si tu veux faire propre comme code, il vaut mieux
écrire :

If dtt.Rows(rownum).Item("Nomcomplet").ToString.Equals(appexcel.Cells(i, "
2").ToString) Then ....

3/ Si après ça, tes données ne sont toujours pas égales, affiche les avec un
petit Console.WriteLine(dtt.Rows(rownum).Item("Nomcomplet").ToString) et
Console.WriteLine(appexcel.Cells(i, " 2").ToString) pour vérifier si tu
pointes au bon endroit.

Voilà.....

A+

--
fmillox


"David" a écrit :

Salut Frédéric,

Merci pour ta réponse qui crois moi, est vraiment précieuse pour moi.

Je programme en VB.NET que depuis quelques semaines, c'est pourquoi je
rencontre beaucoup de difficultés.

Merci pour l'info sur le messagebox, je le saurai pour la prochaine fois.

Par contre pour le second problème, j'avance mais j'ai toujours un souci :

rownum correspond à l'enregistrement actif de la datatable du dataset :

En mettant cette ligne de code :

If dtt.Rows(rownum).Item("Nomcomplet") Is appexcel.Cells(i, "
2") Then
instructions....

else

MessageBox.Show("Les informations entre Excel et Access sont différentes",
"Attention")
Exit Sub
End If

Il lance le messagebox et il se dit donc que la valeur dans l'enregistrement
du dtt n'est pas identique à la cellule 11,2 de Excel alors que c'est
identiquement le même.

Est-ce que tu comprends quelque chose à cela ?

J'espère que tu pourras encore m'aider.

Merci sincèrement pour tout.

David

"Millox Frédéric" wrote:

> Salut David,
>
> 1/ Tu déclares
>
> Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> > Access et la feuille de données Excel", "Attention !")
> Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.
>
> -> Logique tu initialises erreurnom par un MessageBox, donc il s'affiche
> alors que tu n'as rien fait encore. Déclare plutôt :
> Dim erreurnom as String = "Il y'a une différence de nom entre la table
> > Access et la feuille de données Excel", "Attention !"
>
> 2/ Tu écris :
>
> If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
>
> D'où il sort le dtt, c'est un DataTable ????
> Si oui, dtt = dts.Tables("BA2_S1") ?????
> Sinon quand tu marques dtt.Rows.Item("Nomcomplet"), tu ne selectionne pas la
> ligne... Je pense que tu voulez faire plutôt : dtt.Rows(j).Item("Nomcomplet")
>
> Voilà, je ne sais pas trop si ça va t'aider ou si mes réponses n'ont rien à
> voir avec tes problèmes.
>
> A+
>
> --
> fmillox
>
>
> "David" a écrit :
>
> > Bonjour le forum,
> >
> > J'utlise un dataset qui me permet de transférer toutes mes données vers Excel.
> >
> > J'aurai aimé comparer un champs de mon dataset avec une cellule Excel, si
> > c'est la même, c'est OK, il fait ce que je lui demande autrement il m'envoi
> > un message box.
> >
> > Voici ce que j'ai écris comme code :
> >
> > Dim i As Byte
> > i = "11"
> > Dim j As Byte
> > 'j = au nombre d'enregistrement dans le dataset !
> > For j = 0 To dts.Tables("BA2_S1").Rows.Count - 1
> > If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
> > Then...instructions.....
> > Else
> > MessageBox.Show(erreurnom)
> > End If
> >
> > Je demande donc que si la cellule B11 est = au contenu du champs
> > "Nomcomplet" de mon dataset, qu'il exécute les instructions.
> >
> > Il y'a deux problèmes.
> >
> > Le premier est que le messagebox apparaît à chaque fois !
> >
> > Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.
> >
> > Je l'ai déclaré de cette façon :
> >
> >
> > Code :
> > Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> > Access et la feuille de données Excel", "Attention !")
> > En VBA, c'est comme ça que je le déclarais, ça doit être différent en VB.NET
> > car pour moi le premier problème est dû à la déclaration de cette variable
> > car quand je le met en commentaire, les messagebox n'apparaît pas.
> >
> > Le second problème est ce message d'erreur :
> >
> >
> > Citation:
> > "Cast de la châine "Nomcomplet" en nom integer non valide"
> >
> >
> > Là, je présûme que c'est un problème de conversion ??
> >
> > J'ai essayé de changer mon Dim i as byte en Dim i as integer mais rien n'y
> > change.
> >
> > Je vous remercie d'avance pour votre aide.
> >
> > DD


Avatar
Millox Frédéric
Salut David,

Petit rectificatif ( grosse connerie :-) )

L'opérateur Is n'est pas un opérateur pour les constantes mais plutôt Is est
un opérateur de comparaison entre deux var. de type référence.
Une var. de type référence est utilisé pour un objet. En gros, Is te permet
de savoir si les deux var. pointent au même endroit en mémoire....

A+

--
fmillox


"Millox Frédéric" a écrit :

Salut David,

La dernière fois, je n'ai pas assez regardé ton code ( je n'ai fait que
répondre à tes questions ).

1/ L'opérateur Is n'est à utiliser que pour tester si c'est une constante.
ex: If ex Is Nothing Then -> permet de tester si ex contient la cste Nothing
( dans le cas où ex est un objet classique, cela veut dire que la var ex n'a
pas été instanciée (pas de New)).

If str Is String.Empty Then ... -> permet de tester si la var str contient
la cste String.Empty.......etc.....

2/ Donc l'opérateur Is n'est pas bien utilisé ici. Si je comprends bien,
dtt.Rows(rownum).Item("Nomcomplet") contient un String d'après le nom de
l'item("Nomcomplet"). Donc si tu veux faire propre comme code, il vaut mieux
écrire :

If dtt.Rows(rownum).Item("Nomcomplet").ToString.Equals(appexcel.Cells(i, "
2").ToString) Then ....

3/ Si après ça, tes données ne sont toujours pas égales, affiche les avec un
petit Console.WriteLine(dtt.Rows(rownum).Item("Nomcomplet").ToString) et
Console.WriteLine(appexcel.Cells(i, " 2").ToString) pour vérifier si tu
pointes au bon endroit.

Voilà.....

A+

--
fmillox


"David" a écrit :

> Salut Frédéric,
>
> Merci pour ta réponse qui crois moi, est vraiment précieuse pour moi.
>
> Je programme en VB.NET que depuis quelques semaines, c'est pourquoi je
> rencontre beaucoup de difficultés.
>
> Merci pour l'info sur le messagebox, je le saurai pour la prochaine fois.
>
> Par contre pour le second problème, j'avance mais j'ai toujours un souci :
>
> rownum correspond à l'enregistrement actif de la datatable du dataset :
>
> En mettant cette ligne de code :
>
> If dtt.Rows(rownum).Item("Nomcomplet") Is appexcel.Cells(i, "
> 2") Then
> instructions....
>
> else
>
> MessageBox.Show("Les informations entre Excel et Access sont différentes",
> "Attention")
> Exit Sub
> End If
>
> Il lance le messagebox et il se dit donc que la valeur dans l'enregistrement
> du dtt n'est pas identique à la cellule 11,2 de Excel alors que c'est
> identiquement le même.
>
> Est-ce que tu comprends quelque chose à cela ?
>
> J'espère que tu pourras encore m'aider.
>
> Merci sincèrement pour tout.
>
> David
>
> "Millox Frédéric" wrote:
>
> > Salut David,
> >
> > 1/ Tu déclares
> >
> > Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> > > Access et la feuille de données Excel", "Attention !")
> > Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.
> >
> > -> Logique tu initialises erreurnom par un MessageBox, donc il s'affiche
> > alors que tu n'as rien fait encore. Déclare plutôt :
> > Dim erreurnom as String = "Il y'a une différence de nom entre la table
> > > Access et la feuille de données Excel", "Attention !"
> >
> > 2/ Tu écris :
> >
> > If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
> >
> > D'où il sort le dtt, c'est un DataTable ????
> > Si oui, dtt = dts.Tables("BA2_S1") ?????
> > Sinon quand tu marques dtt.Rows.Item("Nomcomplet"), tu ne selectionne pas la
> > ligne... Je pense que tu voulez faire plutôt : dtt.Rows(j).Item("Nomcomplet")
> >
> > Voilà, je ne sais pas trop si ça va t'aider ou si mes réponses n'ont rien à
> > voir avec tes problèmes.
> >
> > A+
> >
> > --
> > fmillox
> >
> >
> > "David" a écrit :
> >
> > > Bonjour le forum,
> > >
> > > J'utlise un dataset qui me permet de transférer toutes mes données vers Excel.
> > >
> > > J'aurai aimé comparer un champs de mon dataset avec une cellule Excel, si
> > > c'est la même, c'est OK, il fait ce que je lui demande autrement il m'envoi
> > > un message box.
> > >
> > > Voici ce que j'ai écris comme code :
> > >
> > > Dim i As Byte
> > > i = "11"
> > > Dim j As Byte
> > > 'j = au nombre d'enregistrement dans le dataset !
> > > For j = 0 To dts.Tables("BA2_S1").Rows.Count - 1
> > > If appexcel.Cells(i, "2") Is dtt.Rows.Item("Nomcomplet")
> > > Then...instructions.....
> > > Else
> > > MessageBox.Show(erreurnom)
> > > End If
> > >
> > > Je demande donc que si la cellule B11 est = au contenu du champs
> > > "Nomcomplet" de mon dataset, qu'il exécute les instructions.
> > >
> > > Il y'a deux problèmes.
> > >
> > > Le premier est que le messagebox apparaît à chaque fois !
> > >
> > > Dès le clic sur le bouton, même avant d'arriver sur le if, il se lance.
> > >
> > > Je l'ai déclaré de cette façon :
> > >
> > >
> > > Code :
> > > Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table
> > > Access et la feuille de données Excel", "Attention !")
> > > En VBA, c'est comme ça que je le déclarais, ça doit être différent en VB.NET
> > > car pour moi le premier problème est dû à la déclaration de cette variable
> > > car quand je le met en commentaire, les messagebox n'apparaît pas.
> > >
> > > Le second problème est ce message d'erreur :
> > >
> > >
> > > Citation:
> > > "Cast de la châine "Nomcomplet" en nom integer non valide"
> > >
> > >
> > > Là, je présûme que c'est un problème de conversion ??
> > >
> > > J'ai essayé de changer mon Dim i as byte en Dim i as integer mais rien n'y
> > > change.
> > >
> > > Je vous remercie d'avance pour votre aide.
> > >
> > > DD